[英]Twitter4j OAuth callback succeeds, but test tweet fails
在Twitter4j中使用OAuth時遇到困難。 在此之前,我遇到了#3255153中詳細描述的問題和401錯誤,但最終解決了這些問題,遇到了更難解決的問題。
Twitter應用程序授權頁面在瀏覽器中啟動,我登錄並批准我的帳戶的應用程序。 然后,它重定向回到應用程序,什么也沒有發生。 該視圖與啟動授權頁面之前的視圖完全相同。
要查看它是否起作用,我將其設置為Toast,其中包含永不彈出的onResume或onNewIntent(如下所示)中的消息“登錄Twitter成功”。 但是,成功接收到回調URL,因為此條目顯示在LogCat中:
12-18 09:25:50.426: I/ActivityManager(186): Starting: Intent { act=android.intent.action.VIEW cat=[android.intent.category.BROWSABLE] dat=snapp://twitter?oauth_token=tokenhere&oauth_verifier=verifierhere cmp=com.infini_servers.snapp/.SnappActivity } from pid 7853
這是我的onNewIntent(也具有onResume的虛擬克隆):
@Override
protected void onNewIntent(Intent intent)
{
super.onNewIntent(intent);
Uri uri = intent.getData();
if (uri != null && uri.toString().startsWith(CALLBACKURL))
{
Toast.makeText(getBaseContext(), "Login to twitter successful!", Toast.LENGTH_LONG);
String verifier = uri.getQueryParameter(oauth.signpost.OAuth.OAUTH_VERIFIER);
try
{
provider.retrieveAccessToken(consumer, verifier);
AccessToken accessToken = new AccessToken(consumer.getToken(),
consumer.getTokenSecret());
twitter.setOAuthConsumer(consumerKey, consumerSecret);
twitter.setOAuthAccessToken(accessToken);
String tweet = "Test";
twitter.updateStatus(tweet);
Toast.makeText(getBaseContext(), "Tweet Successful!", Toast.LENGTH_LONG);
}
catch (Exception e)
{
Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_LONG);
}
}
}
以及清單的相關內容:
<activity
android:label="@string/app_name"
android:name=".SnappLaunch" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:label="@string/app_name"
android:name=".SnappActivity"
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="snapp" android:host="twitter" />
</intent-filter>
</activity>
Toast.makeText(getBaseContext(), "Login to twitter successful!", Toast.LENGTH_LONG);
當您想烤面包時,別忘了調用“ show()”。
您的onResume()方法代碼放入了asynctask內部。 它的工作正常。
看到那個樣品,
class TwitterLogin extends AsyncTask<String, String, String>
{
@Override
protected String doInBackground(String... params)
{
// TODO Auto-generated method stub
Uri uri = getIntent().getData();
if (uri != null && uri.toString().startsWith(TWITTER_CALLBACK_URL))
{
String verifier = uri.getQueryParameter(URL_TWITTER_OAUTH_VERIFIER);
try
{
AccessToken accessToken = twitter.getOAuthAccessToken(requestToken, verifier);
// Shared Preferences
Editor e = loginPrefs.edit();
e.putString(PREF_KEY_OAUTH_TOKEN, accessToken.getToken());
e.putString(PREF_KEY_OAUTH_SECRET,accessToken.getTokenSecret());
e.putBoolean(PREF_KEY_TWITTER_LOGIN, true);
e.commit();
Log.e("Twitter OAuth Token", "> " + accessToken.getToken());
long userID = accessToken.getUserId();
User user = twitter.showUser(userID);
String username = user.getName();
Log.e("UserID: ", "userID: "+userID+""+username);
Log.v("Welcome:","Thanks:"+Html.fromHtml("<b>Welcome " + username + "</b>"));
}
catch (Exception e)
{
Log.e("Twitter Login Error", "> " + e.getMessage());
}
}
return null;
}
@Override
protected void onPostExecute(String result)
{
// TODO Auto-generated method stub
super.onPostExecute(result);
}
@Override
protected void onPreExecute()
{
// TODO Auto-generated method stub
super.onPreExecute();
}
}
我最近一直在玩Twitter4j,遇到了一些聽起來與您遇到的問題類似的問題。 在您發布的代碼中我看不到任何錯誤,但是我想知道您傳遞給getOauthRequestToken的回調URL是什么? 我自己對此有一些問題。 我認為您的CALLBACKURL需要設置為“ snapp:// twitter”。 請注意,您需要使用冒號。
如果這不起作用,建議您嘗試從清單行中刪除android:host:
<data android:scheme="snapp" android:host="twitter" />
所以你剩下:
<data android:scheme="snapp" />
然后在調用getOauthRequestToken的代碼中,傳遞值“ snapp:///”。 基本上,這就是我首先使其工作所要做的。
如果這樣可行,您可以嘗試將android:host =“ twitter”放回去,然后更改傳遞給getOauthRequestToken的值。
如果這不起作用,您是否看到過onNewIntent是否被調用-即它只是不通過uri.toString()。startsWith(CALLBACKURL)測試,因為僅當您通過時才顯示烤面包? 您可以嘗試進行一些登錄或在調試器中添加斷點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.