Facebook登录
前置条件
你可以从 创建应用 获取 Facebook APP Id
你可以从 Client Token 获取 Facebook Client Token
添加依赖
- Android
- iOS
在应用级别的 build.gradle 中添加以下代码,并将 $msdk_version 替换为实际的 MSDK 版本。
dependencies {
implementation "com.garena.sdk.android:login-facebook:$msdk_version"
}
配置
- Android
- iOS
- Unity
- Unreal
配置 AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
...
<!-- Facebook SDK declares this permission(optional permission), but this will block uploading to Google Play if you don't turn on advertising ID on Google Play Console
so you can use tools:node="remove" here to remove this permission -->
<uses-permission
android:name="com.google.android.gms.permission.AD_ID"
tools:node="remove" />
<application ...>
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="[facebook_app_id]" />
<meta-data
android:name="com.facebook.sdk.ClientToken"
android:value="[facebook_client_token]" />
<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="[facebook_protocol_scheme]" />
</intent-filter>
</activity>
....
</application>
</manifest>
配置 Info.plist
FacebookDisplayName - 该 key 的值必须与 Facebook 开发者后台“Settings”中的 Display Name 字段完全一致。
fbapi - 允许应用在登录认证时跳转到 Facebook App。
fb{APP-ID} - 允许 Facebook App 在登录认证后跳转回你的应用。
<key>FacebookAppID</key>
<string>123456789</string>
<key>FacebookDisplayName</key>
<string>facebook display name</string>
<key>FacebookClientToken</key>
<string>client_token</string>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
</array>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>fb123456789</string>
</array>
</dict>
</array>
你可以直接在Info.plist中添加FacebookAutoLogAppEventsEnabledkey 来控制是否自动收集 App 事件。默认值为 "true"。
在 Window -> GMSDK Settings 中配置 facebook_app_id、facebook_client_token 和 facebook_protocol_scheme
在 Edit -> Project Settings -> Plugins -> Garena MSDK 中配置 FaceBookAppID,FacebookClientToken,FacebookContentProviderAuthorities,FacebookDisplayName,FacebookUrlSchemeSuffix
使用方法
- Android
- iOS
- Unity
- Unreal
AccountManager accountManager = new AccountManager(activity);
accountManager.login(PlatformType.FACEBOOK, onLoginListener);
[MSDKLoginManager loginWithPlatform:MSDKePlatformFb completion:^(MSDKLoginRet *loginRet) {
// handle login result
}];
如果用户在应用中禁用了 App Tracking,那么使用 Facebook 登录时将启用 Facebook Limited Login. 使用 Limited Login 时,即使用户安装了 Facebook App,也不会跳转到 Facebook App,而是使用游戏内浏览器进行登录。 此外,通过 Limited Login 创建的会话不会提供 FB Access Token,并可能限制部分数据使用。
GMSDKHandler.LoginClient.Login(AccountPlatform.Facebook, OnLoginCallback);
UMsdkLogin::Login(Facebook);
覆盖权限
默认情况下需要以下 Facebook 权限:public_profile、email、user_friends
如果你不需要这些权限,可以覆盖默认权限
- Android
- iOS
- Unity
- Unreal
accountManager.login(new FacebookLoginParams(
Arrays.asList(FacebookPermission.EMAIL, FacebookPermission.PROFILE)), onLoginListener);
var facebookLoginParams = new FacebookLoginParams
{
androidFacebookPermissions = new List<AndroidFacebookPermission> { AndroidFacebookPermission.Email },
};
GMSDKHandler.LoginClient.Login(facebookLoginParams, OnLoginCallback);
FLoginParams Params;
Params.platform = Facebook;
Params.androidFacebookPermissions = { static_cast<int32>(AndroidFacebookPermissionEmail) };
UMsdkLogin::LoginWithParams(Params);
获取当前 Facebook access token
当前用户通过 Facebook 登录时,可以获取当前的 Facebook access token。
- Android
- iOS
- Unity
- Unreal
accountManager.getPlatformAccessToken(PlatformType.FACEBOOK);
// Returns the token as a string. If the token does not exist, it returns an empty string.
NSString *tokenString = [MSDKLoginManager.shared getFacebookAccessToken];
NSLog(@"Facebook Access Token: %@", tokenString);
覆盖 Facebook Graph API 版本
Facebook 会定期更新并废弃旧的 Graph API 版本。通过以下接口可以升级 Graph API 版本,而无需升级 Garena MSDK。
- Android
- iOS
- Unity
- Unreal
// build the configurations
MSDKConfigs configs = new MSDKConfigs.Builder()
.setFacebookGraphApiVersion(version)
.build();
MSDK.setConfig(configs);
[[FacebookSDKService shared] changeFacebookGraphAPIVersion:version];