OAuth2回调在某些设备上启动浏览器内部的活动

时间:2018-05-26 15:58:50

标签: android oauth oauth-2.0 url-redirection

我已经在Android应用中为Coinbase实施了OAuth2。应用程序流程如下。用户点击与Coinbase"的链接按钮,调用OAuth2端点https://www.coinbase.com/oauth/authorize。然后系统浏览器打开Coinbase OAuth页面,要求用户登录并授权该应用程序。完成此操作后,将通过自定义URI方案回调应用程序:

<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="myapp" android:pathPrefix="/coinbase-oauth" />
</intent-filter>

在使用此过滤器的活动中,与用户从启动初始OAuth流程的活动相同,调用onNewIntent(Intent intent)方法通过意图获取代码并完成授权获得一个令牌。这是首选的方式以及我们希望OAuth如何表现,一切都很好。

但是,在某些设备上,BROWSABLE活动会在浏览器中重新创建。我们到达活动的onCreate(),也可以从意图中获取OAuth代码,但是,我无法重新访问该应用。启动浏览器进行授权的初始活动仍在后台等待响应。新创建的活动版本基本上是分离的。虽然它可以完成工作,但我希望用户回到应用程序。

1 个答案:

答案 0 :(得分:2)

问题不过是您需要回调到启动身份验证过程的同一活动。我认为Coinbase API不打算以这种方式使用。

要解决此问题,只需在活动代码中添加以下属性,即可为活动指定启动模式singleInstance

android:launchMode= "singleInstance"

有关详细信息,请参阅docs