[英]Log in with twitter4j callback
我嘗試編寫一個用戶可以在Twitter上登錄的應用程序。 我像庫一樣使用twitter4j。我的問題是,當我進入必須輸入用戶名和密碼的頁面時,程序塊被阻止,因為我不知道在應用程序中使用回調函數。 有人可以幫忙嗎?
公共類MainActivity擴展了Activity {
private Twitter twitter;
RequestToken requestToken;
final public static String CALLBACK_SCHEME = "x-latify-oauth-twitter";
final public static String CALLBACK_URL = CALLBACK_SCHEME + "://callback";
private Uri uri;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button b = (Button) findViewById(R.id.button1);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new updateTwitterStatus().execute();
}
});
}
@Override
protected void onDestroy() {
twitter.shutdown();
}
class updateTwitterStatus extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... params) {
String testStatus = "prova tweet ";
ConfigurationBuilder cb = new ConfigurationBuilder();
// the following is set without accesstoken- desktop client
cb.setDebugEnabled(true)
.setOAuthConsumerKey("******")
.setOAuthConsumerSecret(
"*****");
try {
TwitterFactory tf = new TwitterFactory(cb.build());
twitter = tf.getInstance();
Log.i("bauu", "miao");
requestToken = twitter.getOAuthRequestToken();
String authUrl = requestToken.getAuthenticationURL();
startActivity(new Intent(Intent.ACTION_VIEW,
Uri.parse(requestToken.getAuthenticationURL())));
uri = Uri.parse(requestToken.getAuthenticationURL());
return authUrl;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(s)));
}
}
確保您在twitter dev應用程序選項中的回調URL如下,
http://YOUR-URL/app://YOUR-APP-HOST
並在您的Android清單文件中,在將您帶到Twitter的活動之間,請確保您定義:
<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:host="YOUR-APP-HOST"
android:scheme="app" />
</intent-filter>
最后,請確保在您的程序中
final public static String CALLBACK_URL = "app://YOUR-APP-HOST";
Twitter登錄只需4個簡單步驟:
1-為您的活動添加意圖過濾器 (基於@rennoDeniro響應) AndroidManifest.xml
<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:host="twitter"
android:scheme="myapp" />
</intent-filter>
2-在strings.xml
定義Twitter密鑰和秘密
<string name="twitter_consumerKey">XXX</string>
<string name="twitter_consumerSecret">XXX</string>
3-在MainActivity.java
請求Twitter申請注冊頁面
public String CALLBACK_URL="myapp://twitter";
public Twitter twitter;
private static RequestToken rToken;
public void onLoginTwitter(View v) {
(new RequestTwitterLoginTask()).execute();
}
class RequestTwitterLoginTask extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... params) {
twitter = new TwitterFactory().getInstance();
try
{
twitter.setOAuthConsumer(R.string.twitter_consumerKey, R.string.twitter_consumerSecret);
String callbackURL = CALLBACK_URL;
rToken= twitter.getOAuthRequestToken(callbackURL);
}
catch(Exception e)
{
Toast.makeText(getApplicationContext(), "Exception: " + e.toString(),Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(rToken.getAuthenticationURL())));
}
}
4-在MainActivity.java
處理回調
public void onResume(){
super.onResume();
if (this.getIntent()!=null && this.getIntent().getData()!=null){
Uri uri = this.getIntent().getData();
//handle returning from authenticating the user
if (uri != null && uri.toString().startsWith(CALLBACK_URL)) {
String token = uri.getQueryParameter("oauth_token");
String verifier = uri.getQueryParameter("oauth_verifier");
try {
Twitter t = new TwitterFactory().getInstance();
t.setOAuthConsumer(getResources().getString(R.string.twitter_consumerKey), getResources().getString(R.string.twitter_consumerSecret));
AccessToken accessToken = t.getOAuthAccessToken(rToken,verifier);
long userID = accessToken.getUserId();
User user = t.showUser(userID);
/* Do whatever you want */
} catch (TwitterException e) {
Toast.makeText(getApplicationContext(), "Twitter Exception: " + e.toString(),Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
return;
}
}
Toast.makeText(getApplicationContext(), "Resume",Toast.LENGTH_SHORT).show();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.