我正在開發一個應用程序,它使用OAuth進行身份驗證,但我在處理OAuth回調時遇到了一些問題。如何使用Intent過濾器處理OAuth URL回調(如果使用webview進行身份驗證)?
認證
我的應用程序有一個的WebView作爲登錄屏幕,我獲得一個網址加載權威性形式在我的網頁流量。比方說,該網址是:
https://myoauthhost.com/oauth/auth?response_type=code&client_id=XXXXXXX&redirect_uri=YYYYYYYY&scope=ZZZZZZZZZZ
,並在AUTH活動(AuthActivity.java),我有以下幾點:
String authURL = https://myoauthhost.com/oauth/auth?response_type=code&client_id=XXXXXXX&redirect_uri=YYYYYYYY&scope=ZZZZZZZZZZ
myWebView.loadUrl(authURL);
在manifest.xml
,對OAuth的回調我有以下處理:
<activity
android:name=".AuthActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" >
<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:host="authprovider"
android:scheme="auth" />
</intent-filter>
</activity>
的問題
當在webview中使用(使用loadURL()方法)時,此URL重定向到另一個包含REAL OAUTH WEB從(應該在Web視圖中加載)的url。問題是,這個重定向在Android中自動啓動意圖選擇:由於URL應該由網絡瀏覽器處理,因此Android允許您選擇手機上可用的網絡瀏覽器之一打開URL。
因爲這不是我想要的,我必須包括以下代碼,以便重定向web視圖中處理,但不啓動Web瀏覽器(或其他):與此
myWebView.setWebViewClient(new WebViewClient());
所以代碼,重定向處理「在web視圖」,我有登錄屏幕顯示。
然後我可以輸入憑證(例如:通過Twitter的oauth),但是當認證完成後,接收到回撥,但接下來應該處理回叫的活動(配置爲在清單中接收回叫的AuthActivity)沒有啓動。相反,我在webview中顯示一條消息,指出找不到url回調(在我們的例子中:authprovider:// auth/XXX?xxx = yyy,如清單中配置的那樣)。
的原因可能是下面的代碼:
myWebView.setWebViewClient(new WebViewClient());
前面介紹過,告訴Android web視圖處理一切。所以,現在,由於回調url不是一個web網址,它處理它很麻煩,甚至無法啓動可以處理它的intent。
問題
我怎樣才能解決這個問題? 我應該可以讓活動處理回調,但不要讓webview嘗試加載它。
任何幫助,將不勝感激提前
感謝
我有一個不同的情況,試圖將OAuth與'AccountManager'和'android:launchMode =「singleInstance」'集成在一起。 – d370urn3ur