これは非常に苦痛でした。AccessToken のどこが悪いのかわかりませんが、Twitter4j の updateStatus を呼び出して twitter に投稿する前に設定してみます。
AccessToken を取得するさまざまな方法を試しましたが、Twitter4J のみを使用しています。
AccessToken accessToken = twitter.getOAuthAccessToken(twitter.getOAuthRequestToken(), verifier);
エラーが発生します:
05-09 12:06:45.776: D/GameName(678): Received authentication challenge is null
承認のために Twitter ブラウザに切り替えることができます。ユーザー名とパスワードを入力し、「Authorize App」を押します。次に、ブラウザが「リダイレクト」に変わり、アプリに戻ります。私のアプリが現れてブーム!クラッシュ!私のアプリは onNewIntent を呼び出しました。
承認するコードはうまく機能します: (twitter はメンバー変数です)
public void twitterAuthorize()
{
try
{
twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer(Constants.CONSUMER_KEY, Constants.CONSUMER_SECRET);
RequestToken requestToken = twitter.getOAuthRequestToken(Constants.OAUTH_CALLBACK_URL);
startActivityForResult(new Intent(Intent.ACTION_VIEW, Uri.parse(requestToken.getAuthorizationURL())), TWITTER_AUTHORIZE_ACTIVITY_RESULT_CODE);
}
catch (TwitterException e)
{
Log.d(Globals.sApplicationName, e.getMessage());
e.printStackTrace();
}
}
Authorization から戻ると、「AccessToken accessToken =...」という行に到達し、例外がスローされます。
@Override
protected void onNewIntent(Intent intent)
{
super.onNewIntent(intent);
Log.d(Globals.sApplicationName, "ENTERED: onNewIntent");
Uri uri = intent.getData();
if (uri != null && uri.toString().startsWith(Constants.OAUTH_CALLBACK_URL))
{
Log.d(Globals.sApplicationName, "oAuth: " + uri.toString());
String verifier = uri.getQueryParameter("oauth_verifier");
try {
if (verifier != null)
{
Log.d(Globals.sApplicationName, "Verifier: " + verifier);
//Try 1: doesn't work
//AccessToken a = new AccessToken(Constants.CONSUMER_KEY, Constants.CONSUMER_SECRET);
//Try 2: doesn't work
AccessToken accessToken = twitter.getOAuthAccessToken(twitter.getOAuthRequestToken(), verifier);
//Try 3: doesn't work
//String token = uri.getQueryParameter("oauth_token");
//AccessToken accessToken = new AccessToken(token, verifier);
//twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer(Constants.CONSUMER_KEY, Constants.CONSUMER_SECRET);
twitter.setOAuthAccessToken(accessToken);
// create a tweet
Date d = new Date(System.currentTimeMillis());
String tweet = "#OAuth working! " + d.toLocaleString();
// send the tweet
twitter.updateStatus(tweet);
}
} catch (Exception e) {
Log.d(Globals.sApplicationName, e.getMessage());
e.printStackTrace();
}
}
}
コールスタックでこれらのエラーが発生します(を置き換えたので、このフォーラムの投稿から非公開にします):
05-09 12:06:45.136: D/GameName(678): ENTERED: onNewIntent
05-09 12:06:45.136: D/GameName(678): oAuth: GameNameTwitterOAuth://callback?oauth_token=<some long string>&oauth_verifier=<some long string>
05-09 12:06:45.156: D/GameName(678): Verifier: <some long string>
05-09 12:06:45.747: W/AudioFlinger(32): write blocked for 131 msecs, 825 delayed writes, thread 0xff88
05-09 12:06:45.776: D/GameName(678): Received authentication challenge is null
05-09 12:06:45.846: W/System.err(678): Received authentication challenge is nullRelevant discussions can be on the Internet at:
05-09 12:06:45.846: W/System.err(678): http://www.google.co.jp/search?q=bfb606ed or
05-09 12:06:45.856: W/System.err(678): http://www.google.co.jp/search?q=72d7e395
05-09 12:06:45.856: W/System.err(678): TwitterException{exceptionCode=[bfb606ed-72d7e395 e2110e48-e8248ad2], statusCode=-1, retryAfter=-1, rateLimitStatus=null, featureSpecificRateLimitStatus=null, version=2.2.5}
05-09 12:06:45.856: W/System.err(678): at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:200)
05-09 12:06:45.856: W/System.err(678): at twitter4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:65)
05-09 12:06:45.856: W/System.err(678): at twitter4j.internal.http.HttpClientWrapper.post(HttpClientWrapper.java:102)
05-09 12:06:45.856: W/System.err(678): at twitter4j.auth.OAuthAuthorization.getOAuthRequestToken(OAuthAuthorization.java:121)
05-09 12:06:45.856: W/System.err(678): at twitter4j.auth.OAuthAuthorization.getOAuthRequestToken(OAuthAuthorization.java:104)
05-09 12:06:45.856: W/System.err(678): at twitter4j.TwitterBaseImpl.getOAuthRequestToken(TwitterBaseImpl.java:276)
05-09 12:06:45.856: W/System.err(678): at twitter4j.TwitterBaseImpl.getOAuthRequestToken(TwitterBaseImpl.java:269)
05-09 12:06:45.856: W/System.err(678): at com.mnecreations.panarchyfling.PanarchyFling.onNewIntent(PanarchyFling.java:602)
05-09 12:06:45.869: W/System.err(678): at android.app.Instrumentation.callActivityOnNewIntent(Instrumentation.java:1122)
05-09 12:06:45.869: W/System.err(678): at android.app.ActivityThread.deliverNewIntents(ActivityThread.java:1812)
05-09 12:06:45.869: W/System.err(678): at android.app.ActivityThread.performNewIntents(ActivityThread.java:1825)
05-09 12:06:45.869: W/System.err(678): at android.app.ActivityThread.handleNewIntent(ActivityThread.java:1834)
05-09 12:06:45.876: W/System.err(678): at android.app.ActivityThread.access$2300(ActivityThread.java:123)
05-09 12:06:45.876: W/System.err(678): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1040)
05-09 12:06:45.876: W/System.err(678): at android.os.Handler.dispatchMessage(Handler.java:99)
05-09 12:06:45.876: W/System.err(678): at android.os.Looper.loop(Looper.java:126)
05-09 12:06:45.876: W/System.err(678): at android.app.ActivityThread.main(ActivityThread.java:3997)
05-09 12:06:45.876: W/System.err(678): at java.lang.reflect.Method.invokeNative(Native Method)
05-09 12:06:45.876: W/System.err(678): at java.lang.reflect.Method.invoke(Method.java:491)
05-09 12:06:45.896: W/System.err(678): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
05-09 12:06:45.896: W/System.err(678): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
05-09 12:06:45.896: W/System.err(678): at dalvik.system.NativeStart.main(Native Method)
05-09 12:06:45.896: W/System.err(678): Caused by: java.io.IOException: Received authentication challenge is null
05-09 12:06:45.896: W/System.err(678): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.processAuthHeader(HttpURLConnectionImpl.java:1176)
05-09 12:06:45.896: W/System.err(678): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.processResponseHeaders(HttpURLConnectionImpl.java:1118)
05-09 12:06:45.896: W/System.err(678): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.retrieveResponse(HttpURLConnectionImpl.java:1044)
05-09 12:06:45.896: W/System.err(678): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:736)
05-09 12:06:45.906: W/System.err(678): at twitter4j.internal.http.HttpResponseImpl.<init>(HttpResponseImpl.java:35)
05-09 12:06:45.906: W/System.err(678): at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:164)
05-09 12:06:45.906: W/System.err(678): ... 21 more
05-09 12:06:45.906: D/GameName(678): --------------------------------------------
05-09 12:06:45.906: D/GameName(678): Restart activity GameName
アドバイスしてください、これは本当に紛らわしいです。私は他の投稿を見て、タイムスタンプについて言及していますが、それは私には意味がありません。
ありがとうございました