簡體   English   中英

使用twitter4j回調登錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM