In meiner App verwende ich facebook SDK, um Anmelde- und Registrierungsmethoden durchzuführen.
Es ist in Ordnung, wenn ich die allgemeine Anwendung FaceBook oder einen normalen Webbrowser auf meinem Gerät habe.
Wenn ich jedoch FaceBook Lite auf meinem Gerät habe und nicht die allgemeine Anwendung FaceBook habe, schließe ich mich bei der Anmeldung mit Facebook-sdk ohne Anmeldung und ohne Anmeldung Also kann ich nicht wissen, warum dieses Problem passiert ist.
Wie kann ich das Problem beheben? - Kann ich die App FaceBook Lite überspringen und stattdessen den Browser verwenden?
Aktualisieren:
Hier ist ein Video, wenn ich normale Facebook-App habe, keine Probleme.
Mein Code-Snippet:
LoginManager.getInstance()
.logInWithReadPermissions(getActivity(), Arrays.asList("public_profile"));
LoginManager.getInstance()
.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(final LoginResult loginResult) {
Log.i("MainActivity", "@@@onSuccess");
GraphRequest request = GraphRequest
.newMeRequest(loginResult.getAccessToken(),
(object, response) -> {
Log.i("MainActivity",
"@@@response: " + response.toString());
try {
///
} catch (JSONException e) {
////
}
});
}
@Override
public void onCancel() {
Log.i("MainActivity", "@@@onCancel");
}
@Override
public void onError(FacebookException error) {
Log.i("MainActivity", "@@@onError: " + error.getMessage());
}
});
Nun, ich bekam verdrahtetes Verhalten in einigenLOLIPOP-Geräten der App, bevor die Facebook native Anwendung geöffnet wurde, und in anderen Geräten wurde die App nur mit Facebook lite geschlossen.
Ich habe noHistory=true
-Attribut für die Aktivität verwendet, sodass die Aktivität aus dem Stapel gelöscht wurde, sobald das Dialogfeld aufgrund des Aufrufs von onStop()
angezeigt wird.
<activity
Android:name=".AuthActivity"
Android:screenOrientation="portrait"
Android:noHistory="true"
Android:windowSoftInputMode="stateHidden" />
Nachdem Sie dieses Attribut entfernt haben, klappt es jetzt!
Sie kennen das Motto von FB - bewegen Sie sich schnell und brechen Sie die Dinge. Die SDK-Integration in native Apps ist eines der Dinge, die manchmal kaputt gehen.
Sie können das Facebook SDK zwingen, das Web für die Anmeldung zu verwenden:
LoginManager.getInstance().setLoginBehavior(LoginBehavior.WEB_ONLY)
Nachfolgender Code funktioniert mit facebook fine . Wenn keine Facebook-App in devide gefunden wird, wird webView geöffnet und Daten abgerufen.
private void facebookCallback() {
callbackManager = CallbackManager.Factory.create();
btnFacebook.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
progressDialog.setMessage("Connection Facebook...");
progressDialog.show();
String accessToken = loginResult.getAccessToken().getToken();
Log.i("accessToken", accessToken);
GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
Log.i("LoginActivity", response.toString());
try {
System.out.println("----------------------"+object.get("email").toString());
verifySocialAccount(object.get("email").toString());
} catch (JSONException e) {
LoginManager.getInstance().logOut();
progressDialog.dismiss();
Toast.makeText(LoginActivity.this,"Can not find email Address.",Toast.LENGTH_SHORT).show();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id, first_name, last_name, email,gender, birthday, location"); // Parámetros que pedimos a facebook
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
System.out.println("-------onCancel");
}
@Override
public void onError(FacebookException error) {
System.out.println("---------onError");
Log.v("LoginActivity", error.getCause().toString());
}
});
}
Aktivitätscode XML:
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="0dp"
Android:layout_marginLeft="20dp"
Android:layout_marginRight="20dp"
Android:layout_marginTop="10dp"
Android:layout_weight="1"
Android:layout_marginBottom="10dp"
Android:orientation="horizontal"
Android:weightSum="6">
<com.facebook.login.widget.LoginButton
xmlns:facebook="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/btnFacebook"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="@color/facebookBlue"
Android:paddingTop="15dp"
Android:paddingLeft="15dp"
facebook:com_facebook_login_text="SIGN IN WITH FACEBOOK"
Android:paddingBottom="15dp"
Android:textColor="@color/white"
Android:textSize="15dp" />
</LinearLayout>