Le SDK Facebook ne fonctionne avec activités?
-
27-10-2019 - |
Question
J'ai essayé de mettre en œuvre le SDK Facebook dans mon application afin de permettre aux utilisateurs de poster des messages sur notre fanwall via l'application. Cependant, je suis même pas réussi à se connecter l'utilisateur via le SDK.
Dans les exemples SDK, un simple échantillon a été donné, qui utilise un Activity
pour essayer d'autoriser l'utilisateur à l'aide Single Sign-On. J'ai essayé cet exemple moi-même, et il fonctionne. Je suis en mesure de vous connecter, je devais autoriser l'application à utiliser mes données Facebook et je pouvais voir les demandes et leur réception dans LogCat.
Maintenant, je l'ai essayé d'ajouter le même code à mon propre application. Cette application est basée Fragment
à l'aide du package de compatibilité. Il y a un FragmentActivity
central et le reste de mes cours sont Fragments
simples. Lorsque vous ajoutez le code échantillon à l'un de ces Fragments
, l'application Facebook démarre pour une demi-seconde en essayant d'autoriser, mais par la suite ferme et rien ne se passe. Je suis de retour dans mon nouveau régulièrement Fragment.
Lors de la vérification du LogCat après cela, rien ne laisse présager que l'application Facebook a même ouvert ou fait toute demande autre que le fait qu'il montre quelques contrôles d'impression que j'ai ajouté et le fait qu'il dit qu'il commence le Facebook intention:
01-12 13:19:40.874: I/System.out(6087): Calling authorize
01-12 13:19:40.874: I/ActivityManager(1380): Starting activity: Intent { cmp=com.facebook.katana/.ProxyAuth (has extras) } from pid 6087
01-12 13:19:40.874: I/System.out(6087): Called authorize
En dehors de cela, rien ne se retourne. Aucun Facebook-chèques, aucune déclaration disant mes clés sont fausses ou quoi que ce soit, tout simplement rien. L'intention Facebook a été appelé, mais fermé presque immédiatement et rien d'autre montre qu'il était encore ouvert.
Cela a été ahurissant mon esprit pendant quelques heures maintenant, et je commence à penser que l'approche classique, à condition échantillon ne fonctionne tout simplement pas Fragments
en raison des travaux de Fragments
façon.
Le code que je l'ai utilisé est affiché ci-dessous. Le fragment se tiré par un bouton qui appelle une FragmentTransaction
. Est-ce que je fais quelque chose de fondamentalement mauvais ici, ou ce que le SDK Facebook vraiment tout simplement pas avec Fragments
? J'ai essayé la recherche de ce problème, mais je ne l'ai pas été en mesure de trouver quelqu'un d'autre avec le même genre de situation.
public class FanWallFacebook extends Fragment {
Facebook facebook = new Facebook("294678133912628");
public FanWallFacebook() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.filler, container, false);
}
@Override
public void onStart() {
super.onStart();
System.out.println("Calling authorize");
facebook.authorize(getActivity(), new DialogListener() {
@Override
public void onComplete(Bundle values) {
System.out.println("Completed");
}
@Override
public void onFacebookError(FacebookError error) {
System.out.println("Facebook error: "+error.getMessage());
}
@Override
public void onError(DialogError e) {
System.out.println("General error: "+e.getMessage());
}
@Override
public void onCancel() {
System.out.println("Cancelled");
}
});
System.out.println("Called authorize");
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
facebook.authorizeCallback(requestCode, resultCode, data);
System.out.println("Authorize callback'd");
}
}
Modifier
Juste essayé d'utiliser un FragmentActivity
, et voilà, qui fonctionne. Il se connecte avec succès. On dirait que le SDK fonctionne vraiment uniquement avec des classes qui étendent explicitement ...Activity
. Quelqu'un pourrait-il me donner une idée pourquoi cela pourrait être le cas? Je pensais toujours quelque part de Fragments
sur la Activity
ligne étendu ainsi.
La solution
I ended up using a FragmentActivity
for my Facebook interaction. Not the ideal solution, but it works.
Autres conseils
well...
the new Facebook SDK has an Activity that implement FragmentActivity
so problem solved.