我已经在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代码,但是,我无法重新访问该应用。启动浏览器进行授权的初始活动仍在后台等待响应。新创建的活动版本基本上是分离的。虽然它可以完成工作,但我希望用户回到应用程序。
答案 0 :(得分:2)
问题不过是您需要回调到启动身份验证过程的同一活动。我认为Coinbase API不打算以这种方式使用。
要解决此问题,只需在活动代码中添加以下属性,即可为活动指定启动模式singleInstance
。
android:launchMode= "singleInstance"
有关详细信息,请参阅docs。