Android
本文旨在介绍如何设置 WhatsApp 身份验证,让您的游戏可以使用 Player Network 登录鉴权服务通过 WhatsApp 渠道登录。
前提条件
1. 在 Meta 开发者平台上配置应用
1. 注册账号
请使用在 WhatsApp 可用区域(非大陆区域) 注册的开发者账号创建,大陆区域注册的开发者账号暂时没有办法申请到 WhatsApp 的开发权限 。
在为应用配置平台之前,请注册 Mate 开发者账号。
-
在 Facebook 注册账号并根据提示完成账号认证(Email 或手机认证)。
-
在 Meta for Developers 激活开发者账号。

-
同意协议并继续。

-
完成手机验证。

-
确认邮箱。

-
完成注册。

2. 创建 Meta 业务资产组合
在为应用配置平台之前,请创建 Meta 业务资产组合。
-
请访问business.facebook.com 并使用 Meta 开发者帐户登录。
-
点击左上角 Home 下方的下拉菜单, 点击 Create a business portfolio。
-
请输入业务组合名称。此名称应与您的企业或组织的公开名称一致,因为它将在 Meta 上显示。业务组合名称不能包含特殊字符。

-
点击 Create 完成创建。
3. 创建应用
-
登录 Meta 开发者账号,进入我的应用,在右上角点击 Create App。

-
填写基本信息:
- App name - 应用名称。
- App contact email - 主要联系邮箱,用于接收由 Meta 方发送,关于该应用的各种通知。

-
在 添加用例 页面选择 Other, 然后点击 继续。

-
应用类型选择为 Bussiness, 然后点击 继续。

-
在 Detail 页面中确认应用名称以及邮箱,然后选择对应的业务资产组合(也可以后续再选),然后点击 Create app。
业务资产组合,可选择与Facebook渠道 App 相同的公司验证。

- app 创建成功。
4. 配置应用
此处可能会没有 WhatsApp 配置入口,这种场景通常是因为该开发者账号没有 WhatsApp 的开发权限。经过验证,只有在 WhatsApp 可用区域(非大陆区域) 注册的开发者账号才有 WhatsApp 的开发权限,大陆区域注册的开发者账号暂时没有办法申请到 WhatsApp 的开发权限 。
-
创建好应用后,点击应用面板的左侧边栏中找到添加产品按钮,在右侧的为应用添加产品下方,找到 WhatsApp,点击 WhatsApp 卡片的设置按钮即可完成添加。

-
在上一步点击设置后,会跳转到 WhatsApp 产品配置页面,这里直接点击继续 。

-
在跳转到快速入门界面中,点击Test the API:

5. 创建系统用户口令
长期测试或生产环境需要使用系统用户口令,请参考 创建系统用户口令流程。
- 参考以上链接的生成系统用户访问口令章节,创建系统用户,用户身份选择为Employee即可; 创建完成后,参考链接中的图示,给用户授予应用和对应WhatsApp账户的权限。

- 授权完成后,点击“生成口令”,在弹窗中选择应用,口令有效期选永不过期.
在授权窗口选择以下三个权限后,点击生成口令即可生成
- business_management
- whatsapp_business_management
- whatsapp_business_messaging
口令只展示一次,请注意保存,如果丢失只能重新生成。



6. 配置WebHook
-
在 WhatsApp 中配置 WebHook 的回调地址。
配置 Player Network 提供的回调地址和验证口令,点击验证并保存。

-
在 WhatsApp 中配置 WebHook 收取的消息类型。
需要订阅 messages
7. Deeplink 跳转配置
WhatsApp登录功能,该功能涉及到 deeplink 的跳转功能,每个接入WhatsApp渠道的业务,都需要在后端配置deeplink的链接,规则暂定为,其中 xxxxx 代表业务方提供的域名,https://xxxxxxxx/whatsapp?info=cccccccccccc ,域名指定后需要配置跳转文件。
配置文件如下: https://xxxxxxxxxx/.well-known/assetlinks.json
assetlinks.json 文件如何生成,可以参考DeepLink
8. 添加WhatsApp正式号码
需准备海外未注册过WhatsApp的手机号,手机号需长期维护保证可用。
- 建议一个业务申请 2个商业号,分别用户 联调 和 正式上线。
- 原因:账号隔离,防止测试时讲消息发送给正式用户;WhatsApp 的回调地址只能配置一个,如果回调地址配置为正式环境的,测试环境就无法使用此 WhatsApp 商业号登录
- 控制台添加新正式号码配置

-
填写 WA Business Profile
- WhatsApp Business display name:即发件主体对玩家显示的名称
- Timezone:主要影响账单和数据分析的时间,建议选 GMT +8:00 或与游戏保持一致
- Category:建议选Other,选择Gaming类型会提示无法继续注册whatsapp

-
添加号码并验证

-
完成验证后,会进入审核阶段,可以在WhatsApp Manager页面查看审核情况

- 通过API调用完成 Registration 操作,完成后正式号码才可用
-
请参考官方指引
-
API调用方案(可联系业务接口人由账号团队协助处理):
-
完成手机号的创建: 完成新的手机号申请后,需要调用 Facebook 的接口进行 Register 操作。
curl 'https://graph.facebook.com/v24.0/{wa 电话号码编号}/register' -H 'Content-Type: application/json' -H 'Authorization: Bearer {token}' -d '{"messaging_product": "whatsapp", "pin": "{wa 电话号码的 2fa pin 码}"}' -
关联手机号与Facebook APP:在 Register 之后,需要 调用 Facebook 的接口进行 subscribed_apps 操作。
-
9. Others
WhatsApp 广告结算申请链接
-
不与 Facebook 的广告投流费用一起结算, WhatsApp 独立结算申请链接
-
与 Facebook 的广告投流费用一起结算,申请链接
设置信用额度
需联系 Meta Account Manager 为BM分配信用额度,或由项目添加自己可用的信用卡。若需分配信用额度,请联系Facebook Account Manager协助。

- 获取 Player Network 控制台登录账号。
- 为游戏创建新项目,或加入已有项目。
- 下载 SDK。
- 接入 SDK。
- 在 Player Network 控制台添加 WhatsApp 为业务的登录鉴权方式。
步骤1:为 WhatsApp 登录配置 SDK
-
打开项目的 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
[WhatsApp]
WHATSAPP_LOGIN_HOST = {INTL_WHATSAPP_LOGIN_HOST}
WHATSAPP_LOGIN_PATH = {INTL_WHATSAPP_LOGIN_PATH}
WHATSAPP_SERVICE_ID = {INTL_WHATSAPP_SERVICE_ID}- 将 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_WHATSAPP_LOGIN_HOST}替换为 WhatsApp 授权跳转的 Deeplink 域名。 - 将
{INTL_WHATSAPP_LOGIN_PATH}替换为 WhatsApp 授权跳转的 Deeplink 路径。 - 将
{INTL_WHATSAPP_SERVICE_ID}替换为 WhatsApp 商业号号码。
- 将 SDK 后端环境
步骤2:添加 WhatsApp 登录
Player Network 会在拉起应用登录之前检查应用程序登录状态。
- 如果安装了 WhatsApp 应用程序,Player Network 会打开 WhatsApp 应用程序进行登录。
- 如果未安装 WhatsApp 应用程序,Player Network 登录页面将不会展示 WhatsApp 渠道登录入口。
-
注册登录相关回调。
- Unity
- Unreal Engine
// Add callbacks
public void AddAuthObserver()
{
INTLAPI.AddAuthResultObserver(OnAuthResultEvent);
}
public void AddAuthBaseObserver()
{
INTLAPI.AddAuthBaseResultObserver(OnAuthBaseResultEvent);
}
// Remove callbacks
public void RemoveAuthObserver()
{
INTLAPI.RemoveAuthResultObserver(OnAuthResultEvent);
}
public void RemoveAuthBaseObserver()
{
INTLAPI.RemoveAuthBaseResultObserver(OnAuthBaseResultEvent);
}
// 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";
}
}
// Process the AuthBaseResult callback
public void OnAuthBaseResultEvent(INTLBaseResult ret)
{
Debug.Log($"MethodID: {ret.MethodId}");
string methodTag = "";
if (ret.MethodId == (int)INTLMethodID.INTL_GET_WHATSAPP_SIG)
{
methodTag = "RequestWhatsAppSignature";
}
}C++ Event Handling (above v1.15)
//configure AuthResult callback
FINTLAuthEvent authEvent;
authEvent.AddUObject(this, &OnAuthResult_Implementation);
UINTLSDKAPI::SetAuthResultObserver(authEvent);
// Remove AuthResult callbacks
UINTLSDKAPI::GetAuthResultObserver().Clear();
//configure AuthBaseResult callback
FINTLAuthBaseEvent authBaseEvent;
authBaseEvent.AddUObject(this&OnAuthBaseResult_Implementation);
UINTLSDKAPI::SetAuthBaseResultObserver(authBaseEvent);
// Remove AuthBaseResult callbacks
UINTLSDKAPI::GetAuthBaseResultObserver().Clear();void OnAuthResult_Implementation(FINTLAuthResult ret)
{
UE_LOG(LogTemp, Warning, TEXT("MethodID: %d"), ret.MethodId);
}
void OnAuthBaseResult_Implementation(FINTLAuthBaseResult 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);
}
void OnAuthBaseResult_Implementation(FINTLAuthBaseResult ret)
{
UE_LOG(LogTemp, Warning, TEXT("MethodID: %d"), ret.MethodId);
} -
调用
AutoLogin接口自动登录。- Unity
- Unreal Engine
INTLAPI.AutoLogin();UINTLSDKAPI::AutoLogin(); -
在自动登录失败时调用
RequestWhatsAppSignature接口获取 WhatsApp 跳转请求并携带 code。- Unity
- Unreal Engine
INTLAPI.RequestWhatsAppSignature(string ExtraJson);// taking Facebook as example
UINTLSDKAPI::RequestWhatsAppSignature(const FString extraJson); -
发送授权请求到 WhatsApp 商业号,收到 deeplink 点击携带授权信息跳转回到游戏,调用
LoginForLI接口登录。- Unity
- Unreal Engine
INTLAPI.LoginForLI(INTLChannel.WhatsApp,"",ExtraJson);UINTLSDKAPI::LoginForLI(EINTLLoginChannel::WhatsApp,"",extraJson); -
与游戏后台同步客户端身份验证状态,等待最终验证结果。
如果接入过程中遇到问题,请参见 常见问题。