8

私の Android アプリケーションは Java OAuth ライブラリを使用しています。これは Twitter での認証用にここにあります。リクエストトークンを取得し、トークンを承認して確認を取得することはできますが、ブラウザがコールバック URL を使用してアプリケーションに再接続しようとすると、コードで提供した URL を使用せず、登録時に提供したものを使用します。ツイッターで。

注:
1. アプリケーションを twitter に登録するときに、架空のコールバック URL: http://abz.xyc.comを提供し 、アプリケーションの種類をブラウザーとして設定しました。
2. コード「myapp」にコールバック URL を指定し、ブラウズ可能なカテゴリとデータ スキームを「myapp」としてアクティビティにインテント フィルタを追加しました。
3. 認証時に呼び出される URL には、コードで指定したコールバック URL が含まれています。

私がここで間違っていることは何か分かりますか?

関連コード:

public class FirstActivity extends Activity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        OAuthAccessor client = defaultClient();
        Intent i = new Intent(Intent.ACTION_VIEW);
        i.setData(Uri.parse(client.consumer.serviceProvider.userAuthorizationURL + "?oauth_token="
                + client.requestToken + "&oauth_callback=" + client.consumer.callbackURL));

        startActivity(i);

    }

    OAuthServiceProvider defaultProvider()
    {
        return new OAuthServiceProvider(GeneralRuntimeConstants.request_token_URL,
                GeneralRuntimeConstants.authorize_url, GeneralRuntimeConstants.access_token_url);
    }

    OAuthAccessor defaultClient()
    {
        String callbackUrl = "myapp:///";
        OAuthServiceProvider provider = defaultProvider();
        OAuthConsumer consumer = new OAuthConsumer(callbackUrl,
                GeneralRuntimeConstants.consumer_key, GeneralRuntimeConstants.consumer_secret,
                provider);
        OAuthAccessor accessor = new OAuthAccessor(consumer);

        OAuthClient client = new OAuthClient(new HttpClient4());
        try
        {
            client.getRequestToken(accessor);
        } catch (Exception e)
        {
            e.printStackTrace();
        }

        return accessor;
    }

    @Override
    protected void onResume()
    {
        // TODO Auto-generated method stub
        super.onResume();

        Uri uri = this.getIntent().getData();
        if (uri != null)
        {
            String access_token = uri.getQueryParameter("oauth_token");
        }
    }

}
// Manifest file
 <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".FirstActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
             <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="myapp"/>
            </intent-filter>
        </activity>
 </application>
4

4 に答える 4

11

Twitterは、OAuthリクエスト(Twitter API Announce)でリクエストされたコールバックを尊重せず、アプリケーション設定で指定されたコールバックURLにのみリダイレクトします(「localhost」は許可されていないことに注意してください)。

Oauth-callback-on-androidの質問を確認したと思います。

Androidの推測
-少し読んだ後、AndroidブラウザがMyApp:///をアプリケーションにリダイレクトしているのがわかりますが、Twitterはこの特注のURIプレフィックスが気に入らないと思います。私はAndroid開発者ではありませんが、Webで「www.myapp.com」を入手してそこにリダイレクトすることをお勧めします。

したがって、OAuthに戻ってhttp://www.myapp.com/redirect.aspx?oauth_token=abc、そのページをリダイレクトしてもらいますmyapp:///oauth_token=...(目的の結果)

于 2010-03-08T12:11:40.057 に答える
3

私の場合、これが機能しています:

 String authURL = m_provider.retrieveRequestToken (m_consumer, CALLBACK_URL);

そしてマニフェストで:

    <activity android:configChanges = "keyboardHidden|orientation" android:name = "xxxx.android.xxxxx"> 
        <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="myapp" android:host="tweet" />
        </intent-filter>

この場合、コールバック URL は myapp://tweet になります。

于 2011-08-23T13:55:26.443 に答える
0

あなたは正しいことをしているように見えますが、登録されたコールバック URL を常に受け​​入れることで、Twitter が台無しになっているようです。登録したURLを変更する方法はありますか? 次回は再登録して Android コールバックを試すことができるかもしれません。何が起こるか見てみましょう。

于 2010-02-04T15:56:59.033 に答える
0

私の問題は、Twitter アプリを作成したのと同じアカウントでログインしようとしていたことでした。個人プロファイルでログインした後、コールバックが機能します (これまでのところ)。

于 2013-02-13T11:12:34.947 に答える