12/12/2024 11:37:55
Apple 渠道说明
Apple 从 XCode 11 开始支持 Apple ID 登录,运行的 iOS 系统版本在 iOS 13 及以上版本时功能正常,否则登录返回错误码 7(NOT_SUPPORT)。
一、 Apple Developer Potral 配置
实现 Sign in with Apple 功能之前,需要在 Apple Developer Portal:
- 获取 Team ID;
- 创建用于向 Apple 发送请求时标识请求来源的 client_id;
- 对于 iOS 应用来说,client_id 亦即 App ID(Bundle ID)
- 创建描述文件
- 创建用于计算 client_secret 的 key 以及对应的 Key ID;
1.1 获取 Team ID
- 登录 Apple Developer Portal,点击 Account;
- 点击左侧边栏的 Membership,即可看到 Team ID;
1.2 创建 App ID
- 登录 Apple Developer Portal,点击 Account;
- 点击左侧边栏的 Certificates, IDs & Profiles;
- 点击左侧边栏的 Identifiers,然后点击蓝色加号;
- 第一步选择 App IDs,点击 Continue;
- 输入 Description 以及 Bundle ID,在 Capabilities 下勾选 Sign in with Apple;
- 点击 Continue,点击 Register;
对于现存 App ID 来说,只需找到想要增加 Sign in with Apple 的 App ID ,在 Capabilities 下勾选 Sign in with Apple 即可。
1.3 创建描述文件
- 登录 Apple Developer Portal,点击 Account;
- 点击左侧边栏的 Certificates, IDs & Profiles;
- 点击左侧边栏的 Profiles,然后点击蓝色加号;
选择证书类型, 点击 Continue
选择上一步注册的 App ID, 点击 Continue
选择签名证书,点击 Continue
选择设备,点击 Continue
为描述文件命名,点击 Continue
下载描述文件,点击 Download
安装下载的描述文件到开发或者打包环境中
对于现存的描述文件来说,只需在 App ID 的 Capabilities 添加 Sign in with Apple 之后, 重新编辑、保存和下载即可
1.4 创建 Key 以及获取 Key ID
- 登录 Apple Developer Portal,点击 Account;
- 点击左侧边栏的 Keys,然后点击蓝色加号;
- 输入 Key Name,勾选 Sign in with Apple;
- 点击 Sign in with Apple 旁边的 Configure,选择上述配置了 Sign in with Apple 功能的 App ID 作为 Primary App ID,点击保存;
- 点击 Continue,点击 Register;
- 下载 Key 文件(只能下载一次,确保不要丢失),获取 Key ID
将上述过程中获得的 App ID,Team ID,Key ID,Key 文件中的内容在游戏接入时配置到飞鹰中即可。
二、iOS 工程配置
2.1 Xcode 中添加 Capability
2.2 Xcode BuildPhases 配置
在 Xcode BuildPhases 中添加 AuthenticationServices.framework,同时设置Status 为 optional
三、Unity 配置
3.1 Unity XUPoter 的 xx.projmods 文件的配置
Unity 导出 XCode 工程时,需要配置 projmods 文件( 等同于 2.1 的手动配置)
{
"group": "MSDKApple",
"libs": [],
"frameworks": ["AuthenticationServices.framework:weak"],
"files": [],
"folders": [],
"excludes": [],
"headerpaths":[],
"build_settings": {},
"system_capabilities": {},
"Info.plist":{}
}
3.2 Unity 工程需要新增 Entitlement 文件
示例:MSDKDevDemo.entitlements
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.developer.applesignin</key>
<array>
<string>Default</string>
</array>
</dict>
</plist>
Unity 如何添加 Entitlement 文件,参考Unity 论坛的策略
https://forum.unity.com/threads/how-to-put-ios-entitlements-file-in-a-unity-project.442277/
四、 界面要求
[human-interface-guidelines] 是苹果要求的界面风格,有明确的界面要求,游戏方需要关注的是:
按钮的外观颜色要求
登录按钮存在三种外观:白色、带边框的白色和黑色。选择适合背景的按钮外观有要求
白色按钮
用于深色或者彩色背景
白色按钮带边框
用于不能提供足够对比度的白色或者浅色白净
黑色按钮
用于提供足够对比度的白色或浅色背景
按钮的位置要求
- 使用与其他登录按钮大小相同的 Apple 登录按钮
- 避免让滚动才看到按钮
- 默认情况下,“使用 Apple 登录” 按钮具有圆角
- 此外按钮不能出现拉伸或者压缩导致的比例丢失
- 按钮需要在所有其他登录方式上面
其他关注点
苹果提供了 “Sign in With Apple” 和 “Continue With Apple” 两种文档用于登录按钮(Objective-c 和 Swift 原生UI组件),业务方可选择符合您登录体验的文案,文案的语言会随着手机系统语进行本地化
五、请求用户全名和邮箱
public static void Login(string channel, string permissions = "", string subChannel = "", string extraJson = "")
public static void Login(const String &channel, const String &permissions, const String &subChannel, const String &extraJson)
参数说明
参数名称 | 参数类型 | 说明 |
---|---|---|
channel | string | 渠道名字,填“Apple“ |
permissions | string | "email,fullName" |
subChannel | string | 不填使用默认值即可 |
extraJson | string | 不填使用默认值即可 |
Apple 登录只有首次授权时才会提供 fullName 和 email,首次授权时 MSDK 通过 channelInfo 字段携带回去
channelInfo 是一个 JSON 格式字符串,其中 email 和 full_name 两个字段为 Apple 提供的邮箱和用户名
重新拿到用户名和密码的方法
在设置 - Apple ID 、Cloud 、媒体和购买项目 - 密码和安全性 - 使用您的 Appid 的 App 中删除对应用的授权,再次登录就会重新提供用户名和邮箱
六、第三方错误码
登录
错误吗 | 错误信息 |
---|---|
1000 | 未知错误 |
1001 | 用户取消 |
1002 | 授权请求收到了无效的响应 |
1003 | 未处理授权请求 |
1004 | 授权尝试失败 |
自动登录
错误吗 | 错误信息 |
---|---|
0 | 用户取消授权 |
2 | iCloud 未登录 |
七、常见问题
7.1 token 说明
Apple 登录鉴权、米大师支付场景及其他操作所需的 token,从 MSDK 登录回调取最外层 token 字段,业务无需关注 refreshToken。
All rights reserved.