我意识到有几个类似的问题,但没有一个接受的答案对我有用。作为oauth流程的一部分,我想要一个浏览器重定向来启动我的活动。正如我到处看到的那样,我已经建立了一个意图过滤器,据说可以做到:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.codesta.test"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="7" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".BrowsableActivity"
android:label="@string/app_name">
<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="http" android:host="oauth.android.mydomain.com" />
</intent-filter>
</activity>
</application>
</manifest>
但是,当我打开浏览器并输入http://oauth.android.mydomain.com时,我收到“网页不可用”错误页面。我也试过定义我自己的方案(我读过的通常不推荐),但这也不起作用。
我的目标是api level 7,并且在运行2.1和2.2的模拟设备上测试了代码但没有成功。任何帮助将不胜感激!
答案 0 :(得分:2)
我遇到了同样的问题 - 据我所知,有几个OAuth网站使用&lt; META ... /&gt;标记以执行您尝试捕获的最终重定向。
使用META标记的重定向不会被Intent过滤器捕获,因此您的代码永远不会执行。奇怪的是,如果用户单击相同的链接,或者使用Location:标头重定向,则会触发。已经有一个开放的Android 2.2.1错误票,但我已经失去了对它的引用。
通常的解决方法是在回调网址上设置一个真实页面,然后使用Location:标头将其重定向到您可以捕获的其他位置。
编辑:我尝试使用Location:标头,看起来一般重定向到http://没有被捕获,但重定向到另一个方案(x-oauth://)是不受欢迎的,但是的工作原理。答案 1 :(得分:0)
我不确定,我可以稍后测试,但我想当你在浏览器中输入它时,你会告诉浏览器打开它。
可能需要的是实际点击加载该方案的链接://主机组合,不仅要将其输入“url bar”。
编辑:对不起,我做了一个快速测试,但事实并非如此。尽管如此,问题可能是浏览器在实际到达intent部分之前尝试解析主机并提供您使用应用程序打开它。它是否适用于真实的网址(假设我猜测这不是一个真正的解析网址?)
答案 2 :(得分:0)
只要我使用真实域,intent-filter对http和https方案工作正常。但是,弹出窗口询问用户是否要使用浏览器而不是应用程序是不可接受的。我尝试使用自己的方案,但这不起作用(不明白为什么)。
出于我的应用程序的目的,使用WebView创建活动就足够了,而不是使用完全迁移的浏览器,我覆盖了WebViewClient的shouldOverrideUrlLoading并为我的uri捕获请求并将它们直接发送到我的活动。这个解决方案实际上比我之前尝试做的更好,因为用户没有得到提示,我不必定义全局方案。
答案 3 :(得分:0)
...奔
检查将Scheme更改为https而不是http。