Pracuję nad aplikacją, która uwierzytelnia oauth2, która działała, ale niestety już nie działa. O ile wiem (ale nie w 100% pewna) nic się nie zmieniło w kodzie, więc nie wiem, dlaczego to by nie zadziałało.Dlaczego Gmail nie działa w mojej aplikacji na Androida?
Aplikacja tworzy webview i ładuje URL z naszym serwerem, który przekierowuje do Google w celu uwierzytelnienia na ten adres URL (tylko zmiana identyfikatora klienta i mojej domeny):
https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=1234567890-XXXXXXX.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Fexample.com%3A5000%2Fchannel%2Fgmail%2Fcallback&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fgmail.readonly&access_type=offline
który natychmiast przekierowuje go na adres:
https://accounts.google.com/ServiceLogin?passive=1209600&continue=https://accounts.google.com/o/oauth2/auth?access_type%3Doffline%26scope%3Dhttps://www.googleapis.com/auth/userinfo.email%2Bhttps://www.googleapis.com/auth/gmail.readonly%26response_type%3Dcode%26redirect_uri%3Dhttp://example.com:5000/channel/gmail/callback%26client_id%3D123456789-XXXXX.apps.googleusercontent.com%26hl%3Dnl%26from_login%3D1%26as%3D-2178738b5063e716<mpl=popup&oauth=1&sarp=1&scc=1
Ten sam system jest używany z naszej aplikacji na iOS, która działa jak urok. Więc nie ma nic złego w naszej implementacji serwera. Po przekierowaniu do strony internetowej Google automatycznie powraca do aplikacji bez wyświetlania żadnego ekranu google. używam następujący kod, aby otworzyć webview:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_browser_webview, container, false);
webView = (WebView) view.findViewById(R.id.web_view);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDisplayZoomControls(false);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setDomStorageEnabled(true);
webView.setWebViewClient(new WebViewClient() {
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Log.wtf("ERROR", description + " " + failingUrl);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.wtf("WEBVIEW URL", url);
if (url.contains(Api.API_ENTER_POINT)) {
// We never actually get here
getActivity().finish();
}
return false; //Allow WebView to load url
}
});
if (userId != null & userToken != null) {
Log.d("Gmail login", String.format(Api.API_GMAIL,userId,userToken));
webView.loadUrl(String.format(Api.API_GMAIL,userId,userToken));
}
return view;
}
a wyjście logcat jest następujący:
02-29 18:56:39.028 27510-27510/com.example D/Gmail login: http://example.com:5000/api/v1/channel/gmail/on/1/CAAV8cDYVv9wBAKDfKu7zjInpUbSxBjSiouG8iFtP2EGKjb63AOAjirFf9SepSwe62PsNt0pflwZBKs8xvoH2Y7cnOsHTC33ikbwLFgwiqmK7AtHYzo2BTZAmiDGQvCKZBSdjIR5o5zvgqSZAFiGEU10PVTnXw2fRJzukQ0VEVoZC9VrO7el8hjeg2VoVBFhb9ppPCsHYkPKRWgThKJ76VJS4K3m2X7LwZD
02-29 18:56:39.092 27510-27510/com.example D/cr_Ime: [ImeAdapter.java:358] onViewFocusChanged: gainFocus [true]
02-29 18:56:39.119 27510-27510/com.example D/cr_Ime: [ImeAdapter.java:140] onCreateInputConnection returns null.
02-29 18:56:39.162 27510-27510/com.example I/Timeline: Timeline: Activity_idle id: [email protected] time:227199315
02-29 18:56:39.163 27510-27510/com.example A/WEBVIEW URL: https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=1234567890-XXXXXXXXXX.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Fexample.com%3A5000%2Fchannel%2Fgmail%2Fcallback&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fgmail.readonly&access_type=offline
02-29 18:56:39.216 27510-27510/com.example A/WEBVIEW URL: https://accounts.google.com/ServiceLogin?passive=1209600&continue=https://accounts.google.com/o/oauth2/auth?access_type%3Doffline%26scope%3Dhttps://www.googleapis.com/auth/userinfo.email%2Bhttps://www.googleapis.com/auth/gmail.readonly%26response_type%3Dcode%26redirect_uri%3Dhttp://example.com:5000/channel/gmail/callback%26client_id%3D1234567890-XXXXXXXXXX.apps.googleusercontent.com%26hl%3Dnl%26from_login%3D1%26as%3D-231b0767e02a8ca9<mpl=popup&oauth=1&sarp=1&scc=1
02-29 18:56:39.283 27510-27510/com.example I/Timeline: Timeline: Activity_idle id: [email protected] time:227199436
02-29 18:56:39.287 27510-27510/com.example D/cr_Ime: [ImeAdapter.java:358] onViewFocusChanged: gainFocus [false]
02-29 18:56:39.287 27510-27510/com.example D/cr_Ime: [ImeAdapter.java:326] hideKeyboard
02-29 18:56:39.288 27510-27510/com.example D/cr_Ime: [InputMethodManagerWrapper.java:56] isActive: false
Od tego dziennika nie naprawdę daje błąd, jestem pewien co może być nie tak.
Czy ktoś ma pojęcie, co może być złe lub jak mogę to debugować? Wszystkie wskazówki są mile widziane!
Może to pomoże: http://stackoverflow.com/questions/12854468/google-oauth-api-not-working-anymore-404-error – domax
Po prostu dzikie domysły: Możliwe, że zezwoliłeś na dostęp być zapamiętanym, a Google pomyślnie uwierzytelnia się na podstawie konta Google zarejestrowanego na twoim urządzeniu? Spróbuj usunąć konto Google na urządzeniu, wyczyść dane w aplikacji i spróbuj ponownie. – Codebender
Użyj Stetho z Facebooka http://facebook.github.io/stetho/ do monitorowania komunikacji między Twoją aplikacją a serwerem i serwerem google .. –