0

ここに画像の説明を入力

これは、キャンセルをクリックしてアプリに戻るときの Twitter ログインの最初のページです 。私のアプリケーションは強制的に閉じられます。このために Twitter4J を使用している M 親切に何が問題なのか教えてください。

このコードを使用して 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: which m using my code

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") (ログインしていないときの uri には "denied" という単語が含まれています)

私にとってはうまくいきます。Cancel and Return to app をクリックする と、この行またはこのループに到達しません。
文字列検証者 = uri.getQueryParameter("oauth_verifier");

今、すべてが正常に動作します。これを処理するためのより良いアイデアがあれば提案してください.Uriの「拒否された」という言葉に依存したくありません.

4

1 に答える 1

1

Android アプリケーションでの Twitter の統合については、このリンクを確認してください。

それは素晴らしく完璧に機能します。

アプリケーションの [設定] ページで、フィールド CallBack URL にダミー コールバックを指定したことを確認してください。

Twitter を Android アプリケーションに統合する

編集 :

私たちのコードで何が起こっているのか推測しました。承認からアプリをキャンセルすると、以下のベリファイアには値がありません

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

値がないため、NULL POINTER EXCEPTIONがスローされ、 TryからCatchブロックに移動します。

 twitter.updateStatus(base_link_url);

届かない

そのため、ツイートは投稿されません。

これを確認する必要がある場合は、何が起こっているかを確認できるように、Log to Catch Blockを追加してください。`

于 2011-08-12T12:37:46.290 に答える