我有很多O_Auth的例子,但是没有人正常工作,我想在每个例子中唯一的回调URL,我得到401错误,如消费者密钥或签名不匹配。我已经在401上看到了很多这样的例子,唯一让我感兴趣的是我的回调网址。
android app cannot connect to twitter。 Getting 401 when requesting access token with signpost within android with-signpost-within-android Android Dev - Callback URL not working... (0_o)
我已经看过所有这些例子以及更多。
但我仍然没有明白我的观点,如果在申请表格时我在回调网址上使用http://www.meomyo.com,那么我应该在编码时使用它 像android:scheme =“?” Android版: “?” 主持人= 我正在使用其他示例回调
//private static final Uri CALLBACK_URI = Uri.parse("bloa-app://twitt");
private static final Uri CALLBACK_URI = Uri.parse("twitterapp://connect");
我有消费者密钥以及密钥,但在回调网址的情况下,我被卡住了。 如果有人想我可以提供我的消费者以及秘密密钥。
public class OAuth extends Activity {
private static final String APP = "OAUTH";
private Twitter twitter;
private OAuthProvider provider;
private CommonsHttpOAuthConsumer consumer;
private String CONSUMER_KEY = "Xh3o8Gh1JQnklkUnTvvA";
private String CONSUMER_SECRET = "SCLy6yoUSth53goAsYYkoqR4ZuBoaInyJXsm5PQR11I";
private String CALLBACK_URL = "merabharatmahan://piyush";
private TextView tweetTextView;
private Button buttonLogin;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tweetTextView = (TextView)findViewById(R.id.tweet);
buttonLogin = (Button)findViewById(R.id.ButtonLogin);
buttonLogin.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
askOAuth();
}
});
}
/**
* Open the browser and asks the user to authorize the app.
* Afterwards, we redirect the user back here!
*/
private void askOAuth() {
try {
consumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
provider = new DefaultOAuthProvider("http://twitter.com/oauth/request_token",
"http://twitter.com/oauth/access_token",
"http://twitter.com/oauth/authorize");
String authUrl = provider.retrieveRequestToken(consumer, CALLBACK_URL);
Toast.makeText(this, "Please authorize this app!", Toast.LENGTH_LONG).show();
this.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl)));
} catch (Exception e) {
Log.e(APP, e.getMessage());
Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
}
}
/**
* As soon as the user successfully authorized the app, we are notified
* here. Now we need to get the verifier from the callback URL, retrieve
* token and token_secret and feed them to twitter4j (as well as
* consumer key and secret).
*/
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Uri uri = intent.getData();
if (uri != null && uri.toString().startsWith(CALLBACK_URL)) {
String verifier = uri.getQueryParameter(oauth.signpost.OAuth.OAUTH_VERIFIER);
try {
// this will populate token and token_secret in consumer
provider.retrieveAccessToken(consumer, verifier);
// TODO: you might want to store token and token_secret in you app settings!!!!!!!!
AccessToken a = new AccessToken(consumer.getToken(), consumer.getTokenSecret());
// initialize Twitter4J
twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
twitter.setOAuthAccessToken(a);
// create a tweet
Date d = new Date(System.currentTimeMillis());
String tweet = "#OAuth working! " + d.toLocaleString();
// send the tweet
twitter.updateStatus(tweet);
// feedback for the user...
tweetTextView.setText(tweet);
Toast.makeText(this, tweet, Toast.LENGTH_LONG).show();
buttonLogin.setVisibility(Button.GONE);
} catch (Exception e) {
Log.e(APP, e.getMessage());
Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
}
}
}
}
清单代码是
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".OAuth"
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>
<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="merabharatmahan" android:host="piyush" />
</intent-filter>
</activity>
</application
现在我正在与服务提供商进行通信失败:收到的身份验证质询为空。这是我放在这里最简单的例子。
答案 0 :(得分:8)
twitterapp:// connect是你的回电网址。
在Android manifest.xml中定义您的活动:
<activity android:name=".auth.SocialNetworkActivity"
android:configChanges="orientation"
android:label="Connect SNS" android:launchMode="singleTask">
<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="twitterapp" android:host="connect" />
</intent-filter>
</activity>
现在,它将打开Twitter网页,并且在成功验证后,将调用您的活动onNewIntent()回调方法。
在上面的示例中,使用您自己的活动名称。
除此之外,我的应用程序中的twitter集成是使用twitter4j完成的。
答案 1 :(得分:1)
你必须放置你认为独特的东西:
android:scheme="name-of-your-dog" android:host="something-else"
哦,等等......也许还有其他人拥有像你一样的狗...所以,使用你的应用程序的包名:
android:scheme="com.your.package" android:host="something-else"
并且,如果它不适合你......我认为它与回调URL无关。你是如何在清单中宣布自己的活动的?您添加了android:launchMode="singleTask"
参数,对吗?
而且,正如僵尸家伙指出的那样,你必须在你的auth活动的onNewIntent
方法中处理回调。像这样:
final Uri uri = intent.getData();
if (uri != null && uri.getScheme().equals("name-of-your-dog")) {
//etc...
}