尝试从我的Android应用发送推文(固定消息)时遇到问题。我尝试了4个不同的代码示例(所有这些使用twitter4j),取自不同的论坛,但总是得到相同的结果:我把我的用户和密码,身份验证工作正常,但之后我总是重定向到“callback_url”中指定的URL(我已经使用现有的网址进行了测试,并且不存在),并且未发布推文。 正如您所看到的,我已经分离了身份验证和发送推文的方法,但是一旦身份验证完成,控件就永远不会返回到我的应用程序。我正在使用android 2.1(也用2.2测试)。 任何帮助将非常感激。 提前谢谢。
public void onCreate(Bundle savedInstanceState) {
mTwitter = new TwitterFactory().getInstance();
mTwitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
if (mPrefs.contains(PREF_ACCESS_TOKEN)) {
loginAuthorisedUser();
} else {
loginNewUser();
}
}
private void loginNewUser() {
try {
mReqToken = mTwitter.getOAuthRequestToken(CALLBACK_URL);
WebView twitterSite = new WebView(this);
twitterSite.loadUrl(mReqToken.getAuthenticationURL());
setContentView(twitterSite);
} catch (TwitterException e) {
Toast.makeText(this, "Twitter Login error, try again later", Toast.LENGTH_SHORT).show();
}
}
private void loginAuthorisedUser() {
String token = mPrefs.getString(PREF_ACCESS_TOKEN, null);
String secret = mPrefs.getString(PREF_ACCESS_TOKEN_SECRET, null);
// Create the twitter access token from the credentials we got previously
AccessToken at = new AccessToken(token, secret);
mTwitter.setOAuthAccessToken(at);
Toast.makeText(this, "Welcome back", Toast.LENGTH_SHORT).show();
buttonTweet(null);
}
/**
* Catch when Twitter redirects back to our {@link CALLBACK_URL}</br>
* We use onNewIntent as in our manifest we have singleInstance="true" if we did not the
* getOAuthAccessToken() call would fail
*/
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
dealWithTwitterResponse(intent);
}
/**
* Twitter has sent us back into our app</br>
* Within the intent it set back we have a 'key' we can use to authenticate the user
*
* @param intent
*/
private void dealWithTwitterResponse(Intent intent) {
Uri uri = intent.getData();
if (uri != null && uri.toString().startsWith(CALLBACK_URL)) { // If the user has just logged in
String oauthVerifier = uri.getQueryParameter("oauth_verifier");
authoriseNewUser(oauthVerifier);
}
}
/**
* Create an access token for this new user</br>
* Fill out the Twitter4j helper</br>
* And save these credentials so we can log the user straight in next time
*
* @param oauthVerifier
*/
private void authoriseNewUser(String oauthVerifier) {
try {
AccessToken at = mTwitter.getOAuthAccessToken(mReqToken, oauthVerifier);
mTwitter.setOAuthAccessToken(at);
saveAccessToken(at);
// Set the content view back after we changed to a webview
// setContentView(R.layout.main);
tweetMessage();
} catch (TwitterException e) {
Toast.makeText(this, "Twitter auth error x01, try again later", Toast.LENGTH_SHORT).show();
}
}
private void tweetMessage() {
try {
mTwitter.updateStatus("Test - Tweeting");
Toast.makeText(this, "Tweet Successful!", Toast.LENGTH_SHORT).show();
} catch (TwitterException e) {
Toast.makeText(this, "Tweet error, try again later", Toast.LENGTH_SHORT).show();
}
}
private void saveAccessToken(AccessToken at) {
String token = at.getToken();
String secret = at.getTokenSecret();
Editor editor = mPrefs.edit();
editor.putString(PREF_ACCESS_TOKEN, token);
editor.putString(PREF_ACCESS_TOKEN_SECRET, secret);
editor.commit();
}
AndroidManifest中的活动声明:
<activity android:name=".share.twitter.TwitterActivity" android:launchMode="singleInstance">
<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="http://www.someurl.com" />
</intent-filter>
</activity>
答案 0 :(得分:0)
你的Android应用程序中的方案和主机应该是应用程序独有的东西,以便android知道应该处理回调的应用程序。你现在拥有的东西让android认为你的应用程序可以使用“http”方案处理网页浏览。 Check out the answers to the post here.具体来说,frankenstein描述了如何设置方案和主机,我的代码将向您展示如何处理onResume()。
答案 1 :(得分:0)
Here是一个文件解决方案的链接,它解释了如何将图片/文本推文整合到Android应用中。
我刚刚解决了这个问题,而不是尝试使用提供的代码来修复代码。它应该可以不加修改地工作,并且可以发送一条推文,一次调用tweet()函数。