這是重新發布,因爲我之前問過這個問題,但我沒有得到任何答案。 我創建的Android應用程序具有「與Twitter帳戶登錄」功能,這個應用程序讀取Twitter上的追隨者列表。 我在登錄時沒有任何問題,但我的問題是如何讓應用始終在Twitter上登錄,而無需再次詢問用戶使用Twitter登錄。如何保持Twitter的身份驗證狀態,以避免每次打開應用程序時重新登錄
在第一次,用戶將被要求給我的應用程序這個權限,用戶將授權我的應用程序。 如果用戶關閉應用程序,然後再次打開它無需重新登錄到Twitter然後他試着用下面的代碼來獲取關注者列表:
ids = twitter.getFollowersIDs(twitterUserId, cursor);
我會遇到錯誤:
04-06 12:04:41.881: E/AndroidRuntime(28630): at java.lang.Thread.run(Thread.java:1019)
04-06 12:04:41.881: E/AndroidRuntime(28630): Caused by: java.lang.IllegalStateException: Authentication credentials are missing. See http://twitter4j.org/en/configuration.html for details
04-06 12:04:41.881: E/AndroidRuntime(28630): at twitter4j.TwitterBaseImpl.ensureAuthorizationEnabled(TwitterBaseImpl.java:201)
當我試圖通過使用代碼從第一次成功登錄保存TWITTER_REQUEST_TOKEN,TWITTER_REQUEST_TOKEN_SECRET和TWITTER_VERIFIER後,下面的方法reLoginOnTwitter做重新登錄,我得到了錯誤:
401:Authentication credentials (https://dev.twitter.com/pages/auth) were missing or incorrect. Ensure that you have set valid consumer key/secret, access token/secret, and the system clock is in sync.
任何人都可以幫助我,因爲我嘗試了很多搜索它,但我沒有找到任何有用的解決方案來解決這個問題。
我工作的登錄密碼和重新登錄方法的代碼都低於:
public static Twitter twitter;
public void twitterLogin(Activity activity) {
String authUrl = null;
twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer(consumerKey, consumerSecret);
try {
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
String callbackurlWithParams = CALLBACKURL;
requestToken = twitter.getOAuthRequestToken(callbackurlWithParams);
authUrl = requestToken.getAuthenticationURL();
saveTwitterRequestData(requestToken.getToken(), requestToken.getTokenSecret(), activity);
Intent it = new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl));
it.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
activity.startActivity(it);
} catch (TwitterException e) {
Log.e(TAG, "Unexpected exception while login with twitter :" + e.toString());
}
}
之後,我在的onResume方法和完整的Twitter登錄讀驗證。
public boolean reLoginOnTwitter(Activity activity) {
try {
if (twitter == null) {
twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer(consumerKey, consumerSecret);
}
SharedPreferences prefs = activity.getSharedPreferences(AppConstant.APP_PREF, 0);
final String verifier = prefs.getString(TWITTER_VERIFIER, null);
String reqToken = prefs.getString(TWITTER_REQUEST_TOKEN, null);
String reqTokenSecret = prefs.getString(TWITTER_REQUEST_TOKEN_SECRET, null);
RequestToken requestToken = new RequestToken(reqToken, reqTokenSecret);
if (requestToken != null) {
new AsyncTask<Void,Object, IDs>() {
String error = null;
@Override
protected IDs doInBackground(Void... arg0) {
try {
AccessToken accessToken = twitter.getOAuthAccessToken(requestToken, verifier);
} catch (TwitterException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(IDs Ids) {
}
}.execute();
return true;
}
} catch (Exception e) {
Log.e(TAG, "request failed due to unexpected exception :" + e.toString());
return false;
}
return false;
}
嗨,你有沒有找到解決方案? – Abdel