2016-02-29 17 views
9

Çalışmak için kullanılan bir oauth2 kimlik doğrulaması yapan bir uygulama üzerinde çalışıyorum, ancak maalesef artık çalışmıyor. Bildiğim kadarıyla (% 100 emin değil) kodda hiçbir şey değişmedi, o yüzden neden artık işe yaramayacağını bilmiyorum.Android uygulamasında neden gmail oauth çalışmıyor?

uygulaması bir web görüntülemesini oluşturur ve bu url (sadece değişti istemci kimliği ve etki alanım) üzerinde kimlik doğrulaması için google için yönlendirir bizim sunucudan bir url yükler: Hemen onu yönlendirir

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 

:

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&ltmpl=popup&oauth=1&sarp=1&scc=1 

Aynı sistem, bir çekicilik gibi çalışan iOS uygulamasından da kullanılır. Yani bizim sunucu uygulaması ile yanlış bir şey yok. Web görünümünün google'a yönlendirilmesinden sonra, otomatik olarak herhangi bir google ekranı gösterilmeden uygulamaya geri döner. Ben görünümü açılacaktır için aşağıdaki kodu kullanıyorum:

@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; 
} 

ve şöyle logcat çıkışı: Bu günlük gerçekten bir hata vermez

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&ltmpl=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 

beri, emin değilim neyin yanlış olabileceği

Neyin yanlış olabileceğine veya bunun nasıl hata ayıklanabileceğine dair bir fikri olan var mı? Tüm ipuçları bekliyoruz!

+0

Belki de bu yardımcı olacaktır: http://stackoverflow.com/questions/12854468/google-oauth-api-not-working-anymore-404-error – domax

+0

Sadece vahşi bir tahmin: Bu erişim izni vermiş olabilirsiniz hatırlanmak ve google cihazınızda kayıtlı olan google hesabına dayalı olarak başarıyla doğrulanıyor mu? Cihazınızdaki google hesabını kaldırmayı deneyin, uygulamanızdaki verileri temizleyin ve tekrar deneyin. – Codebender

+0

Uygulamanızla sunucu ve google sunucusuyla iletişimi izlemek için facebook http://facebook.github.io/stetho/ adresinden Stetho kullanın. –

cevap

1

Kodun büyük kısmı, kullanmakta olduğunuz API'ların bazı bölümlerindeki bir güncelleştirme nedeniyle çalışmayı durdurduysanız; Sanırım OAuth'dan OAuth2'ye veya muhtemelen basit bir yama güncellemesinden güncellenebilir. En kolay düzeltme senin AndroidManifest.xml için kullandığı izinler ve meta verileri eklemek olacaktır:

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.GET_ACCOUNTS"/> 
<uses-permission android:name="android.permission.USE_CREDENTIALS"/> 

<meta-data android:name="com.google.android.gms.version" 
      android:value="@integer/google_play_services_version" /> 

ki bu, onun çözmezse, büyük olasılıkla el altında daha büyük bir sorun vardır.

this post göre, bunun onCreateView() önce denir, çünkü herhangi bir grafiksel olmayan başlatmaları yapmak için onCreate() kullanmak daha iyidir. için öncelikle ihtiyaç şöyle cihazdan bir hesap seçin (sizin Main.java veya MainActivity.java bu koymak) için, this post belirtildiği gibi google giriş yapabilmek için: Sonra

public static AccountManager accountManager; 
accountManager = AccountManager.get(this); 
Account[] accounts = accountManager.getAccountsByType("com.google"); 

, sen almak gerekir şöyle seçilen hesaptan jetonu: Eğer Token ve Hesap kimlik doğrulaması kez Ardından

private void onAccountSelected(final Account account) { 
    accountManager.getAuthToken(account, AUTH_TOKEN_TYPE, null, this, new AccountManagerCallback<Bundle>() { 
     public void run(AccountManagerFuture<Bundle> future) { 
      try { 
       String token = future.getResult().getString(AccountManager.KEY_AUTHTOKEN); 
       useToken(account, token); 
      } catch (OperationCanceledException e) { 
       onAccessDenied(); 
      } catch (Exception e) { 
       handleException(e); 
      } 
     } 
    }, null); 
} 

, sen (doğrulama kodu için OAuth2 GitHub Source bakınız) OAuth2 kullanma google için giriş mümkün olacak.

Hala sorun yaşıyorsanız ve/veya ben tam, WebView ile OAuth2 nasıl kullanılacağına dair AccountManager ve API aramaları veya this ile OAuth2 nasıl kullanılacağına dair this kontrol sorunuzu cevap vermedi . İkincisi muhtemelen sizin ihtiyaçlarınız için daha fazla ilgilidir. Her ikisi de, aradığınız şeyi nasıl yapacağınıza dair tüm örnek dosyaları verir.

varsa bile yine Yorum bırakmak için çekinmeyin, yardımcı veya soru veya endişeniz ihtiyaç Yukarıdaki iki bağlantıları okuduktan sonra!

İlgili konular