一、接入前的准备
1.1 创建应用
先创建应用,再按官方文档接入。不用在接入文档中填写应用的参数,应用创建后,在 “用例” 中配置。
1.2 权限配置
“身份验证和账户创建”, 在定制中可以配置获取用户数据的权限,不过这里的数据只有 email(邮箱)和 public_profile(默认的公开资料)。一般来说只需要 public_profile,游戏可能会需要 gaming_profile(玩家资料)。如果要获取更多的数据,就要添加 “额外 Facebook 用户数据 ” ,然后在定制中添加需要的权限。
1.3 快速接入
通过 “身份验证和账户创建”->“定制”->“前往快速启动” ,这个可以直接实现对应用的配置而且接入流程也很清晰。
二、接入登录
2.1 参数配置
先在 AndroidManifest 中配置好 facebook 的参数。(建议参数写在 values 中,这样修改的时候也不用改到AndroidManifest 文件)
<activity
android:name="com.facebook.FacebookActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
/>
<activity
android:name="com.facebook.CustomTabActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="@string/fb_login_protocol_scheme" />
</intent-filter>
</activity>
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" />
<meta-data
android:name="com.facebook.sdk.ClientToken"
android:value="@string/facebook_client_token" />
2.2 登录管理类
创建登录管理类,初始化的时候需要通过LoginManager.getInstance().registerCallback() 注册登录回调。
private CallbackManager mCallbackManager;
public void init() {
mCallbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
//通知登录成功
mFacebookLoginCallback.success();
}
@Override
public void onCancel() {
//通知登录取消
mFacebookLoginCallback.failure();
}
@Override
public void onError(FacebookException exception) {
Log.d(TAG, "registerCallback.onError");
if (exception instanceof FacebookAuthorizationException) {
if (AccessToken.getCurrentAccessToken() != null) {
// 如果当前用户已登录,且fb登陆验证异常,则调一下fb的登出
LoginManager.getInstance().logOut();
//通知登录失败
mFacebookLoginCallback.failure();
return;
}
}
//通知登录失败
mFacebookLoginCallback.failure();
}
});
}
一般的第三方账号绑定,其本质还是调用渠道登录,拿到 token / uid 之类的和自己的平台账号绑定,所以建议登录的时候传入自定义的登录回调,在不同的调用位置进行处理,如登录/绑定。
登录传入的权限要和接入前的权限配置一致,不然会导致登录有问题。
public void loginWith(Activity activity, Collection<String> permissions, FacebookLoginCallback callback) {
mFacebookLoginCallback = callback;
if (permissions == null) {
permissions = Arrays.asList("public_profile", "email");
}
LoginManager.getInstance().logInWithReadPermissions(activity, permissions);
}
2.3 登出
登出方法直接调LoginManager.getInstance().logOut() 。
2.4 登录回调
然后在 onActivityResult 中调用 callbackManager.onActivityResult() ,这里调用记得判空。
public void onActivityResult(int requestCode, int resultCode, Intent data) {
mCallbackManager.onActivityResult(requestCode, resultCode, data);
}