Android:使用intent-filter处理OAuth回调

15

我正在构建一个需要OAuth的Android应用程序。除了处理来自Yahoo的回调之外,我已经完成了所有OAuth功能。我在AndroidManifest.xml中有以下内容:

  <intent-filter>
    <action android:name="android.intent.action.VIEW"></action> 
    <category android:name="android.intent.category.DEFAULT"></category> 
    <category android:name="android.intent.category.BROWSABLE"></category>
    <data android:host="www.test.com" android:scheme="http"></data> 
  </intent-filter>

其中www.test.com将被替换为我拥有的域名。它似乎:

  • 当我单击页面上的链接时,此过滤器会触发。
  • 当从Yahoo的重定向获取回调时,它不会被触发,浏览器会打开www.test.com网站。
  • 当我直接在浏览器中输入域名时,它也不会被触发。

那么,有谁能帮我:

  • 什么条件下会触发这个intent-filter?
  • 是否更改intent-filter或权限可以扩大筛选器以适用于重定向请求?
  • 是否有其他方法我可以使用?

感谢您的帮助。


请问您能否详细说明如何在Android中使用OAuth与Yahoo进行编码? - user745260
我也遇到了同样的问题,但是在LinkedIn上,由于我不能使用不是HTTP/HTTPS的重定向URL,所以我被迫使用WebView。你是否成功解决了这个问题,而不需要采用自定义方案? - Nicke Manarin
2个回答

14

于是我改变了方法,使用了自定义方案而不是Web URL,现在一切都按预期工作。

所以我的回调URL是:
X://callback

而我的intent-filter是:

<intent-filter>
    <action android:name="android.intent.action.VIEW"></action> 
    <category android:name="android.intent.category.DEFAULT"></category> 
    <category android:name="android.intent.category.BROWSABLE"></category> 
    <data android:scheme="X"></data> 
</intent-filter>

X是我的客户方案的名称。


如果您正在使用只接受带有HTTP/HTTPS协议的重定向URL的授权程序,那么您将受到此问题的限制。 - Nicke Manarin

0

对于OAUTH,请确保您正在使用V2,因为V1即将被弃用。

 <intent-filter android:label="filter_react_native">
           <action android:name="android.intent.action.VIEW" />
           <category android:name="android.intent.category.DEFAULT"/>
           <category android:name="android.intent.category.BROWSABLE" />
           <data android:host="www.test.com" android:scheme="https"/>
     </intent-filter>

生成的URI将是https://www.test.com

用于以下应用数据意图示例

 <data android:host="people" android:scheme="peopleapp"/>

生成的URI将是peopleapp://people

请检查您是否正在使用路由器,如果是,则应该在您的堆栈导航器中拥有人员屏幕。

最后,

测试您的意图数据URI的最佳方法是:

1. 如果还没有卸载现有的应用程序,请先进行卸载。 2. 同步并重新构建代码。 3. 使用uri peopleapp://people在您的应用程序中调用Webview。 4. 应该可以工作。 5. 如果您正在使用模拟器,请检查Android提供的以下链接here 6. 在终端中运行以下命令(尝试使用adb devices进行测试)。
$ adb shell am start
     -W -a android.intent.action.VIEW
     -d <URI> <PACKAGE>
7. URI将为peopleapp://people 8. PACKAGE将是您的包/应用程序名称,例如..@string/app_name

希望这能对你有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接