Dans mon application, j'utilise facebook SDK pour effectuer une connexion et enregistrer des méthodes.
Je peux utiliser l'application générale FaceBook ou utiliser un navigateur Web normal sur mon appareil.
Mais lorsque j'ai FaceBook Lite sur mon appareil et que je n'ai pas l'application générale FaceBook, lorsque j'essaie de me connecter/m'inscrire à l'aide de facebook-sdk, l'application se ferme sans journal ni message. Alors je ne peux pas savoir pourquoi ce problème est arrivé.
Comment puis-je résoudre ce problème? - Puis-je ignorer l'application FaceBook Lite et utiliser le navigateur à la place?
Mettre à jour:
Voici une vidéo si j'ai une application facebook normale, pas de problèmes.
Mon extrait de code:
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());
}
});
Eh bien, je commençais à avoir des comportements câblés dans certainsLOLIPOPappareils fermant l’application avant même d’ouvrir l’application native de Facebook , et dans d’autres appareils, l’application se fermant uniquement avec Facebook Lite, cependant.
J'utilisais l'attribut noHistory=true
sur l'activité pour que l'activité soit supprimée de la pile une fois que la boîte de dialogue s'affiche en raison de l'appel de onStop()
.
<activity
Android:name=".AuthActivity"
Android:screenOrientation="portrait"
Android:noHistory="true"
Android:windowSoftInputMode="stateHidden" />
Après avoir supprimé cet attribut, cela a bien fonctionné!
Vous connaissez la devise de FB: aller vite et casser des choses. L'intégration du SDK avec les applications natives est une des choses qui se casse parfois.
Vous pouvez forcer Facebook SDK à utiliser le Web pour la connexion:
LoginManager.getInstance().setLoginBehavior(LoginBehavior.WEB_ONLY)
Le code ci-dessous fonctionne avec Facebook. ... S'il ne trouve aucune application facebook dans devide, il ouvrira webView et récupérera des donnéesAppelez la méthode suivante dans onCreate () ou onStart ():
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());
}
});
}
Code d'activité 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>