Android OAuth 实施使接收共享 activity 停止

Android OAuth implementation makes receiving share activity stop

我遇到 activity 问题,其中 onStop 破坏了我的 OAuth 身份验证过程。

首先简单解释一下我的应用程序的上下文:

我有这个 activity(我们称之为 receiveSharedDataActivity),它处理从其他应用程序发送的传入数据。此 activity 是使用 Android 开发者网站的以下示例制作的:http://developer.android.com/training/sharing/receive.html.

我的应用程序要求用户使用电子邮件和密码或使用 Facebook 或 Twitter OAuth 登录名登录。用户可能从未打开过该应用程序,因此尚未登录。 (可能性很小,但还是会发生。)

问题(挑战):

因此,当用户决定将一些数据共享到我的应用程序但尚未登录时,我会在 receiveSharedDataActivity using fragments 中向他显示​​ 3 个登录选项(电子邮件、Facebook 和 Twitter) .这样他就可以先验证自己的身份,然后再处理数据。当用户选择使用 Facebook 和 Twitter OAuth 登录选项登录时,他会从 Facebook 或 Twitter 重定向到一个新的 activity,他需要在其中登录并授予我的应用程序访问其用户数据的权限。到目前为止一切顺利。因为当用户被重定向到这个新的 activity 时,receiveSharedDataActivity 会自动使用 onStop 停止,因为它不再对用户可见。当用户随后登录 Facebook 或 Twitter activity 并被发送回 receiveSharedDataActivity 时,不再有 receiveSharedDataActivity,因为它已停止。因此,用户最终会转到用户决定从中共享数据的另一个应用程序。

问题:

如何防止 receiveSharedDataActivity 在用户登录 Facebook 或 Twitter activity 时停止?

我很期待你的解决方案,因为我一直被这个问题困扰。

好消息!我能够解决这个问题。一直以来我都认为这与在启动 receiveSharedDataActivity 时传递正确的 Intent 标志有关。傻我...

问题是我的 receiveSharedDataActivity 在 AndroidManifest.xml 中设置了 noHistory:true 参数。我需要这个,因为显然我不希望将此 activity 添加到后台。但是 noHistory 参数让我的 activity 在 activity 对用户不再可见后直接销毁了自己。这发生在 OAuth 登录 activity 开始时。所以在 OAuth 登录 activity 完成后当然没有 activity 到 return 因为 receiveSharedDataActivity 被简单地破坏了。

当我删除 noHistory 参数时,activity 不再破坏自身并很好地调用了 onRestart 方法,我现在可以在其中处理其余的 Oauth 过程。我能够通过在开始一个新的 activity 后立即调用 finish() 来阻止 activity 被添加到后台堆栈。这样 activity 就会自行销毁并且不会添加到后台堆栈中。