FaceBook官网地址
FaceBook github地址
申请账号之类的本篇就不在多说,不会的请自行百度。
坑一:facebook 登录invalid key hash.the key hash does not macth any stoyed key has
建议使用代码里边打印的密钥散列
建议使用代码里边打印的密钥散列
建议使用代码里边打印的密钥散列
重要的事情说三遍,在终端里边输出的根本不能用,别问我为什么
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
PackageInfo info = getPackageManager().getPackageInfo(
"{your-package-name}", //Insert your own package name.
PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
然后是实现
Facebook自带登录按钮:
<com.facebook.login.widget.LoginButton
android:id="@+id/login_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="30dp"
android:layout_marginBottom="30dp" />
LoginButton loginButton = (LoginButton) findViewById(R.id.login_button);
CallbackManager callbackManager = CallbackManager.Factory.create();
// Callback registration
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// App code
}
@Override
public void onCancel() {
// App code
}
@Override
public void onError(FacebookException exception) {
// App code
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
callbackManager.onActivityResult(requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
}
自定义Facebook登录按钮
<FrameLayout
android:id="@+id/login_facebook_btn"
android:layout_width="300dp"
android:layout_height="40dp"
android:layout_marginTop="30dp"
android:background="@drawable/btn_circle_bg_selector"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="28dp"
android:scaleType="centerInside"
android:src="@drawable/icon_login_fb" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Facebook"
android:textColor="@color/white"
android:textSize="16sp" />
</FrameLayout>
CallbackManager callbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// App code
}
@Override
public void onCancel() {
// App code
}
@Override
public void onError(FacebookException exception) {
// App code
}
});
LoginManager.getInstance().logInWithReadPermissions(activity, Arrays.asList("public_profile"));
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
callbackManager.onActivityResult(requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
}
至于用哪一种,就根据我们的实际需求自行选择了