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:
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
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.
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