45 votes

Android / Java - Poster un texte simple sur le mur Facebook?

Je suis en train d'intégrer de poster sur un mur de l'intérieur de mon application. J'ai déjà une zone où l'utilisateur peut enregistrer son nom d'utilisateur et le mot de passe (crypté). Je voudrais que mon programme pour rappeler le nom d'utilisateur enregistré et le mot de passe, passez à Facebook pour l'authentification, puis permettre à l'application de post de texte simple (peut-être un lien trop) pour le mur de l'utilisateur.

Cela dit, j'ai tout lu sur le développeur de pages Facebook (l'api semble complètement étranger à moi... je n'ai jamais fait n'importe quel type de développement d'applications web avant... juste les applications de bureau), et expérimenté avec les bibliothèques Java ici, mais pour être honnête, je ne comprends pas tout des implémentations différentes. Certains prétendent être simple à utiliser, mais apparemment, ils sont tous bien au-dessus de ma tête.

J'ai même essayé de jouer avec le officielle Facebook SDK Android, mais qui utilise une webview interface, et je ne peux pas passer dans le nom d'utilisateur et mot de passe pour faciliter l'authentification. De Plus, je suis toujours aucune idée de comment poster sur le mur, même après authentification correcte.

S'il vous plaît aider. Merci.

Oh, btw j'ai déjà un Facebook clé API et l'ID de l'Application.

[JOUR 1]

Pour plus de précisions: Si j'utilise l'extrait de code suivant avec l'officiel Facebook SDK Android http://github.com/facebook/facebook-android-sdk que dois-je faire ensuite (une fois l'utilisateur connecté)? Ce n'est pas clair pour moi.

Facebook facebookClient = new Facebook();
facebookClient.authorize(this, "[APP ID]", new String[] {"publish_stream", "read_stream", "offline_access"}, this);

lorsque "cela" est une Activité qui met en œuvre un DialogListener, et "[ID de l'APPLICATION]" est mon Facebook ID de l'application.

Merci.

[Mise à JOUR 2]

J'ai trouvé une solution (voir ci-dessous), bien que la seule chose qui manque est la capacité à s'auto-alimenter la connexion des zones de texte avec les données que j'ai stocké dans l'application. L'officiel Facebook SDK Android ne peut pas permettre cela. Je vais continuer à chercher en elle.

44voto

RyanM Points 3099

J'ai tout compris, avec Tom (merci). La clé est de créer un dialogue avec le "flux".publier" les appels de l'API, à l'aide de l'Facebook SDK Android. Voici les étapes:

  1. Télécharger l'officiel Facebook SDK Android : http://github.com/facebook/facebook-android-sdk
  2. Importer les fichiers du projet dans Eclipse.
  3. Exporter le projet en tant que *.fichier jar. (cela pourrait provoquer un conflit)

    [Mise à JOUR]

    Facebook a récemment mis à jour le code source et j'ai remarqué que l'icône du fichier causé id de ressource conflits avec mes projets (Android 1.5+). Ma solution, c'est d'oublier au sujet de l'exportation comme un pot. Au lieu de cela, copiez le Facebook "com" dossier directement dans votre application "src" dossier (c'est à dire "com.facebook.android" doit être un paquet dans votre application... juste à côté de vos fichiers source). Si vous avez déjà un "com" de votre dossier "src" le dossier, ne vous inquiétez pas à propos de toutes les boîtes de dialogue qui apparaissent sur l'écrasement de fichiers, aucun de vos fichiers source doivent être remplacés. Revenir dans Eclipse, et actualiser le "src" répertoire "com.facebook.android" devrait maintenant être répertorié comme un paquet. Copie l'un de l'Facebook icônes pour votre application "drawable" du dossier et de rafraîchissement. Eclipse va se plaindre au sujet de la "FbDialog.java" fichier... juste ajouter une importation pointant vers votre application "R" fichier de l'en-tête de ce fichier (par exemple, si le package de votre application nom est "com.android.myapp", puis ajouter ceci: "import com.android.myapp.R;"). Allez à #5 si vous avez besoin pour ce faire.

  4. Ajouter la .le fichier jar à votre projet de construction de chemin d'accès

  5. Regardez l'exemple simplifié de code:

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.LinearLayout;
import com.facebook.android.*;
import com.facebook.android.Facebook.DialogListener;

public class FacebookActivity extends Activity implements DialogListener,
        OnClickListener
{

    private Facebook facebookClient;
    private LinearLayout facebookButton;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.test);//my layout xml

        facebookButton = (LinearLayout)this.findViewById(R.id.Test_Facebook_Layout);

    }

    @Override
    public void onComplete(Bundle values)
    {

        if (values.isEmpty())
        {
            //"skip" clicked ?
            return;
        }

        // if facebookClient.authorize(...) was successful, this runs
        // this also runs after successful post
        // after posting, "post_id" is added to the values bundle
        // I use that to differentiate between a call from
        // faceBook.authorize(...) and a call from a successful post
        // is there a better way of doing this?
        if (!values.containsKey("post_id"))
        {
            try
            {
                Bundle parameters = new Bundle();
                parameters.putString("message", "this is a test");// the message to post to the wall
                facebookClient.dialog(this, "stream.publish", parameters, this);// "stream.publish" is an API call
            }
            catch (Exception e)
            {
                // TODO: handle exception
                System.out.println(e.getMessage());
            }
        }
    }

    @Override
    public void onError(DialogError e)
    {
        System.out.println("Error: " + e.getMessage());
    }

    @Override
    public void onFacebookError(FacebookError e)
    {
        System.out.println("Error: " + e.getMessage());
    }

    @Override
    public void onCancel()
    {
    }

    @Override
    public void onClick(View v)
    {
        if (v == facebookButton)
        {
            facebookClient = new Facebook();
            // replace APP_API_ID with your own
            facebookClient.authorize(this, APP_API_ID,
                new String[] {"publish_stream", "read_stream", "offline_access"}, this);
        }
    }
}

6voto

Nilesh Gawade Points 247
AsyncFacebookRunner mAsyncRunner;
    Facebook    facebook =new Facebook("Your app id");

btnLogin.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                facebook.authorize(FbdemoActivity.this, new String[]{ "user_photos,publish_checkins,publish_actions,publish_stream"},new DialogListener() {
                    @Override
                    public void onComplete(Bundle values) {



                    }

                    @Override
                    public void onFacebookError(FacebookError error) {
                    }

                    @Override
                    public void onError(DialogError e) {
                    }

                    @Override
                    public void onCancel() {
                    }
                });

            }
        });

    public void postOnWall(String msg) {
            Log.d("Tests", "Testing graph API wall post");
             try {
                    String response = facebook.request("me");
                    Bundle parameters = new Bundle();
                    parameters.putString("message", msg);
                    parameters.putString("description", "test test test");
                    response = facebook.request("me/feed", parameters, 
                            "POST");
                    Log.d("Tests", "got response: " + response);
                    if (response == null || response.equals("") || 
                            response.equals("false")) {
                       Log.v("Error", "Blank response");
                   }
             } catch(Exception e) {
                 e.printStackTrace();
             }

0voto

Joakim Engstrom Points 1389

Pour ceux qui ont des problèmes, dans le nouveau facebook (); , la chaîne est vous App_id, et supprimez simplement le APP_ID dans l'appel autorisé.

Je ne sais pas pourquoi le message d'erreur est affiché, mais j'imagine que facebook a mis à jour le SDK de facebook.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X