Sto tentando di migrare il codice di accesso di una vecchia applicazione da SDK 3.0 a SDK 4.0. Ho implementato l'accesso utilizzando lo LoginManager
, in quanto ho pulsanti di login personalizzati.Login Facebook SDK 4.0 Android con LoginManager
Il problema è che non ottengo risposta dall'API di Facebook. Nessun successo, nessun errore, nessuna eccezione generata. Il codice è il seguente:
//global refs
//callbacks
private CallbackManager mCallbackManager;
private FacebookCallback<LoginResult> mFacebookCallback;
private List<String> mPermissions = Arrays.asList("email");
private LoginManager mLoginMgr;
private Activity mActivity;
//........
//code is inside method
FacebookSdk.sdkInitialize(getApplicationContext());
//perhaps a bit excessive
FacebookSdk.addLoggingBehavior(LoggingBehavior.GRAPH_API_DEBUG_INFO);
FacebookSdk.addLoggingBehavior(LoggingBehavior.DEVELOPER_ERRORS);
FacebookSdk.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);
FacebookSdk.addLoggingBehavior(LoggingBehavior.INCLUDE_RAW_RESPONSES);
FacebookSdk.setApplicationId(mActivity.getString(R.string.sample_fb_id));
//init callbacks
mFacebookCallback = new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Log.v("LoginActivity login", loginResult.toString());
GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
// Application code
Log.v("LoginActivity", response.toString());
try {
String email = object.getString("email");
Log.v("LoginActivity", "obtained email: ", email);
} catch (JSONException e) {
e.printStackTrace();
}
}
});
request.executeAsync();
}
@Override
public void onCancel() {
Log.e("LoginActivity", "facebook login canceled");
}
@Override
public void onError(FacebookException e) {
Log.e("LoginActivity", "facebook login failed error");
}
};
mCallbackManager = CallbackManager.Factory.create();
mLoginMgr = LoginManager.getInstance();
mLoginMgr.registerCallback(mCallbackManager, mFacebookCallback);
mLoginMgr.logInWithReadPermissions(mActivity, mPermissions);
Utilizzando la Debugger
, sono in grado di vedere che questa linea: mLoginMgr.logInWithReadPermissions(mActivity, mPermissions);
Viene eseguito, ma nessuno dei callbacks
sono mai attivati. Non ho errori nella console e lo schermo del dispositivo diventa nero e non succede nulla.
Non credo che importi, ma il codice viene eseguito in una classe wrapper (all'esterno di Activity
). Ho provato all'interno dello Activity
, ma non ha fatto alcuna differenza.
Qualche suggerimento? Molto apprezzato.
Edit:
Questo è dichiarata all'interno AndroidManifest.xml
:
<activity android:name="com.facebook.FacebookActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name" />
Hai configurato AndroidManifest.xml per la [guida alla migrazione] (https://developers.facebook.com/docs/android/upgrading-4.x)? – Kai
Sì, come da documentazione. 'App_id' viene fornito in modo programmatico, perché l'app è localizzata. – nightfixed
È davvero strano, magari prova la loro app di esempio e assicurati che la tua app di Facebook sul sito Web di dev sia impostata correttamente. Ho riscontrato alcuni problemi durante la migrazione, ma non qualcosa del genere. – Kai