Twitter“取消并返回应用”问题

时间:2011-08-12 14:01:26

标签: android twitter4j

enter image description here

这是Twitter登录的第一页,当我点击取消并返回应用时 我的申请得到了关闭。 M使用Twitter4J 请告诉我可能存在的问题。

M使用此代码。

void OAuthLogin() {
        try {

            twitter = new TwitterFactory().getInstance();
            twitter.setOAuthConsumer(consumerKey, consumerSecret);
            requestToken = twitter.getOAuthRequestToken(CALLBACKURL);
            String authUrl = requestToken.getAuthenticationURL();
            this.startActivity(new Intent(Intent.ACTION_VIEW, Uri
                    .parse(authUrl)));
        } catch (TwitterException ex) {
        Log.e("in Main.OAuthLogin", ex.getMessage());
        }
    }


@Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        Uri uri = intent.getData();
        if (uri != null && uri.toString().contains(CALLBACKURL)) {
            try {
                String verifier = uri.getQueryParameter("oauth_verifier");
                AccessToken accessToken = twitter.getOAuthAccessToken(
                        requestToken, verifier);
                String token = accessToken.getToken(), secret = accessToken
                        .getTokenSecret();
                twitter.setOAuthAccessToken(token, secret);

                twitter.updateStatus(base_link_url);
            this.displayTimeLine(token, secret); // after everything,
            } catch (TwitterException ex) {
                                }
        }
    }

我的清单文件:M为我的班级使用此代码

<activity android:name=".Test" android:configChanges="keyboard|keyboardHidden|orientation"
            android:screenOrientation="portrait" android:label="@string/app_name"
            android:launchMode="singleTask" android:theme="@android:style/Theme.NoTitleBar">
            <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="gauravmusic" android:host="twitt" />
            </intent-filter>
        </activity>

MY Callback Url:在我的代码中使用了哪个

private final String CALLBACKURL = "gauravmusic://twitt";

现在建议我哪里出错了。

经过研究我发现了,

            if (uri != null && uri.toString().contains(CALLBACKURL))
{

}

如果我将此条件更改为

if (uri != null && uri.getScheme().toString().contains(CALLBACKURL_SCHEME)) {
}

取消,并返回应用现在正常工作,但现在我无法在我的墙上发布推文。 我把这两个条件加在一起

   if (uri != null && uri.getScheme().toString().contains(CALLBACKURL_SCHEME) || uri.toString().contains(CALLBACKURL)) {

}

它也不起作用.. 请建议我。

您好我找到了答案。我找到一个模式,当点击取消和重新调整到应用链接时,将执行此代码。在这种情况下,我们没有登录,所以我们找不到String Verifier的值,它给出了NullPointer Exception。

if (uri != null && uri.toString().contains(CALLBACKURL)) {
            try {
                String verifier = uri.getQueryParameter("oauth_verifier");
                AccessToken accessToken = twitter.getOAuthAccessToken(
                        requestToken, verifier);
                String token = accessToken.getToken(), secret = accessToken
                        .getTokenSecret();
                twitter.setOAuthAccessToken(token, secret);

                twitter.updateStatus(base_link_url);
            this.displayTimeLine(token, secret); // after everything,
            } catch (TwitterException ex) {
                                }
        } 

我将此行更改为

if (uri != null && uri.getScheme().toString().contains(CALLBACKURL_SCHEME)&& !uri.toString().contains("denied"))

经过一些研究,我发现当我们点击取消并返回应用链接时,其uri就是那样

DEBUG/URI!!!!!!!!!!!!!!!!!!!!!(5174): gauravmusic://twittdenied=FjgW7QQYpFDI03sDvIc5I1w6w2Xv67TFI9sKW1OyA

当我们成功登录时,Uri就是那样

08-17 10:31:19.182: DEBUG/URI(5278): gauravmusic://twitt?oauth_token=pm0E10vayzTViLGQpGZwwpIKhQ9aqwLrEBggiJ7vvPY&oauth_verifier=cHiWkuiQfygmlPeC7B6fNbiqv34gkPIdWctlavzGo80

然后我添加条件

!uri.toString()。contains(“denied”)(bcz当我们没有登录时,uri包含“拒绝”字样)

它对我来说很好。 现在,当我点击取消并返回应用时,它将无法到达此行或此循环。
    String verifier = uri.getQueryParameter(“oauth_verifier”);

现在一切正常。建议我,如果有更好的想法来处理这个。我不想依赖于Uri的“被拒绝”这个词。

1 个答案:

答案 0 :(得分:1)

在Android应用程序中查看Twitter集成链接。

它非常完美。

确保您在应用程序的“设置”页面的“字段回拨”URL中提供了一些虚拟回调。

Integrating Twitter in Android Application

编辑:

我猜测我们的代码中发生了什么,如果您从授权中取消应用程序,那么下面的验证程序将没有值

String verifier = uri.getQueryParameter("oauth_verifier");

由于没有值,它会抛出 NULL POINTER EXCEPTION ,它将从尝试转到 Catch 块,因此

 twitter.updateStatus(base_link_url);

将无法到达

所以Tweet没有发布。

如果您需要检查此添加来记录阻止阻止,以便您可以看到发生了什么。 `