Twitterへの道標の呼び出しを正しくコーディングして設定したと思います。API 10で(エミュレーターと実際の電話を介して)実行すると、すべて正常に機能します。しかし、API 15または16でまったく同じapkを試してみると、コールバックがまったく機能しません。アプリに戻る代わりに、ページが利用できないことを示し、コールバックURL+oauthトークンを識別する別のウェブページに移動します。私は持っています
- アクティビティにandroid:launchMode="singleInstance"を設定します
- android:schemeとandroid:hostを、retrieveRequestTokenに渡されたコールバックURLと一致するように設定します
onNewIntentをオーバーライド
<activity android:name=".TimelineActivity" android:label="@string/app_name" android:launchMode="singleInstance"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <!-- Used for OAuth callback --> <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="x-AbcdEfg41-oauth-twitter" android:host="callback" /> </intent-filter> </activity>
onNewIntentは次のようになります。
super.onNewIntent(intent);
Log.d(TAG, "intent: " + intent);
//check if this is a callback from OAuth
Uri uri = intent.getData();
if (uri != null && uri.getScheme().equals(OAUTH_CALLBACK_SCHEME)) {
Log.d(TAG, "callback: " + uri.getPath());
String verifier = uri.getQueryParameter(OAuth.OAUTH_VERIFIER);
Log.d(TAG, "verifier: " + verifier);
new RetrieveAccessTokenTask().execute(verifier);
}
そして、私の認証呼び出しは次のようになります。
try {
authUrl = this.mProvider.retrieveRequestToken(this.mConsumer, OAUTH_CALLBACK_URL);
Log.d(TAG, authUrl);
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
また、API 10で実行したときに「GPUエミュレーションが検出されないエミュレーター」が表示されないという理由だけで、「GPUエミュレーションが検出されないエミュレーター」については少し疑わしいですが、logcatは問題ないように見えます。
12-07 04:48:31.428: I/TimelineApplication(754): onCreate
12-07 04:48:31.598: I/TimelineActivity(754): onCreate(). Starting authorizaion.
12-07 04:48:31.658: I/dalvikvm(754): threadid=3: reacting to signal 3
12-07 04:48:31.678: I/dalvikvm(754): Wrote stack traces to '/data/anr/traces.txt'
12-07 04:48:31.758: D/TimelineActivity(754): OAuthAuthorizeTask.doInBackground()
12-07 04:48:31.857: D/gralloc_goldfish(754): Emulator without GPU emulation detected.
12-07 04:48:32.968: D/dalvikvm(754): GC_CONCURRENT freed 206K, 3% free 12797K/13063K, paused 7ms+6ms
12-07 04:48:33.907: D/TimelineApplication(754): https://api.twitter.com/oauth/authorize?oauth_token=QepbZdXy2uiDFt7vrwvwq72Wl1S2IzsZywCPHwx8jTk
12-07 04:48:33.968: D/TimelineApplication(754): oAuthAuthorize() has finished
12-07 04:48:34.139: D/TimelineActivity(754): OAuthAuthorizeTask.onPostExecute()
12-07 04:48:34.368: D/TimelineActivity(754): the result is NULL