これは、キャンセルをクリックしてアプリに戻るときの 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の「拒否された」という言葉に依存したくありません.