web-dev-qa-db-fra.com

Exemple de travail du dernier Android facebook sdk login

Je travaille sur le bouton de connexion Facebook personnalisé, j'ai trouvé qu'il y avait peu de source (en particulier un exemple de code de travail) sur le dernier facebook Android sdk. J'ai passé toute la journée mais le code ne fonctionne toujours pas. Je me demande s'il y a un exemple de projet ou le code de votre projet:

  1. identifiant Facebook:
  2. partager la session avec une autre activité/fragment (afin que je puisse vérifier l'état de connexion/déconnexion partout dans l'application)
  3. poster sur le Mur
  4. se déconnecter

Voici mon code, mais il renvoie en fait le statut de non-connexion même si je suis connecté

S'identifier:

public class Login {
    private final static String TAG = "FaceBookLogin";
    public Context ctx;
    public Session fb_session;

    public Login(Context _ctx) {
        ctx = _ctx;
        Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);
        fb_session = Session.getActiveSession();

        if(fb_session == null)                   
            fb_session = Session.openActiveSessionFromCache(ctx);
    }

    public void checkLogin() {
        printHashKey();
        if (fb_session != null && fb_session.isOpened()) {
            Log.i(TAG, "Facebook Login State");
        } else {
            if (fb_session == null)
                fb_session = new Session(ctx);

            Session.setActiveSession(fb_session);
            ConnectToFacebook();
            Log.i(TAG, "Facebook Not login State");
        }
    }

    public void printHashKey() {

        try {
            PackageInfo info = ctx.getPackageManager().getPackageInfo("com.project.hkseven",
                    PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                Log.d(TAG,
                        Base64.encodeToString(md.digest(), Base64.DEFAULT));
            }
        } catch (NameNotFoundException e) {
              Log.d(TAG,""+e);
        } catch (NoSuchAlgorithmException e) {
              Log.d(TAG,""+e);
        }

    }

    private void ConnectToFacebook() {
        Session session = Session.getActiveSession();

        if(session == null)                   
            session = Session.openActiveSessionFromCache(ctx);

        if (!session.isOpened() && !session.isClosed()) {
            Log.i(TAG, "ConnectToFacebook if");
            OpenRequest newSession = new Session.OpenRequest((Activity) ctx);
            newSession.setCallback(callback);
            session.openForRead(newSession);
            try {
                Session.OpenRequest request = new Session.OpenRequest((Activity) ctx);
                request.setPermissions(Arrays.asList("email","publish_stream","publish_actions"));
            } catch (Exception e) {
                Log.d(TAG,""+e);
                e.printStackTrace();
            }
        } else {
            Log.i(TAG, "ConnectToFacebook else");
            Session.openActiveSession((Activity) ctx, true, callback);
        }
    }

    private Session.StatusCallback callback = new Session.StatusCallback() {
        public void call(final Session session, final SessionState state,
                final Exception exception) {
            Log.d(TAG,"callback" + state);
            onSessionStateChange(session, state, exception);
        }
    };

    private void onSessionStateChange(final Session session,
            SessionState state, Exception exception) {
        Log.i(TAG, "state change");
        if (session != null && session.isOpened()) {
            Log.i(TAG, "Change to Facebook Login");
        }
    }
}

Toute aide est appréciée, merci de votre aide

12
user782104

Tout d'abord, installez le dernier sdk et faites quelque chose comme ceci:

Sous ~\FaceBook-Sdk\facebook-Android-sdk-3.5.2\samples.

Vous trouverez les échantillons de tout ce que vous avez posté. Mais peut-être que cela ne fonctionnera pas. Donc, ce que vous devez faire pour le faire fonctionner est:

Faire une demande côté Facebook. Obtenez votre fb_api_key à partir de là et mettez dans le projet que vous obtenez à partir d'échantillons.

5
Sagar Shah

Voir cet exemple, il utilise le dernier SDK Facebook et couvre la connexion de base + le partage.

Effectuez maintenant les modifications suivantes dans votre fichier manifeste d'application. Mettez le code suivant avant la balise. Assurez-vous que vous utilisez votre propre AppID obtenu à partir de la console développeur de Facebook.

<activity Android:name="com.facebook.LoginActivity"
            Android:theme="@Android:style/Theme.Translucent.NoTitleBar" />
<meta-data Android:name="com.facebook.sdk.ApplicationId"
                Android:value="@string/app_id" />

Présentation de votre activité

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:facebook="http://schemas.Android.com/apk/res-auto"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:gravity="center_horizontal"
    Android:orientation="vertical"
    Android:padding="20dp" >

    <com.facebook.widget.LoginButton
        Android:id="@+id/fb_login_button"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_marginTop="5dp"
        facebook:confirm_logout="false"
        facebook:fetch_user_info="true" />

    <TextView
        Android:id="@+id/user_name"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_gravity="center"
        Android:layout_margin="10dp"
        Android:textSize="18sp" />

    <Button
        Android:id="@+id/update_status"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:text="@string/update_status" />

    <Button
        Android:id="@+id/post_image"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:text="@string/post_image" />

</LinearLayout>

Activité Java

package com.domain.yourapp;

import Java.util.Arrays;
import Java.util.List;
import Android.content.Intent;
import Android.graphics.Bitmap;
import Android.graphics.BitmapFactory;
import Android.os.Bundle;
import Android.support.v4.app.FragmentActivity;
import Android.util.Log;
import Android.view.View;
import Android.view.View.OnClickListener;
import Android.widget.Button;
import Android.widget.TextView;
import Android.widget.Toast;
import com.facebook.Request;
import com.facebook.Response;
import com.facebook.Session;
import com.facebook.SessionState;
import com.facebook.UiLifecycleHelper;
import com.facebook.model.GraphUser;
import com.facebook.widget.LoginButton;
import com.facebook.widget.LoginButton.UserInfoChangedCallback;

public class FBActivity extends FragmentActivity {

    private LoginButton loginBtn;
    private Button postImageBtn;
    private Button updateStatusBtn;

    private TextView userName;

    private UiLifecycleHelper uiHelper;

    private static final List<String> PERMISSIONS = Arrays.asList("publish_actions");

    private static String message = "Sample status posted from Android app";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        uiHelper = new UiLifecycleHelper(this, statusCallback);
        uiHelper.onCreate(savedInstanceState);

        setContentView(R.layout.activity_facebook);

        userName = (TextView) findViewById(R.id.user_name);
        loginBtn = (LoginButton) findViewById(R.id.fb_login_button);
        loginBtn.setUserInfoChangedCallback(new UserInfoChangedCallback() {
            @Override
            public void onUserInfoFetched(GraphUser user) {
                if (user != null) {
                    userName.setText("Hello, " + user.getName());
                } else {
                    userName.setText("You are not logged");
                }
            }
        });

        postImageBtn = (Button) findViewById(R.id.post_image);
        postImageBtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View view) {
                postImage();
            }
        });

        updateStatusBtn = (Button) findViewById(R.id.update_status);
        updateStatusBtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

            }
        });

        buttonsEnabled(false);
    }

    private Session.StatusCallback statusCallback = new Session.StatusCallback() {
        @Override
        public void call(Session session, SessionState state,
                Exception exception) {
            if (state.isOpened()) {
                buttonsEnabled(true);
                Log.d("FacebookSampleActivity", "Facebook session opened");
            } else if (state.isClosed()) {
                buttonsEnabled(false);
                Log.d("FacebookSampleActivity", "Facebook session closed");
            }
        }
    };

    public void buttonsEnabled(boolean isEnabled) {
        postImageBtn.setEnabled(isEnabled);
        updateStatusBtn.setEnabled(isEnabled);
    }

    public void postImage() {
        if (checkPermissions()) {
            Bitmap img = BitmapFactory.decodeResource(getResources(),
                    R.drawable.ic_launcher);
            Request uploadRequest = Request.newUploadPhotoRequest(
                    Session.getActiveSession(), img, new Request.Callback() {
                        @Override
                        public void onCompleted(Response response) {
                            Toast.makeText(FBActivity.this,
                                    "Photo uploaded successfully",
                                    Toast.LENGTH_LONG).show();
                        }
                    });
            uploadRequest.executeAsync();
        } else {
            requestPermissions();
        }
    }

    public void postStatusMessage() {
        if (checkPermissions()) {
            Request request = Request.newStatusUpdateRequest(
                    Session.getActiveSession(), message,
                    new Request.Callback() {
                        @Override
                        public void onCompleted(Response response) {
                            if (response.getError() == null)
                                Toast.makeText(FBActivity.this,
                                        "Status updated successfully",
                                        Toast.LENGTH_LONG).show();
                        }
                    });
            request.executeAsync();
        } else {
            requestPermissions();
        }
    }

    public boolean checkPermissions() {
        Session s = Session.getActiveSession();
        if (s != null) {
            return s.getPermissions().contains("publish_actions");
        } else
            return false;
    }

    public void requestPermissions() {
        Session s = Session.getActiveSession();
        if (s != null)
            s.requestNewPublishPermissions(new Session.NewPermissionsRequest(
                    this, PERMISSIONS));
    }

    @Override
    public void onResume() {
        super.onResume();
        uiHelper.onResume();
        buttonsEnabled(Session.getActiveSession().isOpened());
    }

    @Override
    public void onPause() {
        super.onPause();
        uiHelper.onPause();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        uiHelper.onDestroy();
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        uiHelper.onActivityResult(requestCode, resultCode, data);
    }

    @Override
    public void onSaveInstanceState(Bundle savedState) {
        super.onSaveInstanceState(savedState);
        uiHelper.onSaveInstanceState(savedState);
    }

}

Ceci est un code complet, qui fournit la connexion, la mise à jour du statut, la mise à jour de l'image au point.

Pour plus de détails, voir le lien suivant. http://javatechig.com/Android/using-facebook-sdk-in-Android-example

30
Faisal Basra