gpt4 book ai didi

android - 我如何使用 Twitter 的 OAuth 在 Android 中回调?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:28:50 25 4
gpt4 key购买 nike

从过去的 5 天开始,我正在使用 OAuth 为 Android 中的 Twitter 搜索最佳工作代码...我发现了很多。但没有一个 1 运行完美。任何我如何获得一些代码。它的工作,但我有一个问题。我想知道我必须在 String callBack = "?"中写什么这样我的 android 浏览器就会将我重定向到我的应用程序,而不是在身份验证后停留在那里。如果我没有使用 CallBack 并使用 OAuth.OUT_OF_BAND,那么浏览器会显示一个 pin 码并且不会将浏览器重定向回来到我的申请。请帮助我让我知道我做错了什么。

这里是我的代码

package com.example.tweeter;

import oauth.signpost.OAuth;
import oauth.signpost.OAuthProvider;
import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer;
import oauth.signpost.commonshttp.CommonsHttpOAuthProvider;
import oauth.signpost.exception.OAuthCommunicationException;
import oauth.signpost.exception.OAuthExpectationFailedException;
import oauth.signpost.exception.OAuthMessageSignerException;
import oauth.signpost.exception.OAuthNotAuthorizedException;

import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.DefaultHttpClient;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;

public class Tweeter extends Activity {

private String CONSUMER_KEY = "CONSUMER_KEY";
private String CONSUMER_SECRET = "CONSUMER_SECRET";
private static final Uri CALLBACK_URI = Uri.parse("PicPuzzle://tkxel");
private String CALLBACK_URL = "PicPuzzle://tkxel";
OAuthProvider provider ;
CommonsHttpOAuthConsumer consumer ;

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

consumer = new CommonsHttpOAuthConsumer(
CONSUMER_KEY, CONSUMER_SECRET);

provider = new CommonsHttpOAuthProvider(
"http://twitter.com/oauth/request_token",
"http://twitter.com/oauth/access_token",
"http://twitter.com/oauth/authorize");
provider.setOAuth10a(true);

HttpClient client = new DefaultHttpClient();

String authUrl = "http://www.yahoo.com";
try {

//This line work perfect but it not redirect me to my application
authUrl = provider.retrieveRequestToken(consumer, OAuth.OUT_OF_BAND);

//I want to send a calll back but It give exception
///*** authUrl = provider.retrieveRequestToken(consumer, CALLBACK_URI.toString());

} catch (OAuthMessageSignerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OAuthNotAuthorizedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OAuthExpectationFailedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OAuthCommunicationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl)));
}

@Override
protected void onResume() {
// this must be places in activity#onResume()
Uri uri = this.getIntent().getData();
if (uri != null && uri.toString().startsWith(CALLBACK_URL)) {
String verifier = uri.getQueryParameter("oauth_verifier");
// this will populate token and token_secret in consumer
try {
provider.retrieveAccessToken(consumer, verifier);
} catch (OAuthMessageSignerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OAuthNotAuthorizedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OAuthExpectationFailedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OAuthCommunicationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
super.onResume();
}
}

我的 AndroidManifest.xml 看起来像这样

<uses-permission
android:name="android.permission.INTERNET"/>
<application
android:icon="@drawable/icon"
android:label="@string/app_name"
>
<activity
android:name=".Tweeter"
android:label="@string/app_name"
>
<intent-filter>
<action
android:name="android.intent.action.MAIN"/>
<category
android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<intent-filter>
<action
android:name="android.intent.action.VIEW"
></action>
<category
android:name="android.intent.category.DEFAULT"
></category>
<category
android:name="android.intent.category.BROWSABLE"
></category>
<data
android:scheme="PicPuzzle"
android:host="tkxel"
></data>
</intent-filter>
</application>
<uses-sdk
android:minSdkVersion="7"/>`enter code here`

最佳答案

回调 URL 应基于您在 list 中为 Activity 配置的 URL。看起来你正在使用 scheme="PicPuzzle" , host="tkxel" .所以你的回调 URL 是 PicPuzzle://tkxel

我认为 <data>标签应该在特定的 Activity 上不过你想接收回调(看起来你现在在整个应用程序上都有)。

关于android - 我如何使用 Twitter 的 OAuth 在 Android 中回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4644239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com