2015-01-09 7 views

Odpowiedz

0

Prawdopodobnie będziesz chciał zadzwonić do zwykłego mechanizmu Twitter OAuth poprzez coś takiego jak Twitter4J. Jeśli korzystasz z TwitterLoginButton, wszystko to jest opakowane za pomocą funkcji w zestawie Twitter Kit.

0

Jeśli twoim celem jest, aby nie dodać TwitterLoginButton w układzie (ów), należy utworzyć TwitterLoginButton programowo i ręcznie wykonać zdarzenie kliknij:

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(); 

Kluczowym punktem tutaj jest, że po utworzeniu tego przycisku, możesz zadzwonić pod numer button.performClick() w dogodnym dla ciebie momencie.

+0

Dzięki, że było oczywiste rozwiązanie. Dokumentacja sugeruje, że istnieje inny sposób, który nie używa przycisku LoginButton, ale może nie. –

+0

Istnieje TwitterCore.getInstance(). LogIn (getActivity(), twitterCallback), ale jest błąd, w którym jeśli go anulujesz, klient Twittera nie otrzyma onActivityResult, więc musiałem programowo utworzyć przycisk i call performClick anyway – Captnwalker1

+0

Nie musisz tworzyć przycisku dla tego. Proszę zobaczyć moją odpowiedź. – AndrewSmiley

8

Spójrz na TwitterAuthClient.

Przykładem użycia może być coś jak (gdzie getCallingActivity() można zastąpić swoje powołanie 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 
     } 
    }); 

Następnie delegował onActivityResult do TwitterAuthClient,

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

Nie musisz tworzyć przycisku dla tego. Proszę zobaczyć moją odpowiedź. – AndrewSmiley

+0

@AndrewSmiley Tak, moja odpowiedź nie potrzebuje przycisku (TwitterLoginButton). W takim przypadku wystarczy umieścić ten fragment w wydarzeniu, w którym chce. : D – deubaka

+0

Dobra rozmowa! Ponadto, nie zdawałem sobie sprawy, jak podobne są nasze odpowiedzi, dopóki nie opublikowaliśmy moich! :/ – AndrewSmiley

1

nie robić trzeba utworzyć przycisk do tego. Zasadniczo, jeśli zagłębisz się w niektóre zajęcia, przekonasz się, że kod jest stosunkowo prosty. Oto jak to zrobiłem. Wystarczy zadzwonić TwitterAuthClient().authorize(Activity, Callback<TwitterSession)

pełny kod:

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

Dlaczego jest to odrzucane? Ten kod działa w aplikacji na żywo, która jest dostępna na rynku Android .... – AndrewSmiley

Powiązane problemy