2011-05-07 19 views
10

Hice la integración de Facebook en mi proyecto, todo está bien en el emulador. Cuando se trata de ejecutar en un dispositivo real, no funciona. Creo que el problema es el token de acceso de Facebook, no sé qué hacer ahora. Por lo tanto, no puedo recuperar información de amigos en un dispositivo real. ¿Alguien puede ayudarme a obtener el token de acceso en un dispositivo real?No se puede recuperar el token de acceso para Facebook en el dispositivo real

Estoy usando Android SDK solo para obtener la información de los amigos de Facebook.

mFacebook = new Facebook("api_id"); 
mFacebook.authorize(this, new String[] { 
    "publish_stream", "read_stream", "offline_access", "friends_birthday", "user_birthday", "email", "read_friendlists", "manage_friendlists" 
}, this); 
sToken = mFacebook.getAccessToken(); 
public void onComplete(Bundle values) { 
    Log.e("oncomplete", "value"); 
    if (values.isEmpty()) { 
     Log.e("oncomplete", "value is empty"); 
     return; 
    } 
    if (!values.containsKey("POST")) { 
     sToken = mFacebook.getAccessToken(); 
     getFriends() 
    } 
} 
private void getFriends() { 
    try { 
     sToken = mFacebook.getAccessToken(); 
     StaticUtils.sResponseId = mFacebook.request("me/friends"); 
     Log.w("response", StaticUtils.sResponseId); 
     try { 
      JSONObject jObj = Util.parseJson(StaticUtils.sResponseId); 
      JSONArray jArr = jObj.getJSONArray("data"); 
      for (int i = 0; i < jArr.length(); i++) { 
       JSONObject jObjFren = jArr.getJSONObject(i); 
       Iterator it = jObjFren.keys(); 
       while (it.hasNext()) { 
        String s = (String) it.next(); 
        // Log.w("KEY",s); 
        String sname = jObjFren.getString(s); 
        if (s.equals("id")) { 
         StaticUtils.sFbId.add(sname); 
         StaticUtils.sFbPics.add(StaticUtils.sImgUrl + sname + "/picture"); 
        } else if (s.equals("name")) { 
         StaticUtils.sFbName.add(sname.toLowerCase()); 
        } 
       } 
      } 
     } catch (JSONException e) { 
      Log.w("json exception", e.toString()); 
     } catch (FacebookError e) { 
      Log.w("facebook exception", e.toString()); 
     } 
    } catch (MalformedURLException e) { 
     Log.w("malformed exception", e.toString()); 
    } catch (IOException e) { 
     Log.w("io exception", e.toString()); 
    } 
} 

Gracias, Ammu

+0

Sí, probablemente alguien le puede ayudar, si se proporciona el código problemático y el mensaje de error que recibió – Aleadam

+0

no recibí ningún mensaje de error ... en el emulador puedo recuperar la información de los amigos ... con el mismo código no puedo recuperar la información de los amigos a través del dispositivo HTC – Taruni

+0

FB me envía el error como una respuesta JSON, ¿has ** enviado ** un mensaje de error? Ni siquiera sé si estás usando el SDK de Android o consultando directamente fb. Nuevamente, sin el código, no se puede hacer nada. – Aleadam

Respuesta

11

El código anterior dado es absolutamente correcto ... El problema es que si ya se ha instalado ninguna aplicación de Facebook en nuestro dispositivo, que se han actualizado las versiones que estamos utilizando nuestra aplicación no funciona ... Si desinstalamos las aplicaciones de Facebook en nuestro dispositivo funcionará ... y también hay otra manera de trabajar nuestra aplicación y otra aplicación de Facebook en nuestro dispositivo siguiendo los pasos ::: si ur usando eclipse luego goto

Windows> Preferencias> Android> Diseña y obtén el camino del almacén de claves de depuración

Terminal ya está abierto y ejecute el siguiente comando

"camino de depuración de almacén de claves"

herramienta de claves -export -alias androiddebugkey -keystore | openssl sha1 -binary | enc openssl -a -e

se le pedirá la contraseña a continuación, introduzca la contraseña Android como ur Ahora agregue la tecla de almohadilla a la configuración API de Facebook ubicada @http://www.facebook.com/developers/ en Editar configuración de la pantalla/de móviles y dispositivos.

Ahora yo era capaz de ejecutar mi aplicación en el dispositivo HTC

2

Hay otra respuesta para esta pregunta. Podemos tener una aplicación de Facebook preinstalada en nuestro dispositivo móvil, pero no interactuaremos con la aplicación ya instalada, es decir. no usaremos el inicio de sesión único, más conocido como SSO (aunque se recomienda su uso). Estamos teniendo este método en facebook sdk. el inicio de sesión único se puede deshabilitar pasando FORCE_DIALOG_AUTH como el parámetro activityCode en su llamada a authorize().

public void authorize(Activity activity, String[] permissions, 
     int activityCode, final DialogListener listener) 

Aquí el tercer parámetro es decir, hace el papel activityCode.Now deja ver su papel

if (activityCode >= 0) { 
     singleSignOnStarted = startSingleSignOn(activity, mAppId, 
       permissions, activityCode); 
    } 
    // Otherwise fall back to traditional dialog. 
    if (!singleSignOnStarted) { 
     startDialogAuth(activity, permissions); 
    } 

Esto significa que si queremos estar sin tocar con la pre instalado aplicación de Facebook tenemos que pasar con menos activityCode que 0 (0 <) value.Now en su actividad principal, donde facebook API se llama uso

int FORCE_DIALOG_AUTH =-1; 
mFacebook.authorize(this, new String[] { "publish_stream", 
     "read_stream", "offline_access", "friends_birthday", 
     "user_birthday", "email", "read_friendlists", 
     "manage_friendlists" },FORCE_DIALOG_AUTH , new LoginDialogListener()); 

Si queremos forzar el uso del legado autorización basada en diálogo, pase FORCE_DIALOG_AUTH para este parámetro . De lo contrario, simplemente omita este parámetro y Facebook usará un valor predeterminado adecuado. Fue solo para resolver el problema desde SSO.

1

puede guardar token de acceso en sharedReference cuando está registrado como sigue

public void onComplete(Bundle values) 
{ 
    SharedPreferences sp; 
    Editor editor = sp.edit(); 
    editor.putString("access_token",fb.getAccessToken()); 
    editor.putLong("access_expires",fb.getAccessExpires()); 
    editor.commit(); 
} 

y conocer este método onCreate de la siguiente manera

public void onCreate(Bundle savedInstanceState) 
{   
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_facebook_app); 
     if(access_token != null){ 
      fb.setAccessToken(access_token); 
     } 
     if(expires != 0){ 
      fb.setAccessExpires(expires); 
     }  
} 
Cuestiones relacionadas