iOS SDK 开发指南
本文介绍如何在 iOS 原生项目中接入 TapTap 登录。
集成前准备
- 参考 开发者中心配置 创建应用、配置 Bundle ID
- 参考 TapTap 登录功能介绍开通 TapTap 登录服务
- 参考 iOS 集成指南 完成 TapSDK 基础接入
SDK 获取
远程依赖
- 在工程 Podfile 对应模块下添加依赖:
pod 'TapTapSDK/Login', '~> 4.11.0'
- 执行
pod install下载对应依赖文件
本地文件依赖
TapTap 登录依赖于初始化模块。使用本地文件添加依赖时,需先参考 iOS 集成指南 添加对应本地文件依赖项。
- 在 下载页 下载如下文件:
TapTapLoginSDK.xcframework登录依赖库TapTapLoginResource.bundle登录资源文件
- 在工程中添加
framework静态库,Embed 方式选择 Do Not Embed,并导入bundle资源文件
工程配置
需要添加 TapTap 客户端跳转配置,否则授权完成后无法返回游戏。
配置 URL Scheme
在 Xcode 中右键 Info.plist,选择 Open As > Source Code,然后添加以下配置(将 clientID 替换为开发者中心的 Client ID):

<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>taptap</string>
<key>CFBundleURLSchemes</key>
<array>
<!-- 中括号需要去掉,最终是 Client ID 前拼接 tt,例如:ttFwFdCxxxxxxxQDQwQN -->
<string>tt[clientID]</string>
</array>
</dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>tapiosdk</string>
<string>tapsdk</string>
<string>taptap</string>
</array>
配置 openURL
- Swift
- Objective-C
如果项目中有 SceneDelegate.swift,请添加:
import TapTapLoginSDK
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
for context in URLContexts {
let hasIntercept = TapTapLogin.open(url: context.url)
}
}
如果项目中只有 AppDelegate.swift,请添加:
import TapTapLoginSDK
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
return TapTapLogin.open(url: url)
}
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
return TapTapLogin.open(url: url)
}
如果项目中有 SceneDelegate.m,请添加:
#import "TapTapLoginSDK/TapTapLoginSDK-Swift.h"
#pragma mark - 处理外部 URL 打开(iOS 13+)
- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts API_AVAILABLE(ios(13.0)) {
for (UIOpenURLContext *context in URLContexts) {
bool hasIntercept = [TapTapLogin openWithUrl:context.URL];
}
}
如果项目中只有 AppDelegate.m,请添加:
#import "TapTapLoginSDK/TapTapLoginSDK-Swift.h"
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [TapTapLogin openWithUrl:url];
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
return [TapTapLogin openWithUrl:url];
}
发起登录
在用户点击 TapTap 登录按钮后调用。授权范围必须包含 public_profile 或 basic_info,可按业务组合其他权限。
| 权限 | 说明 |
|---|---|
public_profile | 获得 openId、unionId、用户昵称、用户头像 |
basic_info | 获得 openId 和 unionId |
user_friends | 获得访问 TapTap 好友相关数据的权限 |
tip
若只请求 basic_info,用户可使用无感登录,无需手动确认授权。
- Swift
- Objective-C
import TapTapLoginSDK
let scopes: [Scope] = [Scope.publicProfile]
TapTapLogin.login(with: scopes) { account, error, isCancel in
if isCancel {
// 用户取消登录,不要提示为系统错误
} else if let error = error {
NSLog("Tap 登录失败:\(error.localizedDescription)")
} else if let account = account {
let token = account.accessToken
let userInfo = account.userInfo
}
}
SDK 默认使用当前最上层页面作为登录弹窗容器。如需指定页面,可传入 viewController:
TapTapLogin.login(with: scopes, viewController: self) { account, error, isCancel in
// 处理登录结果
}
#import "TapTapLoginSDK/TapTapLoginSDK-Swift.h"
NSArray *scopes = @[@"public_profile"];
[TapTapLogin LoginWithScopes:scopes handler:^(BOOL isCancel, NSError * _Nullable error, TapTapAccount * _Nullable account) {
if (isCancel) {
// 用户取消登录,不要提示为系统错误
} else if (error != nil) {
NSLog(@"Tap 登录失败");
} else {
AccessToken *token = account.accessToken;
UserInfo *userInfo = account.userInfo;
}
}];
SDK 默认使用当前最上层页面作为登录弹窗容器。如需指定页面,可传入 viewController:
[TapTapLogin LoginWithScopes:scopes viewController:viewController handler:^(BOOL isCancel, NSError * _Nullable error, TapTapAccount * _Nullable account) {
// 处理登录结果
}];
| 参数 | 类型 | 必选 | 说明 |
|---|---|---|---|
scopes | Swift [Scope] / Objective-C NSArray | 是 | 本次登录请求的授权范围,必须包含 public_profile 或 basic_info。 |
viewController | UIViewController | 否 | 指定承载登录页面的控制器;不传时 SDK 使用当前最上层页面。 |
handler | 登录结果闭包 / Block | 是 | 返回 account、error 和 isCancel,分别用于处理成功、失败和取消。 |
获取当前用户
游戏启动时先调用该接口。该接口没有参数,返回本地缓存的 TapTapAccount;没有可用登录信息时返回 nil。如果本地已有有效登录信息,不要再弹出登录按钮。
- Swift
- Objective-C
import TapTapLoginSDK
if let account = TapTapLogin.getCurrentTapAccount() {
// 用户已登录
let token = account.accessToken
let userInfo = account.userInfo
let openId = userInfo?.openId
} else {
// 用户未登录,显示登录按钮
}
#import "TapTapLoginSDK/TapTapLoginSDK-Swift.h"
TapTapAccount *account = [TapTapLogin getCurrentTapAccount];
if (account != nil) {
// 用户已登录
AccessToken *token = account.accessToken;
UserInfo *userInfo = account.userInfo;
NSString *openId = userInfo.openId;
} else {
// 用户未登录,显示登录按钮
}
| 字段 | 说明 |
|---|---|
accessToken | 玩家在 TapTap 平台的用户 token。服务端调用 OpenAPI 时使用,见 获取用户信息 |
openId | 用户在当前游戏内的唯一标识 |
unionId | 用户在同一厂商下所有游戏中的统一标识 |
name | TapTap 昵称 |
avatar | TapTap 头像 URL |
登出
登出只清除本地缓存的 TapTap 登录信息,不会退出 TapTap 客户端。
- Swift
- Objective-C
import TapTapLoginSDK
TapTapLogin.logout()
#import "TapTapLoginSDK/TapTapLoginSDK-Swift.h"
[TapTapLogin logout];
接入验证
| 场景 | 预期结果 |
|---|---|
| 初始化完成后点击登录 | 回调成功、取消或失败之一 |
| 已安装 TapTap 客户端 | 拉起客户端完成授权 |
| 未安装 TapTap 客户端 | 进入 WebView 授权 |
| 授权后返回游戏 | openURL 被登录模块处理,并收到登录结果 |
| 登录成功后重启应用 | getCurrentTapAccount() 返回当前账号 |
调用 logout() | 本地登录信息被清除,可重新发起登录 |
| 用户取消登录 | isCancel 为 true,不提示系统错误 |