Skip to main content

iOS

本文旨在介绍如何设置 WhatsApp 身份验证,让您的游戏可以使用 Player Network 登录鉴权服务通过 WhatsApp 渠道登录。

前提条件

1. 在 Meta 开发者平台上配置应用
1. 注册账号
caution

请使用在 WhatsApp 可用区域(非大陆区域) 注册的开发者账号创建,大陆区域注册的开发者账号暂时没有办法申请到 WhatsApp 的开发权限 。

在为应用配置平台之前,请注册 Mate 开发者账号。

  1. Facebook 注册账号并根据提示完成账号认证(Email 或手机认证)。

  2. Meta for Developers 激活开发者账号。

    图片: Activate a Facebook developer account

  3. 同意协议并继续。

    图片: Consent to the agreement and continue

  4. 完成手机验证。

    图片: Mobile phone verification

  5. 确认邮箱。

    图片: Mobile phone verification

  6. 完成注册。

    图片: Complete registration

2. 创建 Meta 业务资产组合

在为应用配置平台之前,请创建 Meta 业务资产组合。

  1. 请访问business.facebook.com 并使用 Meta 开发者帐户登录。

  2. 点击左上角 Home 下方的下拉菜单, 点击 Create a business portfolio

  3. 请输入业务组合名称。此名称应与您的企业或组织的公开名称一致,因为它将在 Meta 上显示。业务组合名称不能包含特殊字符。

    图片: Complete registration

  4. 点击 Create 完成创建。

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

    图片: Create an app

  2. 填写基本信息:

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

    Image: Enter basic information

  3. 添加用例 页面选择 Other, 然后点击 继续

    Image: Enter basic information

  4. 应用类型选择为 Bussiness, 然后点击 继续

    Image: Enter basic information

  5. Detail 页面中确认应用名称以及邮箱,然后选择对应的业务资产组合(也可以后续再选),然后点击 Create app

note

业务资产组合,可选择与Facebook渠道 App 相同的公司验证。

Image: Enter basic information

  1. app 创建成功。
4. 配置应用
caution

此处可能会没有 WhatsApp 配置入口,这种场景通常是因为该开发者账号没有 WhatsApp 的开发权限。经过验证,只有在 WhatsApp 可用区域(非大陆区域) 注册的开发者账号才有 WhatsApp 的开发权限,大陆区域注册的开发者账号暂时没有办法申请到 WhatsApp 的开发权限 。

  1. 创建好应用后,点击应用面板的左侧边栏中找到添加产品按钮,在右侧的为应用添加产品下方,找到 WhatsApp,点击 WhatsApp 卡片的设置按钮即可完成添加。

    Image: 配置应用

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

    Image: 配置应用

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

    Image:配置应用

5. 创建系统用户口令

长期测试或生产环境需要使用系统用户口令,请参考 创建系统用户口令流程

  1. 参考以上链接的生成系统用户访问口令章节,创建系统用户,用户身份选择为Employee即可; 创建完成后,参考链接中的图示,给用户授予应用和对应WhatsApp账户的权限。

Image:创建系统用户口令

  1. 授权完成后,点击“生成口令”,在弹窗中选择应用,口令有效期选永不过期.

在授权窗口选择以下三个权限后,点击生成口令即可生成

  • business_management
  • whatsapp_business_management
  • whatsapp_business_messaging
caution

口令只展示一次,请注意保存,如果丢失只能重新生成。

Image:创建系统用户口令

Image:创建系统用户口令

Image:创建系统用户口令

6. 配置WebHook
  1. WhatsApp 中配置 WebHook 的回调地址。

    配置 Player Network 提供的回调地址验证口令,点击验证并保存。

图片:配置WebHook

  1. WhatsApp 中配置 WebHook 收取的消息类型。

    需要订阅 messages

7. Deeplink 跳转配置

WhatsApp登录功能,该功能涉及到 deeplink 的跳转功能,每个接入WhatsApp渠道的业务,都需要在后端配置deeplink的链接,规则暂定为,其中 xxxxx 代表业务方提供的域名,https://xxxxxxxx/whatsapp?info=cccccccccccc ,域名指定后需要配置跳转文件。

配置文件如下:

apple-app-site-association 文件如何生成,可以参考DeepLink

8. 添加WhatsApp正式号码
note

需准备海外未注册过WhatsApp的手机号,手机号需长期维护保证可用。

  • 建议一个业务申请 2个商业号,分别用户 联调 和 正式上线。
  • 原因:账号隔离,防止测试时讲消息发送给正式用户;WhatsApp 的回调地址只能配置一个,如果回调地址配置为正式环境的,测试环境就无法使用此 WhatsApp 商业号登录
  1. 控制台添加新正式号码配置 图片:添加WhatsApp正式号码
  • 填写 WA Business Profile

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

    图片:添加WhatsApp正式号码

  • 添加号码并验证

    图片:添加WhatsApp正式号码

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

    图片:添加WhatsApp正式号码

  1. 通过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 广告结算申请链接
  1. 不与 Facebook 的广告投流费用一起结算, WhatsApp 独立结算申请链接

  2. 与 Facebook 的广告投流费用一起结算,申请链接

设置信用额度

需联系 Meta Account Manager 为BM分配信用额度,或由项目添加自己可用的信用卡。若需分配信用额度,请联系Facebook Account Manager协助。

图片:设置信用额度

  1. 获取 Player Network 控制台登录账号
  2. 为游戏创建新项目,或加入已有项目
  3. 下载 SDK
  4. 接入 SDK
  5. 在 Player Network 控制台添加 WhatsApp 为业务的登录鉴权方式

步骤1:为 WhatsApp 登录配置 SDK

  1. 打开项目的 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_IDSDK_KEY 的值。
    • 设置 LOG_LEVEL = 1LOG_CONSOLE_OUTPUT_ENABLE = 1LOG_FILE_OUTPUT_ENABLE = 1LOG_ENCRYPT_ENABLE = 0LOG_COMPRESS_ENABLE = 0,以便在不加密或压缩输出的情况下输出控制台日志和日志文件。
    • {INTL_WHATSAPP_LOGIN_HOST} 替换为 WhatsApp 授权跳转的 Deeplink 域名。
    • {INTL_WHATSAPP_LOGIN_PATH} 替换为 WhatsApp 授权跳转的 Deeplink 路径。
    • {INTL_WHATSAPP_SERVICE_ID} 替换为 WhatsApp 商业号号码。

步骤2:添加 WhatsApp 登录

Player Network 会在拉起应用登录之前检查应用程序登录状态。

  • 如果安装了 WhatsApp 应用程序,Player Network 会打开 WhatsApp 应用程序进行登录。
  • 如果未安装 WhatsApp 应用程序,Player Network 登录页面将不会展示 WhatsApp 渠道登录入口。
  1. 注册登录相关回调。

    // 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";
    }
    }

  2. 调用 AutoLogin 接口自动登录。

    INTLAPI.AutoLogin();
  3. 在自动登录失败时调用 RequestWhatsAppSignature 接口获取 WhatsApp 跳转请求并携带 code。

    INTLAPI.RequestWhatsAppSignature(string ExtraJson);
  4. 发送授权请求到 WhatsApp 商业号,收到 deeplink 点击携带授权信息跳转回到游戏,调用 LoginForLI 接口登录。

    INTLAPI.LoginForLI(INTLChannel.WhatsApp,"",ExtraJson);
  5. 与游戏后台同步客户端身份验证状态,等待最终验证结果。

如果接入过程中遇到问题,请参见 常见问题