iOS
本文旨在介绍如何设置 LINE 身份验证,让您的游戏可以使用 Player Network 登录鉴权服务通过 LINE 渠道登录。
前提条件
1. 在 LINE Developers Console 上设置 LINE 应用
1. 创建 LINE 应用并配置渠道
在为所需平台配置应用程序之前,请登录 LINE Developers Console 并创建开发者账号。使用开发者账号,使用 LINE Developers Console 并创建一个渠道(LINE 功能与您的应用程序之间的通信渠道)。
创建一个渠道
在 Console 主页上,点击 Create New Provider,然后按照屏幕上的说明创建提供商。
在提供商页面的 Channels 选项卡中,点击 Create a LINE Login channel。
在新渠道创建页面,输入所需信息并点击 Create。
在渠道页面的 Basic settings 选项卡中,选中 Channel ID 和其他 Player Network SDK 配置所需的信息。
为移动应用程序(Android/iOS)配置渠道。
在渠道页面的 LINE Login 选项卡中,启用 Mobile app 并输入所需信息。
要添加新的渠道包名称和相应签名以支持多商店渠道包,请添加新行输入信息。
点击 Update 保存配置。
2. 添加用户权限
创建渠道后,该渠道会立即设置为 Developing 模式。只有渠道管理员和测试人员可以使用 LINE 登录功能。
添加测试人员
从主页上最近访问过的渠道中选择相应渠道。
在渠道页面,点击 Roles。
在 Roles 选项卡中,点击 Invite by email。
在 Invite new members 部分添加测试人员。
Email:测试者的 LINE 账号
Role: 测试员点击 Send Invitations 发送测试人员邀请。
等待测试人员接受电子邮件邀请。
步骤1:为 LINE 登录配置 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
[LINE]
LINE_CHANNEL_ID = {INTL_LINE_CHANNEL_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_LINE_CHANNEL_ID}
替换为在 LINE Developers 上注册的 Channel ID。
- 将 SDK 后端环境设置为
将 LINE 添加到
Info.plist
文件中。注意由于 LINE 已停止维护 Objective-C 版本的 SDK,而所有后续 SDK 都是 Swift 版本,因此当前的集成是 Swift 版本。
Swift-LINESDK 仅支持 Xcode10.3 及更高版本。
更多信息,请参见 适应 Swift SDK
- Unity
- Unreal Engine
检查
INTLLINEKit.projmods
中的预定义值,并将{INTL_BUNDLE_ID}
替换为从 Unity 导出 Xcode 项目之前在 LINE 上配置的BundleIdentifier
(类似于com.example.demo
)。{
"group": "INTL",
"libs": [],
"frameworks": [],
"files": [],
"folders": [],
"excludes": [],
"headerpaths":[],
"build_settings": {},
"system_capabilities": {},
"Info.plist":{
"LSApplicationQueriesSchemes":
[
"lineauth2",
"line"
],
"CFBundleURLTypes" :
[
{
"CFBundleTypeRole":"Editor",
"CFBundleURLSchemes":"line3rdp.{INTL_BUNDLE_ID}"
}
]
}
}- Player Network SDK 1.18 及之后版本
- Player Network SDK 1.18 之前版本
根据 SDK 版本打开对应的文件进行修改:
- V1.24 及之后版本:
INTLSDK/Source/INTLLINE/Libs/iOS/INTLLINE_UPL.xml
- V1.18 至 V1.23:
INTLSDK/Source/INTLConfig/Configs/iOS/Plist/INTLLINE.plist
<key>CFBundleURLSchemes</key>
<array>
<string>line3rdp.{INTL_BUNDLE_ID}</string>
</array>业务需到 Unreal Engine > Settings > Project Settings > Platforms > iOS > Extra Plist Data 修改配置,在 PLIST 文件中添加 SDK。
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>LINE</string>
<key>CFBundleURLSchemes</key>
<array>
<string>line3rdp.{INTL_BUNDLE_ID}</string>
</array>
</dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>line</string>
<string>lineauth2</string>
</array>替换
{INTL_BUNDLE_ID}
为游戏工程的BundleIdentifier
类似com.example.demo
(需要与在 LINE 开发者平台上配置的BundleIdentifier
一致)。更多信息,请参见 LINE Developer Portal Bundle ID。
步骤2:添加 LINE 登录
LINE 登录前无需安装应用程序。
- iOS 在有安装和登录 LINE app 的情况下会拉起 LINE app 进行登录;如果没有安装 LINE app,或者在 LINE app 没登录的情况下,会拉起 Web 页面进行登录。
- iOS 无论是 LINE app 授权还是通过 web 页面登录,账号登录成功后都会拉起 web 页面提示是否拉起游戏客户端,此时点击拒绝的话将不会拉起游戏客户端,游戏客户端也无法收到回调。
- LINE 的授权登录需要赋予 OpenID,profile 两项权限。前者是为了获取玩家的 LINE OpenID,后者是为了获取玩家的 LINE access token,可以通过
Permissions
字段来设置。如果业务填写的Permissions
字段为空,那么在登录 LINE 时 Player Network SDK 将默认使用 OpenID 和 profile 权限。
注册登录相关回调。
- 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
接口使玩家手动登录。- Unity
- Unreal Engine
INTLAPI.Login(INTLChannel.LINE);
UINTLSDKAPI::Login(EINTLLoginChannel::kChannelLINE);
与游戏后台同步客户端身份验证状态,等待最终验证结果。
步骤3:验收登录功能
在 Player Network SDK 日志中搜索关键字 "AuthResult" 确认渠道名称和 OpenID 是否正确返回。如果正确,则表明集成配置成功,登录功能已成功添加。
如果接入过程中遇到问题,请参见 常见问题。
步骤4:发布游戏
要向玩家开放 LINE 登录功能,请将渠道设置为 Published。