|
发表于 2011-10-22 18:19:06
|
显示全部楼层
Re:Q
昨天就在找了一天没找的想放弃时,终于找到解决方法了:在开发新浪微博android客户端的时候需要oauth认证,也就是说要打开一个新浪的网页,用户在授权之后会再跳转回应用完完成授权。在请求用 户授权的时候会提供一个callback地址,用户完成授权操作后会跳转回这个地方。但由于某些原因,UC并无法完成跳转,而系统自带浏览器却没有这个问 题。本文就给出2个解决方案来解决这个问题。
一、在应用中内嵌入一个webView完成授权。
方法很简单,使用webView的loadurl方法打开授权网址就可以了。但是授权完成后需要获取到网页中显示的pin,具体方法请参考昨天写的文章 android中如何获得webView中的内容 。在这里就不再赘述了。
但由于这种方法用户无法看到浏览器地址栏,而是在你的应用中输入了用户名和密码,所以用户会觉得不放心。那可以试试下面的方法。
二、直接打开系统自带浏览器完成授权。
我们一般使用1
2
3
4
5 Intent i=new Intent();
i.setAction(Intent.ACTION_VIEW,Uri.parse("http://veikr.com"));
startActivity(i);
来打开某个网址,但用户有可能选择使用第三方浏览器(如UC)来打开,不过第三方浏览是无法支持自定义schema的(比如veikr://OauthActivity)。
只需要这样,就可以直接打开系统自带浏览器。1
2
3
4
5
6
7
8
9
10 Intent intent = new Intent();
ComponentName name = new ComponentName("com.android.browser", "com.android.browser.BrowserActivity");
intent.setComponent(name);
intent.setData(Uri.parse("http://veikr.com/wap/"));
intent.setAction(Intent.ACTION_VIEW);
startActivity(intent);
附:这里提一下怎么使浏览器打开类似veikr://OauthActivity这样的地址。
写一个activity,然后部署的时候1
2
3
4
5
6
7 <activity android:name="WebViewActivity">
<intent-filter>
<category android:name="android.intent.category.BROWSABLE"></category>
<data android:scheme="veikr" android:host="OauthActivity"></data>
</intent-filter>
</activity>
你需要把”veikr://OauthActivity”作为callback传递给新浪的oauth认证地址,在完成认证后会返回这个地址,然后你的应用程序的这个activity就可以接管过来了。
在oncreate中使用getIntent().getData()就可以得到uri,pin就在uri中。 |
|