puedo podemos momento hoy funciona este español error entrar detuvo desde configurar celular carga caido abrir android facebook facebook-graph-api

android - podemos - no puedo abrir facebook en mi celular



La pared de Facebook del post usuario no funciona cuando la aplicación de Facebook está instalada en el dispositivo/emulador (3)

Es porque cuando inició sesión en la cuenta de Facebook, entonces su sesión de inicio de sesión se crea en el dispositivo. Tienes que desconectarte del facebook después de hacer tu tarea.

Construí una actividad que usa esta implementación (ver la respuesta aceptada) para publicar una actualización de estado en el muro de Facebook de un usuario.

Funciona sin problemas si el emulador / teléfono no tiene instalada la aplicación de Facebook.

Si el emulador / teléfono tiene instalada la aplicación de Facebook, la aplicación de Facebook carga la pantalla de inicio de sesión, pero después de intentar iniciar sesión, la aplicación de Facebook simplemente desaparece y me lleva de vuelta a mi aplicación.

Alguien ha tenido esta experiencia cuando la aplicación de Facebook está instalada?

Mi código:

public class AchievementActivity extends Activity implements DialogListener, OnClickListener{ private Facebook facebook; Button facebookPostButton; String defaultFacebookPost; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); setContentView(R.layout.achievements); getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_layout); View achievementDivider = (View)findViewById(R.id.achievementDivider); int[] colors = {0, 0xff00ffff, 0}; achievementDivider.setBackgroundDrawable(new GradientDrawable(Orientation.RIGHT_LEFT, colors)); //get the title of the achievement from the intent that started this activity from the activity StatisticsActivity String achievementTitleString = getIntent().getStringExtra("title"); String achievementTextToDisplay = getAchievementTextToDisplay(achievementTitleString); defaultFacebookPost = getDefaultPost(achievementTitleString); //ImageView achievementActivityAchievementBadgeImageView = (ImageView)findViewById(R.id.achievementActivityAchievementBadgeImageView); TextView achievementActivityBadgeTitleTextView = (TextView)findViewById(R.id.achievementActivityBadgeTitleTextView); achievementActivityBadgeTitleTextView.setText(achievementTitleString); TextView achievementActivityAchievementText = (TextView)findViewById(R.id.achievementActivityAchievementText); achievementActivityAchievementText.setText(achievementTextToDisplay); facebookPostButton = (Button)findViewById(R.id.facebookPostButton); facebookPostButton.setOnClickListener(this); } @Override public void onComplete(Bundle values) { if (values.isEmpty()) { Toast.makeText(getApplicationContext(), "Empty", Toast.LENGTH_SHORT); return; } if (!values.containsKey("post_id")) { try { Bundle parameters = new Bundle(); parameters.putString("message", defaultFacebookPost);// the message to post to the wall facebook.dialog(AchievementActivity.this, "stream.publish", parameters, this);// "stream.publish" is an API call } catch (Exception e) { // TODO: handle exception System.out.println(e.getMessage()); } } try { facebook.logout(getApplicationContext()); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void onFacebookError(FacebookError error) { Toast.makeText(AchievementActivity.this, "onFacebookError", Toast.LENGTH_LONG); } @Override public void onError(DialogError e) { Toast.makeText(AchievementActivity.this, "onError", Toast.LENGTH_LONG); } @Override public void onCancel() { Toast.makeText(AchievementActivity.this, "onCancel", Toast.LENGTH_LONG); } @Override public void onClick(View v) { if (v == facebookPostButton) { facebook = new Facebook("my_facebook_api"); // replace APP_API_ID with your own facebook.authorize(this, new String[] {"publish_stream", "read_stream", "offline_access"}, this); } } private String getDefaultPost(String defaultTitleString) { //do some stuff here to get a string to post to wall return defaultPost; } private String getAchievementTextToDisplay(String achievementTitleString) { String achievementTextToDisplay = "DEFAULT"; //do some stuff here to get text to display in the activity //this has nothing to do with the facebook post... return achievementTextToDisplay; } }

Logcat me está diciendo esto:

05-11 13:03:34.076: INFO/ActivityManager(98): Starting activity: Intent { cmp=com.facebook.katana/.ProxyAuth (has extras) } 05-11 13:03:34.246: INFO/ActivityManager(98): Displayed activity com.facebook.katana/.ProxyAuth: 158 ms (total 158 ms) 05-11 13:03:35.166: DEBUG/dalvikvm(12390): GC_FOR_MALLOC freed 6729 objects / 418424 bytes in 44ms 05-11 13:03:35.166: DEBUG/webviewglue(12390): nativeDestroy view: 0x527e20 05-11 13:03:35.166: DEBUG/NativeCrypto(12390): Freeing OpenSSL session

EDITAR : después de tener que instalar la plataforma de desarrollo de Android en varias máquinas durante el año pasado y SIEMPRE tener un problema con Facebook después de crear los nuevos entornos de desarrollo, he encontrado que esta simple respuesta puede ser la causa de una implementación de Facebook que funcione en un dispositivo y no otro ....

La clave secreta de la API de Facebook (la que aparece en developer.facebook.com) será diferente para cada versión de la aplicación que empaquete con un certificado diferente. Por ejemplo, supongamos que tiene dos máquinas de desarrollo. Dado que estas dos máquinas crearán sus aplicaciones con certificados diferentes, debe asegurarse de generar una clave secreta de la API de Facebook para cada máquina y enumerarlas en developer.facebook.com.


private static final String[] PERMISSIONS = new String[] {"publish_stream", "read_stream", "offline_access"}; @Override public void onClick(View v) { if (v == facebookPostButton) { mAsyncRunner = new AsyncFacebookRunner(mFacebook); mAsyncRunner.request(mFacebook.logout(getApplicationContext()), new LogoutListener()); mFacebook.authorize(FacebookImplement.this, PERMISSIONS, new AuthorizeListener()); } } public class AuthorizeListener extends BaseDialogListener { public void onComplete(Bundle values) { Bundle params = new Bundle(); params.putString("message"," Message"); params.putString("description", "Wall Posting Description"); mAsyncRunner.request("me/feed", params, "POST", new UploadListener()); }

}

public class UploadListener extends BaseRequestListener { public void onComplete(final String response) { mAsyncRunner.request(mFacebook.logout(getApplicationContext()), new LogoutListener()); }

}

public class LogoutListener extends BaseRequestListener { public void onComplete(final String response) { } }

Puede ser que este código te ayude. Si hay algún problema, pregunte sin ningún problema.


Encontré una solución, pero hasta ahora no es la mejor.

facebook.authorize(activity, PERMISSIONS, Facebook.FORCE_DIALOG_AUTH, new LoginDialogListener());

Esto obligará a que su aplicación no use el SSO si la aplicación oficial de Facebook está instalada en el dispositivo. Pero debe haber una solución mejor porque hay aplicaciones que usan sso con la aplicación oficial de Facebook.