【问题标题】:Browser callbacks and Android Activity stack madness浏览器回调和 Android Activity 堆栈疯狂
【发布时间】:2012-02-18 04:13:43
【问题描述】:

我正在努力使用带有自定义方案的普遍回调->intent_filter 技术来获得 OAuth 授权的特定行为。

我的应用注册 SEND 操作,并在调用时启动一项服务,该服务反过来检查用户是否已获得授权,如果没有,则生成一个活动 (OAuthActivity) 以请求登录。

请记住,在此发生之前的前台活动可能是任何东西。然后该活动启动一个 VIEW 意图以在浏览器中打开身份验证页面;后者调用精心制作的回调(使用清单中定义的自定义方案)并唤醒 OAuthActivity。

OAuthActivity 目前有 launchMode="singleTask" 但这从堆栈的角度来看并没有什么不同(它在回调时位于顶部)。

有没有一种方法可以清除活动堆栈并返回用户正在执行的操作,而不是强迫他“返回”浏览器活动? (然后我会在后台成功提交内容时显示通知)

有没有人指点?感谢阅读

【问题讨论】:

    标签: android oauth


    【解决方案1】:

    Activity 然后启动 VIEW Intent 以在浏览器中打开身份验证页面

    这就是问题所在。这对我有用:在您控制的 web 视图中呈现 oauth 网页,而不是启动到浏览器应用程序。

    oauth 网页在调用其回调时,实际上将在 webview 中替换自身,您的 WebViewClient 可以在其中捕获预期的 URL、处理结果并完成() webview(将其从活动堆栈中删除) .

    【讨论】:

    • 确实可行,并且它是市场上大多数(所有?)需要基于浏览器身份验证的应用程序使用的方法。但是,我正在寻找一种直接利用浏览器应用程序的解决方案。我开始认为,当您想返回任务堆栈中低于浏览器的活动时(这是我的情况),这实际上是不可行的。
    • 一旦您启动,您就无法控制。您可以尝试在 Intent.FLAG_ACTIVITY_NO_HISTORY 的意图中添加标志,但这并不能保证浏览器控制后会发生什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    相关资源
    最近更新 更多