1

我有以下功能来管理登录:

private static final String CALLBACK_URL = "myapp://twitter";

private void loginViaOAuth() {
    try {
        consumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
        provider = new CommonsHttpOAuthProvider(REQUEST_URL, ACCESS_TOKEN_URL, AUTH_URL);
        provider.setOAuth10a(true);
        String authURL = provider.retrieveRequestToken(consumer, CALLBACK_URL);
        this.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authURL)));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

和 Manifest.xml

<activity android:name=".Twitterconnect"
        android:launchMode="singleTask"
        android:configChanges="orientation|keyboardHidden" 
        android:label="@string/app_name" >
        <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="twitter" />
        </intent-filter> 
    </activity>

我得到的回应是:

05-03 11:24:03.968: INFO/ActivityManager(59): Starting activity: Intent { 
act=android.intent.action.VIEW 
cat=[android.intent.category.BROWSABLE] 
dat=myapp://twitter?oauth_token=tJpJHOOwoTGMwdvHyYbfX2tyHKOp0Y2kdRRZf3sM&oauth_verifier=xc49oM8eVVmK46ZSLz2RMT2uqXn3SxrMxf5ZAMXaD2Y 
cmp=my.app/.Twitterconnect 

}

这是我的 OnResume 函数:

@Override
protected void onResume() {
    super.onResume();
    Uri uri = this.getIntent().getData();
    if (uri != null && uri.toString().startsWith(CALLBACK_URL)) {
        String verifier = uri.getQueryParameter(OAuth.OAUTH_VERIFIER);
        Log.d("verifier:", verifier);
        try {
            provider.setOAuth10a(true);
            provider.retrieveAccessToken(consumer, verifier);
            ACCESS_KEY = consumer.getToken();
            ACCESS_SECRET = consumer.getTokenSecret();
            AccessToken a = new AccessToken(ACCESS_KEY, ACCESS_SECRET);
            // initialize Twitter4J
            twitter = new Twitter();
            twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
            twitter.setOAuthAccessToken(a);
            Log.e("TWITTER", "step1");
            twitter.updateStatus("Just shared the ".concat(tweet).concat(" on Twitter!"));
            Log.e("TWITTER", ""+buttonTwitterShare.getVisibility());
            buttonTwitterShare.setVisibility(View.GONE);
            Log.e("TWITTER", "step2");
            Log.e("TWITTER", ""+buttonTwitterShare.getVisibility());
            Toast.makeText(getBaseContext(), "Post successfully tweeted!", Toast.LENGTH_LONG).show();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

我的问题是,为什么无论我使用通过获取的 URI 登录什么配置文件Uri uri = this.getIntent().getData();始终为 NULL?如何从响应中提取oauth_token和: ?oauth_verifierdat=myapp://twitter?oauth_token=tJpJHOOwoTGMwdvHyYbfX2tyHKOp0Y2kdRRZf3sM&oauth_verifier=xc49oM8eVVmK46ZSLz2RMT2uqXn3SxrMxf5ZAMXaD2Y

4

1 回答 1

1

这可能对你有用

    Uri uri = this.getIntent().getData();
    if (uri == null) {
        return null;
    }
    String token = uri.getQueryParameter("oauth_token");
    String verifier = uri.getQueryParameter("oauth_verifier");

就连这两行

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

正如您已经获得 uri 应该做的那样。

于 2013-03-04T19:52:12.467 回答