iOS
本文旨在介绍如何设置 Facebook 身份验证,让您的游戏可以使用 Player Network 登录鉴权服务通过 Facebook 渠道登录。
前提条件
1. 在 Facebook 开发者平台上配置应用
1. 注册账号
在为应用配置平台之前,请注册 Facebook 开发者账号并在 Facebook App Dashboard 创建应用。
-
在 Facebook 注册账号并根据提示完成账号认证(Email 或手机认证)。
-
在 Meta for Developers 激活开发者账号。
- 同意协议并继续。
- 完成手机验证。
- 确认邮箱。
- 完成注册。
- 在 Meta for Developers 将 Facebook SDK 添加到项目。
2. 创建应用
- 在右上角点击 Create App。
- 应用类型选择为 Authenticate and request data from users with Facebook Login。
- 选择 Business,如果未显示则请继续下一步。
- 填写基本信息。
INTLConfig.ini
配置文件中的 SDK 的所有配置 应为此处的 App name。
- 同意并继续。
3. 配置应用
按照 Facebook 规范输入隐私协议 URL、用户数据删除和服务条款 URL。如果您不遵守 Facebook 规范,Facebook 可能会在您的应用程序发布后禁用您的应用程序。
已提交到 Facebook 的应用可以继续使用 Facebook Login For Gaming,未提交的新 App 只能使用 Facebook Login。更多详情,请参见 Facebook Login For Gaming。
-
在左侧导航栏中,点击 App Settings > Basic 查看应用程序的基本信息,如 App ID 和 App secret。
-
在 Privacy Policy URL 字段中,输入隐私协议的网址。
-
在 User Data Deletion 字段中,选择数据删除说明 URL,并根据用户的数据删除说明输入网址。
-
在 Terms of Service 字段中,输入服务条款网页的 URL。
-
点击 Add Platform,选择 iOS 添加 iOS 应用程序。
-
直接输入配置,或点击平台配置界面右上角的 Quick Start,根据指南设置配置。
-
点击 Save Changes 保存配置。
配置 Facebook 登录
- 在 Facebook App Dashboard,点击 Use cases > Customize。
- 在 Facebook Login 下选择 Settings。
- 在 Valid OAuth Redirect URIs,填写
https://common-web.intlgame.com/jssdk/facebooklogincallback.html
和https://test-common-web.intlgame.com/jssdk/facebooklogincallback.html
。 - 打开 Embedded Browser OAuth Login。
- 在页面底部点击 Save changes 保存配置。
4. 添加测试人员权限
在应用发布之前,只有测试用户或被添加到权限列表中的用户才能访问 Facebook 的功能。
- 在 Facebook App Dashboard 中,点击 Roles。
- 点击 Add Administrators/Add Developers/Add Testers 以添加各个角色。
5. 完成 Facebook 商务认证
某些 Meta 技术或功能需要通过 Meta 商务认证后才可以使用。如需商务认证,请联系 Player Network 助手。
- 获取 Player Network 控制台登录账号。
- 为游戏创建新项目,或加入已有项目。
- 下载 SDK。
- 接入 SDK。
- 在 Player Network 控制台添加 Facebook 为业务的登录鉴权方式。
步骤1:为 Facebook 登录配置 SDK
-
打开
INTLSDK/Scripts/INTLConfig/Editor/Resources/INTLConfig.ini
文件。INTLConfig.ini[INTL environment]
# WARNING: You should change this URL to the production environment when you release your game.
INTL_URL = https://test.intlgame.com
GAME_ID = {INTL_GAME_ID}
SDK_KEY = {INTL_SDK_KEY}
[INTL Log]
LOG_LEVEL = 1
LOG_CONSOLE_OUTPUT_ENABLE = 1
LOG_FILE_OUTPUT_ENABLE = 1
LOG_ENCRYPT_ENABLE = 0
LOG_COMPRESS_ENABLE = 0
[Facebook channel configuration]
FACEBOOK_APP_ID = {INTL_FACEBOOK_APP_ID}
FACEBOOK_DISPLAYNAME = {INTL_APP_NAME}- 将 SDK 后端环境
INTL_URL
设置为https://test.intlgame.com
。 - 将
{INTL_GAME_ID}
和{INTL_SDK_KEY}
替换为 Player Network 控制台 分配的GAME_ID
和SDK_KEY
的值。 - 设置
LOG_LEVEL = 1
、LOG_CONSOLE_OUTPUT_ENABLE = 1
、LOG_FILE_OUTPUT_ENABLE = 1
、LOG_ENCRYPT_ENABLE = 0
和LOG_COMPRESS_ENABLE = 0
,以便在不加密或压缩输出的情况下输出控制台日志和日志文件。 - 将
{INTL_FACEBOOK_APP_ID}
替换为 Facebook App ID。 - 将
{INTL_APP_NAME}
替换为 Facebook 应用程序的名称。
- 将 SDK 后端环境
-
将 Facebook 添加到
Info.plist
文件中。- Unity
- Unreal Engine
在从 Unity 导出 Xcode 项目之前,检查
INTLFacebookKit.projmods
中的预定义值,并将{Facebook_APP_ID}
替换为 Facebook App ID。{
"group": "INTL",
"Info.plist":{
"LSApplicationQueriesSchemes":
[
"fb-messenger-api",
"fbshareextension",
"fbauth2",
"fb-messenger-share-api",
"fbapi",
"fb",
],
"CFBundleURLTypes" :
[
{
"CFBundleTypeRole":"Editor",
"CFBundleURLName":"Facebook",
"CFBundleURLSchemes":["fb{Facebook_APP_ID}"]
}
]
},
}- Player Network SDK 1.18 及之后版本
- Player Network SDK 1.18 之前版本
根据 SDK 版本打开对应的文件进行修改:
- V1.24 及之后版本:
INTLSDK/Source/INTLFacebook/Libs/iOS/INTLFacebook_UPL.xml
- V1.18 至 V1.23:
INTLSDK/Source/INTLConfig/Configs/iOS/Plist/INTLFacebook.plist
<key>CFBundleURLSchemes</key>
<array>
<string>fb{INTL_FACEBOOK_APP_ID}</string>
</array>业务需到 Unreal Engine > Settings > Project Settings > Platforms > iOS > Extra Plist Data 修改配置,在 PLIST 文件中添加 SDK。
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fb</string>
<string>fb-messenger-api</string>
<string>fbshareextension</string>
<string>fbauth2</string>
<string>fb-messenger-share-api</string>
<string>fbapi</string>
</array>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>Facebook</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>fb{INTL_FACEBOOK_APP_ID}</string>
</array>
</dict>
</array>替换
{INTL_FACEBOOK_APP_ID}
为 步骤2 获取的 Facebook App ID。 -
配置
ClientToken
。可在 Facebook 开发者平台进入App Dashboard
,选择App settings/Advanced/Client token
获取ClientToken
。更多说明,参见 入门指南:iOS 版 Facebook SDK。注意Facebook 渠道新增
ClientToken
配置,解决 app 在短时间内大量调用fb graph api
会失败的问题。
此功能在 V1.19.03 及更高版本中生效。V1.19.02 及更早版本不需要以下配置。- Unity
- Unreal Engine
在
intlconfig.ini
文件增加ClientToken
配置。FACEBOOK_CLIENT_TOKEN = CLIENT-TOKEN
在 projmods 文件增加
ClientToken
配置。"FacebookClientToken":"CLIENT-TOKEN"
在
intlconfig.ini
文件增加ClientToken
配置。FACEBOOK_CLIENT_TOKEN = CLIENT-TOKEN
在 plist 文件增加
ClientToken
配置。</array>
<key>FacebookAppID</key>
<string>APP-ID</string>
<key>FacebookClientToken</key>
<string>CLIENT-TOKEN</string>
<key>FacebookDisplayName</key>
<string>APP-NAME</string>
</array>
步骤2:添加 Facebook 登录
对于 iOS,Player Network 在登录状态之前检查网页登录状态,调用 Player Network SDK 的 Login
接口进行登录。
- 如果 Safari 已登录 Facebook,Player Network 会打开网页客户端进行登录。
- 如果 Safari 没有登录Facebook,Player Network 会检查是否安装了 Facebook 应用程序。
- 如果安装了 Facebook 应用程序,Player Network 就会打开 Facebook 应用程序进行登录。如果玩家取消了应用程序上的登录,他们可以继续在网络客户端上登录。
- 如果未安装 Facebook 应用程序,Player Network 将打开网页客户端进行游戏登录。
Player Network 还支持 “使用 Facebook 登录 Gaming 平台”。更多信息,请参见 Facebook 官方文档中的 技术实 现 部分。
-
注册登录相关回调。
- Unity
- Unreal Engine
// Add callbacks
public void AddAuthObserver()
{
INTLAPI.AddAuthResultObserver(OnAuthResultEvent);
}
// Remove callbacks
public void RemoveAuthObserver()
{
INTLAPI.RemoveAuthResultObserver(OnAuthResultEvent);
}
// Process the INTLAuthResult callback
public void OnAuthResultEvent(INTLAuthResult ret)
{
Debug.Log($"MethodID: {ret.MethodId}");
string methodTag = "";
if (authRet.MethodId == (int)INTLMethodID.INTL_AUTH_LOGIN)
{
methodTag = "Login";
}
else if (authRet.MethodId == (int)INTLMethodID.INTL_AUTH_BIND)
{
methodTag = "Bind";
}
else if (authRet.MethodId == (int)INTLMethodID.INTL_AUTH_AUTOLOGIN)
{
methodTag = "AutoLogin";
}
else if (authRet.MethodId == (int)INTLMethodID.INTL_AUTH_QUERY_USER_INFO)
{
methodTag = "QueryUserInfo";
}
else if (authRet.MethodId == (int)INTLMethodID.INTL_AUTH_GET_AUTH_RESULT)
{
methodTag = "GetAuthResult";
}
}C++ Event Handling (above v1.15)
//configure callback
FINTLAuthEvent authEvent;
authEvent.AddUObject(this, &OnAuthResult_Implementation);
UINTLSDKAPI::SetAuthResultObserver(authEvent);
// Remove callbacks
UINTLSDKAPI::GetAuthResultObserver().Clear();void OnAuthResult_Implementation(FINTLAuthResult ret)
{
UE_LOG(LogTemp, Warning, TEXT("MethodID: %d"), ret.MethodId);
}Unreal Event Handling
void OnAuthResult_Implementation(FINTLAuthResult ret)
{
UE_LOG(LogTemp, Warning, TEXT("MethodID: %d"), ret.MethodId);
} -
调用
AutoLogin
接口自动登录。- Unity
- Unreal Engine
INTLAPI.AutoLogin();
UINTLSDKAPI::AutoLogin();
-
在自动登录失败时调用
Login
接口使玩家手动登录。-
常规 Facebook Login
- Unity
- Unreal Engine
// taking Facebook as example
INTLAPI.Login(INTLChannel.Facebook);// taking Facebook as example
UINTLSDKAPI::Login(EINTLLoginChannel::kChannelFacebook); -
使用 Facebook 登录 Gaming 平台
使用以下参数调用
Login
接口获取 Facebook 社交头像。更多信息,请参见 请求用户的头像。- Unity
- Unreal Engine
//在原来的 permissions 字符串里,添加一个 `gaming_user_picture` 权限,类似这样:`"email,public_profile,gaming_user_picture"`
public static void Login(string channel, string permissions = "gaming_profile,gaming_user_picture", string extraJson = "{}");//在原来的 permissions 字符串里,添加一个 `gaming_user_picture` 权限,类似这样:`"email,public_profile,gaming_user_picture"`
UFUNCTION(BlueprintCallable, Category = "INTLSDKAPI")
static bool Login(
const EINTLLoginChannel Channel,
const FString Permissions = "gaming_profile,gaming_user_picture",
const FString ExtraJson = "{}");
-
-
与游戏后台同步客户端身份验证状态,等待最终验证结果。
受限登录
- 需要 Player Network SDK v1.15。
- 仅支持 iOS 设备。
Player Network SDK Facebook 支持有限登录。更多信息,请参见 Facebook Website Limited Login。
当有限登录调用登录 API 时,必须传入 extraJson
参数 "{\"login_mode\":1}"
。
- Unity
- Unreal Engine
INTLAPI.Login(INTLChannel.Facebook,"","{\"login_mode\":1}");
UINTLSDKAPI::Login(EINTLLoginChannel::kChannelFacebook,"","{\"login_mode\":1}");
[可选] 设置 email 权限
要在 Facebook 登录时获取玩家邮箱需先设置对应权限,开启后将在 AuthResult
的 ChannelInfo
中返回 email
。
- 基于合规考虑,可针对特定来源对返回的
email
做 mask 处理,如有需求请联系 Player Network 助手打开。 - 可在后台流水日志中上报 hash 后的
base64(sha256(email))
,如有需求请联系 Player Network 助手打开。 - 可用于验证玩家信息或绑定列表是否包含
email
信息,如有需求请联系 Player Network 助手打开。 - 可用于 iOS Firebase 的 Private Set Membership(PSM)功能,详见 Firebase iOS 工程配置。
-
在 Meta for Developers 配置 email 权限。email 权限需要有 高级访问级别,才能让所有应用都能获取到玩家的 email。
-
调用 Login 接口时,需要在
permissions
参数中添加email
权限。调用Login
接口时如果permissions
参数没有传入或者为空时,Player Network SDK 将会加上email
权限。 -
在 Player Network 控制台 开启 email 返回功能,将 return_email 设置为 YES,详细步骤请参见 第三方渠道配置。
步骤3:验收登录功能
在 Player Network SDK 日志中搜索关键字 "AuthResult" 确认渠道名称和 OpenID 是否正确返回。如果正确,则表明集成配置成功,登录功能已成功添加。
如果接入过程中遇到问题,请参见 常见问题。