J'ai intégré le dernier sdk Facebook Android (Sdk 4.0). Ceci est le code que j'ai ajouté dans ma méthode onCreate.
FacebookSdk.sdkInitialize(this.getApplicationContext());
callbackManager = CallbackManager.Factory.create();
if(AccessToken.getCurrentAccessToken()!=null){
Log.d(FBTAG,"facebook already logged in");
isFBLogin = true;
}
LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// App code
Log.d(FBTAG,"facebook log in");
isFBLogin = true;
}
@Override
public void onCancel() {
// App code
isFBLogin = false;
}
@Override
public void onError(FacebookException error) {
isFBLogin = false;
Log.d(FBTAG,"facebook login error: "+error);
// App code
}
});
Et c'est le code que j'ai utilisé pour onClickLogin
public void onClickLogin() {
LoginManager.getInstance().logInWithPublishPermissions(this, PERMISSIONS);
}
Je peux me connecter en cliquant sur le bouton de connexion et en traitant la fonction onClickLogin. Maintenant, la prochaine fois que j'ouvrirai l'application, je vérifie si AccessToken.getAccessToken vérifie si l'utilisateur est déjà connecté à Facebook, mais il est toujours nul. N’y at-il pas de toute façon dans le nouveau sdk de se connecter en arrière-plan afin que je n’aie pas à demander à l’utilisateur de se connecter toujours comme il était dans la version précédente dans la classe de session.
Le jeton d'accès qui a été renvoyé par LoginManager sera enregistré dans les préférences partagées. Ainsi, lors de la prochaine ouverture de l'application, AccessToken.getCurrentAccessToken () devrait avoir le même jeton d'accès. Il en va de même avec la classe Session. Vous pouvez consulter les exemples fournis avec le SDK pour les voir fonctionner.
Assurez-vous de ne pas réinstaller l'application entre les sessions ou de définir explicitement le jeton d'accès actuel sur null.
Vous pouvez également ajouter un InitializeCallback au sdkInitialize et vérifier le AccessToken à l'intérieur du rappel:
FacebookSdk.sdkInitialize(getApplicationContext(), new FacebookSdk.InitializeCallback() {
@Override
public void onInitialized() {
if(AccessToken.getCurrentAccessToken() == null){
System.out.println("not logged in yet");
} else {
System.out.println("Logged in");
}
}
});
Android Facebook sdk L'initialisation prend un certain temps Initialize. vous devez donc attendre 100 millisecondes avant d'appeler AccessToken.getCurrentAccessToken ()
une fois essayer cette solution ça marche pour moi ::
FacebookSdk.sdkInitialize(this.getApplicationContext());
callbackManager = CallbackManager.Factory.create();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (AccessToken.getCurrentAccessToken() != null) {
Log.d(FBTAG, "facebook already logged in");
isFBLogin = true;
}
LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// App code
Log.d(FBTAG, "facebook log in");
isFBLogin = true;
}
@Override
public void onCancel() {
// App code
isFBLogin = false;
}
@Override
public void onError(FacebookException error) {
isFBLogin = false;
Log.d(FBTAG, "facebook login error: " + error);
// App code
}
});
}
}, 100);
Je n'ai pas testé cela moi-même, mais je pense que vous pouvez obtenir l'objet AccessToken à partir de l'objet LoginResult de la méthode onSuccess du rappel.
Donc: AccessToken accessToken = loginResult.getAccessToken ();
Ensuite, vous sauvegarderiez cet accèsPasent en disant:
AccessToken.setAccessToken (accessToken);
Ensuite, lorsque vous appelez AccessToken.getAccessToken, il devrait renvoyer le accessToken que vous avez enregistré.
Veuillez ajouter le code suivant:
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
//super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode,resultCode,data);
}
1.Changez votre fonction à cette fonction
public void onClickLogin() {
LoginManager.getInstance().logInWithReadPermissions(activity_name.this, PERMISSIONS);
}
Pas
1) FacebookSdk.sdkInitialize (getActivity (). GetApplicationContext ());
2) CallbackManager mCallbackManager = CallbackManager.Factory.create ();
LoginManager.getInstance().registerCallback(mCallbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
//you will get access token here
mAccessToken = loginResult.getAccessToken();
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException error) {
}
});
3) // obtient ensuite un jeton d'accès en utilisant AccessToken mAccessToken = AccessToken.getCurrentAccessToken ();
Assurez-vous, si vous utilisez la connexion à Facebook de fragment,
1) assurez-vous d'appeler super.onActivityResult () en fragment avec le gestionnaire de rappel Facebook.
2) vérifiez que super.onActivityResult () est appelé dans une "activité de fragment" associée si vous écrasez onActivityResult dans une activité associée.
La raison est la mise en cache du profil Facebook SDK.
AccessToken.setCurrentAccessToken(null);
Profile.setCurrentProfile(null);
Avant de détruire l'activité, essayez-le. Peut-être que cela peut résoudre votre problème. La première fois que vous travaillez, c’est la deuxième fois que vous cachez un nouveau cache.