2015-01-09 10 views

Trả lời

0

Bạn có thể muốn gọi cơ chế Twitter OAuth thông thường thông qua một cái gì đó như Twitter4J. Nếu bạn sử dụng TwitterLoginButton, đây là tất cả được gói gọn cho bạn thông qua các chức năng trong Twitter Kit.

0

Nếu mục tiêu của bạn là để không thêm một TwitterLoginButton trong cách bố trí của bạn (s), tạo ra một TwitterLoginButton lập trình và tự thực hiện một sự kiện click:

TwitterLoginButton button = new TwitterLoginButton(this); 

button.setCallback(new Callback<TwitterSession>() { 
    @Override 
    public void success(Result<TwitterSession> result) { 
     // Do something with result, which provides a TwitterSession for making API calls 
    } 

    @Override 
    public void failure(TwitterException exception) { 
     // Do something on failure 
    } 
}); 

button.performClick(); 

Điểm mấu chốt ở đây là rằng khi bạn tạo nút này, bạn có thể gọi button.performClick() một cách thuận tiện.

+0

Cảm ơn, đó là giải pháp rõ ràng. Tài liệu ngụ ý rằng có một cách khác không sử dụng LoginButton, nhưng có thể không. –

+0

Có TwitterCore.getInstance() logIn (getActivity(), twitterCallback), nhưng có một lỗi mà nếu bạn hủy bỏ nó thì máy khách Twitter không nhận được onActivityResult, vì vậy tôi phải lập trình tạo một nút và gọi performClick anyway – Captnwalker1

+0

Bạn không cần phải tạo nút cho mục này. Xin vui lòng xem câu trả lời của tôi. – AndrewSmiley

8

Hãy xem TwitterAuthClient.

Một cách sử dụng ví dụ sẽ là một cái gì đó tương tự (nơi getCallingActivity() có thể được thay thế bằng gọi của bạn Activity),

TwitterAuthClient twitterAuthClient = new TwitterAuthClient(); 
twitterAuthClient.authorize(getCallingActivity(), new Callback<TwitterSession>() { 
     @Override 
     public void success(final Result<TwitterSession> result) { 
      final TwitterSession sessionData = result.data; 
      // Do something with the returned TwitterSession (contains the user token and secret) 

     } 

     @Override 
     public void failure(final TwitterException e) { 
      // Do something on fail 
     } 
    }); 

Sau đó ủy onActivityResult để TwitterAuthClient,

twitterAuthClient.onActivityResult(requestCode, resultCode, data); 
+0

Bạn không cần tạo nút này. Xin vui lòng xem câu trả lời của tôi. – AndrewSmiley

+0

@AndrewSmiley Có, câu trả lời của tôi không cần nút (TwitterLoginButton). Trong trường hợp này, người ta chỉ cần đặt đoạn mã này vào trong sự kiện mà anh ta muốn. : D – deubaka

+0

Cuộc gọi tốt! Ngoài ra, không nhận ra câu trả lời của chúng tôi giống như thế nào cho đến khi tôi đăng bài của tôi! :/ – AndrewSmiley

1

Bạn không cần phải tạo một nút cho việc này. Về cơ bản, nếu bạn đào sâu vào một số lớp, bạn sẽ thấy rằng mã tương đối đơn giản. Vì vậy, đây là cách tôi đã làm nó. Bạn chỉ cần gọi TwitterAuthClient().authorize(Activity, Callback<TwitterSession)

Mã đầy đủ:

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.widget.Toast; 

import com.twitter.sdk.android.core.Callback; 
import com.twitter.sdk.android.core.Result; 
import com.twitter.sdk.android.core.TwitterException; 
import com.twitter.sdk.android.core.TwitterSession; 
import com.twitter.sdk.android.core.identity.TwitterAuthClient; 


/** 
* Created by Andrew on 6/23/15. 
*/ 
public class ConnectTwitterActivity extends Activity { 
    //The auth client itself 
    /*you can abstract this and call TwitterCore.getInstance().login() 
    but basically that call is doing this one.. 
    */ 
    TwitterAuthClient client; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     //instanciate our client 
     client = new TwitterAuthClient(); 
     //make the call to login 
     client.authorize(this, new Callback<TwitterSession>() { 
      @Override 
      public void success(Result<TwitterSession> result) { 
       //feedback 
       Toast.makeText(getApplicationContext(), "Login worked", Toast.LENGTH_LONG).show(); 
      } 

      @Override 
      public void failure(TwitterException e) { 
       //feedback 
       Toast.makeText(getApplicationContext(), "Login failed", Toast.LENGTH_LONG).show(); 
      } 
     }); 

    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     //this method call is necessary to get our callback to get called. 
     client.onActivityResult(requestCode, resultCode, data); 

    } 
} 
+0

Tại sao điều này được giảm giá? Mã này hoạt động trong một ứng dụng trực tiếp có sẵn trên thị trường Android .... – AndrewSmiley

Các vấn đề liên quan