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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top