Android'de AccountManager
özel bir hesap türü uygulayan Ben akışında işareti aşağıdaki sorun var: OAth sağlayıcı üzerinden gerçekleşmesi gerektiğini deTarayıcı niyet ve doğru aktivite (kapat açılan sekme) dönmek
işareti. Bu nedenle, WebView
'u başlatan ve OAuth akışını başlatan bir SignInActivity
oluşturdum. Bu, my-custom-scheme://callback
geri çağrısı WebView
algıladığında, code
querystring parametresini alır ve akışı tamamladığında, iyi çalışır. WebView
kullanmanın dezavantajı, kullanıcı zaten tarayıcıda aktif bir oturuma sahip olsa bile, bu oturum WebView
'da kullanılmamaktadır, böylece kullanıcının WebView
numaralı telefondan tekrar giriş yapması gerekecektir.
AndroidManifest.xml
bir
intent-filter
kullanarak geçiş çalıştı:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="my-custom-scheme" android:path="callback"/>
</intent-filter>
Yerine SignInActivity
bir WebView
açarak Sonra bir tarayıcı niyet başlatıp vurmak için tarayıcı için bekleyin my-custom-scheme://callback
. Bu işleri
if (intent != null && intent.getData() != null && getString("my-custom-scheme").equals(intent.getData().getScheme())) {
String code = getIntent().getData().getQueryParameter("code");
// complete oauth flow
}
: Benim SignInActivity
yılında
Intent browserIntent = new Intent(Intent.ACTION_VIEW, "http://oauth2provider/authorize");
startActivity(browserIntent);
finish();
Ben geri arama işlemek için aşağıdaki kodu var. Ama, sorunun (nihayet!) için :
- kullanıcı oturum değilse, tarayıcı niyet oauth sağlayıcı oturum açma sayfası görüntülenecektir. Kullanıcı oturum açtıktan sonra, Chrome benim özel şemamıma yönlendirilecek: // geri arama ve amaç için
SignInActivity
başlatılacak. Bu etkinlik görünmez olduğu için, tarayıcı sayfada oturum açmada kalacaktır ve kullanıcı hiçbir şey olmamış gibi görünecektir. Tarayıcı asla kapanmaz. - Kullanıcı önceden oturum açmışsa, oauth sağlayıcısı doğrudan özel programım: // geri çağrısına yönlendirilir. Bu durumda, tarayıcı sekmesi otomatik olarak kapatılır, ancak tarayıcının kendisi açık kalır (hiçbir sekme görünmeden).
Yani benim soru: olup orada zaten benim-özel şemaya yönlendirildi sonra tarayıcı farklı davranır yapmak için: // geri arama? İdeal olarak, geri dönüşüme yeniden yönlendirildikten ve etkinlik yığındaki bir önceki etkinliğe (yani, SignInActivity
başından itibaren başlayan aktiviteye) döndükten sonra kapatmak istiyorum.