android twitter fabric-twitter

android - ¿Usar el botón de inicio de sesión personalizado con Twitter Fabric?



fabric-twitter (5)

He intentado usar un botón normal para ejecutar el proceso de autenticación con el sdk de Twitter, pero parece que no funciona. ¿Alguien ha intentado algo similar?

  • He configurado correctamente las teclas API, etc.
  • El proceso de inicio de sesión se ejecuta correctamente, pero parece que no se llama a la parte de devolución de llamada.
  • Ninguno de mis registros se ejecuta (ni la parte de éxito ni falla)

El código

buttonTwitterLogin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Twitter.logIn(LoginActivity1.this, new Callback<TwitterSession>() { @Override public void success(Result<TwitterSession> twitterSessionResult) { Log.i(TAG, "success"); Log.i(TAG, twitterSessionResult.toString()); } @Override public void failure(TwitterException e) { Log.e(TAG, "failed"); } }); } });


Bueno, en realidad hay una forma de hacerlo

private TwitterAuthClient client; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); TwitterAuthConfig authConfig = new TwitterAuthConfig(TWITTER_KEY, TWITTER_SECRET); Fabric.with(this, new Twitter(authConfig)); client = new TwitterAuthClient(); Button customLoginButton = (Button) findViewById(R.id.custom_twitter_login); customLoginButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { client.authorize(LoginActivity.this, new Callback<TwitterSession>() { @Override public void success(Result<TwitterSession> twitterSessionResult) { Toast.makeText(LoginActivity.this, "success", Toast.LENGTH_SHORT).show(); } @Override public void failure(TwitterException e) { Toast.makeText(LoginActivity.this, "failure", Toast.LENGTH_SHORT).show(); } }); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); client.onActivityResult(requestCode, resultCode, data); }

Tenga en cuenta que en la parte de Actividad de actividad es muy importante, parece que la perdió.

aquí está mi xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/custom_twitter_login" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/padding_medium" android:text="@string/twitter_login"/>


Dado que Fabric aún no permite la creación de temas, debemos suponer que tendremos que escribir potencialmente descartar el código para que esto funcione. Como tal, prefiero menos código a más código cuando sé que no lo guardaré.

La solución de Luis funcionará bien, pero mi interfaz de usuario ya estaba lista, con un botón, y solo quería que ese botón funcionara. Así es como logré esto.

Coloque en TwitterLoginButton, como lo solicitó el asistente de Fabric, pero configúrelo en visibilidad: ido

<com.twitter.sdk.android.core.identity.TwitterLoginButton android:id="@+id/twitter_login_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:visibility="gone" />

Tire de la referencia del loginButton en su Activity (también parte de la configuración de Fabric - nada nuevo aquí):

loginButton = (TwitterLoginButton) findViewById(R.id.twitter_login_button);

Finalmente, para mi botón existente, agregué un oyente de clic, que simplemente delegó el evento click al botón de inicio de sesión de Twitter.

myLoginButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { loginButton.performClick(); } });

Trabajado como un encanto.


Luis del equipo de Relaciones con Desarrolladores en Twitter. Fabric lo admitirá en el futuro, mientras tanto, puede personalizar el botón creando una vista personalizada que herede de TwitterLoginButton .

La aplicación de ejemplo Cannonball implementa un botón personalizado:

public class CannonballTwitterLoginButton extends TwitterLoginButton { public CannonballTwitterLoginButton(Context context) { super(context); init(); } public CannonballTwitterLoginButton(Context context, AttributeSet attrs) { super(context, attrs); init(); } public CannonballTwitterLoginButton(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } private void init() { if (isInEditMode()){ return; } setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(R.drawable .ic_signin_twitter), null, null, null); setBackgroundResource(R.drawable.sign_up_button); setTextSize(20); setPadding(30, 0, 10, 0); setTextColor(getResources().getColor(R.color.tw__blue_default)); setTypeface(App.getInstance().getTypeface()); } }

https://github.com/twitterdev/cannonball-android/blob/master/app/src/main/java/io/fabric/samples/cannonball/view/CannonballTwitterLoginButton.java

Archivo de diseño:

<io.fabric.samples.cannonball.view.CannonballTwitterLoginButton android:id="@+id/twitter_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/sign_up_button" android:layout_marginTop="@dimen/login_button_margin_top" android:layout_marginBottom="@dimen/login_button_margin_bottom" android:layout_marginLeft="@dimen/login_button_margin_start" android:layout_marginStart="@dimen/login_button_margin_start" android:layout_marginRight="@dimen/login_button_margin_end" android:layout_marginEnd="@dimen/login_button_margin_end" android:text="@string/sign_in_with_twitter" android:textColor="@color/grayish_blue" android:textSize="@dimen/login_button_text_size" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" />

https://github.com/twitterdev/cannonball-android/blob/master/app/src/main/res/layout/activity_login.xml

Configuración de devolución de llamada

private void setUpTwitterButton() { twitterButton = (TwitterLoginButton) findViewById(R.id.twitter_button); twitterButton.setCallback(new Callback<TwitterSession>() { @Override public void success(Result<TwitterSession> result) { SessionRecorder.recordSessionActive("Login: twitter account active", result.data); startThemeChooser(); } @Override public void failure(TwitterException exception) { Toast.makeText(getApplicationContext(), getResources().getString(R.string.toast_twitter_signin_fail), Toast.LENGTH_SHORT).show(); Crashlytics.logException(exception); } }); }

https://github.com/twitterdev/cannonball-android/blob/master/app/src/main/java/io/fabric/samples/cannonball/activity/LoginActivity.java

Te recomiendo clonar el código y echarle un vistazo.

Si quieres instalar la aplicación en Android: http://t.co/cb-android


Puedes lograr esto usando TwitterAuthClient . es decir,

En primer lugar, crea un botón normal como,

<Button android:id:"@+id/twitter_custom_button" ... />

Ahora, en su archivo de clase java, use TwitterAuthClient lugar de TwitterLoginButton . luego configure su CallBack dentro de Button onClick

TwitterAuthClient mTwitterAuthClient= new TwitterAuthClient(); Button twitter_custom_button = (Button) findViewById(R.id.twitter_custom_button); twitter_custom_button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mTwitterAuthClient.authorize(this, new com.twitter.sdk.android.core.Callback<TwitterSession>() { @Override public void success(Result<TwitterSession> twitterSessionResult) { // Success } @Override public void failure(TwitterException e) { e.printStackTrace(); } }); } }); @Override protected void onActivityResult(int requestCode, int responseCode, Intent intent) { mTwitterAuthClient.onActivityResult(requestCode, responseCode, intent); }


También puede evitar crear una clase CustomTwitterLoginButton haciendo la implementación predeterminada del botón de inicio de sesión de twitter y luego hacer esto:

twitterLoginButton.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null); twitterLoginButton.setBackgroundResource(R.drawable.btn_twitter); twitterLoginButton.setCompoundDrawablePadding(0); twitterLoginButton.setPadding(0, 0, 0, 0); twitterLoginButton.setText("Login with Twitter"); twitterLoginButton.setTextSize(18);