Android Facebook SDK 4.0 login mit LoginManager
Ich versuche zu migrieren login-code von einer alten Anwendung aus dem SDK 3.0 SDK 4.0.
Ich habe implementiert die Anmeldung mit der LoginManager
, wie ich benutzerdefinierte Login-buttons.
Das problem ist, dass ich keine Antwort aus der Facebook-API. Kein Erfolg-keine Fehlermeldung, keine exception geworfen zu löschen. Der code ist wie folgt:
//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);
Mithilfe der Debugger
bin ich in der Lage, um zu sehen, dass diese Zeile:
mLoginMgr.logInWithReadPermissions(mActivity, mPermissions);
wird Sie ausgeführt, aber keiner der callbacks
sind, immer ausgelöst. Ich habe auch keine Fehler in der Konsole, und der Bildschirm wird schwarz und nichts passiert.
Ich glaube nicht, dass es darauf ankommt, aber der code wird ausgeführt in einem wrapper-Klasse (außerhalb Activity
). Ich habe versucht, innerhalb der Activity
, aber es machte keinen Unterschied.
Irgendwelche Vorschläge?
Sehr geschätzt wird.
Edit:
Diese deklariert ist innerhalb 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" />
- Haben Sie konfiguriert AndroidManifest.xml pro Migrationshandbuch?
- Ja, als pro-Dokumentation. Die
app_id
vorgesehen ist programmatisch, denn die app lokalisiert ist. - Das ist wirklich komisch, vielleicht versuchen Sie Ihre Beispiel-app und zumindest machen Sie sicher, dass Ihre facebook-app auf der dev-website korrekt eingerichtet ist. Ich habe festgestellt, einige Probleme während der Migration, aber nicht so etwas.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Ihr code ist in einem fragment, verwenden Sie nicht mActivity variable als Aktivität Kontext.
Tun:
Fügen Sie eine Zeile:
Nennen:
Verwenden diese, nicht verwenden diese.getActivity()
callbackManager.onActivityResult()
; leider, ich kann nicht akzeptieren, beide Antworten.Ich hatte dieses problem auch. Stellt sich heraus, ich vergaß hinzuzufügen, der Aufruf
callbackManager.onActivityResult()
imActivity.onActivityResult()
als pro der Unterseite des Registrieren Sie eine Callback-Abschnitt der login-guide.So, in der Aktivität, die Sie tun, Facebook login, solltest du so etwas wie:
Ist es das, was Ihr fehlt?