在Twitter OAuth完成后返回活动

时间:2011-03-25 00:31:31

标签: android twitter-oauth

我的Twitter OAuth使用我的清单中的intent-filter在我的应用程序中工作。我是如何实现它的,一旦用户点击按钮通过Twitter发布我就开始一个新的Activity(让我们称之为TwitterLoginActivity),新的TwitterLoginActivity创建一个新的Intent与authUrl如下:

Intent oauthIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl));

这将打开一个浏览器,我授权我的应用程序,并返回TwitterLoginActivity的onResume()功能。在这一点上,我发布到twitter很好,并在此活动上完成()。

这一切都像冠军一样,但在调用此终点()时,它会返回我刚刚授权的Twitter.com网页。我不太了解活动堆栈是如何工作的,但是无论如何要移除我看到的所有Twitter.com的WebViews并在那里完成()它只返回到我的应用程序中用户的原始点点击了帖子按钮?

3 个答案:

答案 0 :(得分:8)

我不知道你是否解决了你的问题,但昨天我遇到了同样的问题,我就这样解决了:

1)为了让WebBrowser在Twitter上登录,请添加下一个标志:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl));
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.addFlags(Intent.FLAG_FROM_BACKGROUND);
startActivity(intent); 

2)在Manifest中,您声明启动intent的TwitterLoginActivity,添加属性:

android:launchMode="singleTask"

3)当使用Twitter登录完成后,WebBrowser完成并返回到TwitterLoginActivity但由于singleTask启动模式而未调用onCreate,而是调用onNewIntent。要保存令牌和令牌密钥,您必须将代码从onResume移动到OnNewIntent。

现在,如果您按下后退按钮或完成TwitterLoginActivity,它将转到上一个活动,WebBrowser永远不再显示。

我希望这有帮助!

答案 1 :(得分:1)

这对我有用:在您控制的WebView中渲染oauth网页,而不是启动到浏览器应用程序。

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

换句话说,WebView将由您直接控制,而不是浏览器。

答案 2 :(得分:0)

这听起来像是使用Activity.startActivityForResult()而不是Activity.startActivity()的最佳时机。您是原始活动只需要您的TwitterLoginActivity登录用户,所以一旦完成,它应该返回到您原来的活动。

实施onActivityResult()以处理来自TwitterLoginActivity的响应。

Read about it here