我正在开发一个应用程序,它使用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