TapSDK iOS 接口
XDSDK v7 已经内置并初始化 TapSDK v4,游戏侧不需要自行初始化 TapSDK。需要使用 TapSDK 能力时,可以参考 TapSDK 官方文档对接口的说明,但使用的时候请调用 XDSDK 导出的 XDGTapSDK 和 XDTapSDK4WrapperSDK 封装接口。
依赖与入口
Native iOS 工程请先参考 iOS 接入配置 集成 XDSDK。Framework 方式需要包含 XDTapSDK4WrapperSDK.framework 和相关 TapTap 资源 bundle;SPM 方式按需勾选对应 Package Product。
| 能力 | 入口类 |
|---|---|
| TapSDK 登录 | XDGAccount |
| 实名和防沉迷 | 无 |
| TapDB 数据分析 | XDGTapTapEvent |
| 内嵌动态 | XDGTapTapMomentWrapper |
| 成就系统 | XDGTapTapAchievementWrapper |
| 云存档 | XDGTapTapCloudSaveWrapper |
#import <XDTapSDK4WrapperSDK/XDTapSDK4WrapperSDK.h>
TapTap 登录
请使用 XDSDK 的登录接口
实名和防沉迷
XDSDK 在国内登录流程中已包含实名和防沉迷流程,游戏不需要在自行处理相关内容。
TapDB 数据分析
对应 TapSDK 文档:TapDB 客户端接入。
发送普通事件请使用 XDSDK 的事件上报接口。
以下接口请使用 XDGTapTapEvent。
| 方法 | 说明 |
|---|---|
+ deviceInitialize: | 初始化设备属性,只在字段为空时写入。 |
+ deviceUpdate: | 更新设备属性,新值会覆盖旧值。 |
+ deviceAdd: | 累加设备数值属性。 |
+ userInitialize: | 初始化账号属性,只在字段为空时写入。 |
+ userUpdate: | 更新账号属性。 |
+ userAdd: | 累加账号数值属性。 |
+ addCommonProperty:value: | 添加单个静态通用事件属性。 |
+ addCommon: | 批量添加静态通用事件属性。 |
+ clearCommonProperty: | 清除单个静态通用事件属性。 |
+ clearCommonProperties: | 批量清除静态通用事件属性。 |
+ clearAllCommonProperties | 清除全部静态通用事件属性。 |
+ registerDynamicProperties: | 注册动态通用事件属性,每次发送事件时调用 block 获取最新属性。 |
deviceAdd 和 userAdd 仅支持数值属性。动态属性回调中应返回普通 NSDictionary 数据,避免执行耗时逻辑。
#import <XDTapSDK4WrapperSDK/XDTapSDK4WrapperSDK.h>
[XDGTapTapEvent deviceInitialize:@{@"first_server": @"server_1"}];
[XDGTapTapEvent userUpdate:@{
@"current_server": @"server_2",
@"level": @18
}];
[XDGTapTapEvent addCommon:@{@"build_type": @"release"}];
[XDGTapTapEvent registerDynamicProperties:^NSDictionary *{
return @{@"battle_mode": @"pve"};
}];
内嵌动态
对应 TapSDK 文档:内嵌动态开发指南。
| 方法 | 说明 |
|---|---|
+ setDelegate: | 设置动态回调代理。 |
+ open | 打开 TapTap 动态页面。 |
+ openScene: | 打开指定场景动态页面。 |
+ publish: | 发布动态,图片内容使用 XDGTapTapMomentImageData,视频内容使用 XDGTapTapMomentVideoData。 |
+ closeWithTitle:content:showConfirm: | 关闭所有内嵌窗口,可按参数展示确认弹窗。 |
+ close | 直接关闭所有内嵌窗口。 |
+ fetchNotification | 获取新动态数量,结果通过代理回调返回。 |
+ needDeferSystemGestures | 项目自己的 Controller 需要配置 Defer System Gestures 时调用。 |
XDGTapTapMomentDelegate 可选实现 onMomentCallbackWithCode:msg:。fetchNotification 成功时,msg 为新消息数量。
发布数据限制:
| 类型 | 字段 | 限制 |
|---|---|---|
XDGTapTapMomentImageData | images | 最多 1 张,超出时截取第一张 |
XDGTapTapMomentImageData | content | 最多 1200 字符 |
XDGTapTapMomentVideoData | images | 最多 1 张,超出时截取第一张 |
XDGTapTapMomentVideoData | videos | 最多 1 个视频,超出时截取第一个 |
XDGTapTapMomentVideoData | title | 最多 40 字符 |
XDGTapTapMomentVideoData | content | 最多 40 字符 |
#import <XDTapSDK4WrapperSDK/XDTapSDK4WrapperSDK.h>
@interface TapMomentHandler : NSObject <XDGTapTapMomentDelegate>
@end
@implementation TapMomentHandler
- (void)onMomentCallbackWithCode:(NSInteger)code msg:(NSString *)msg {
// 根据 code 和 msg 处理动态状态
}
@end
TapMomentHandler *handler = [TapMomentHandler new];
[XDGTapTapMomentWrapper setDelegate:handler];
[XDGTapTapMomentWrapper open];
XDGTapTapMomentImageData *data = [XDGTapTapMomentImageData new];
data.content = @"动态文字内容";
data.images = @[@"file:///path/to/image.png"];
[XDGTapTapMomentWrapper publish:data];
成就系统
对应 TapSDK 文档:成就系统开发指南。
| 方法 | 说明 |
|---|---|
+ incrementWithAchievementId:steps: | 增加分步成就步数。 |
+ unlockWithAchievementId: | 解锁指定成就。 |
+ registerCallbackWithCallback: | 注册成就回调。 |
+ unregisterCallbackWithCallback: | 移除成就回调。 |
+ setToastEnableWithEnable: | 设置是否展示成就达成气泡弹窗。 |
+ showAchievements | 显示成就页,已安装 TapTap 时跳转客户端,否则跳转 Web。 |
XDGTapTapAchievementCallback 需要实现:
| 方法 | 说明 |
|---|---|
onAchievementSuccessWithCode:result: | 成就操作成功。result 包含成就 ID、成就名称、成就类型和当前步数。 |
onAchievementFailureWithAchievementId:errorCode:errorMsg: | 成就操作失败。 |
成就类型 XDGTapTapAchievementTypeNORMAL 表示普通成就,XDGTapTapAchievementTypePLATINUM 表示白金成就。
#import <XDTapSDK4WrapperSDK/XDTapSDK4WrapperSDK.h>
@interface AchievementHandler : NSObject <XDGTapTapAchievementCallback>
@end
@implementation AchievementHandler
- (void)onAchievementSuccessWithCode:(NSInteger)code result:(XDGTapTapAchievementResult *)result {
// 成就操作成功
}
- (void)onAchievementFailureWithAchievementId:(NSString *)achievementId
errorCode:(NSInteger)errorCode
errorMsg:(NSString *)errorMsg {
// 成就操作失败
}
@end
AchievementHandler *handler = [AchievementHandler new];
[XDGTapTapAchievementWrapper registerCallbackWithCallback:handler];
[XDGTapTapAchievementWrapper unlockWithAchievementId:@"achievement_id"];
[XDGTapTapAchievementWrapper incrementWithAchievementId:@"achievement_id" steps:1];
[XDGTapTapAchievementWrapper setToastEnableWithEnable:YES];
[XDGTapTapAchievementWrapper showAchievements];
云存档
对应 TapSDK 文档:云存档开发指南。
| 方法 | 说明 |
|---|---|
+ registerCloudSaveCallback: | 注册 CloudSave 统一状态回调。 |
+ unregisterCloudSaveCallback: | 取消注册 CloudSave 统一状态回调。 |
+ createArchiveWithArchiveMetadata:archiveFilePath:archiveCoverPath:callback: | 创建存档并上传云端。 |
+ updateArchiveWithArchiveUUID:archiveMetadata:archiveFilePath:archiveCoverPath:callback: | 更新指定存档。 |
+ deleteArchiveWithArchiveUUID:callback: | 删除指定存档。 |
+ getArchiveListWithCallback: | 获取当前用户的存档列表。 |
+ getArchiveDataWithArchiveUUID:archiveFileID:callback: | 下载指定存档文件。 |
+ getArchiveCoverWithArchiveUUID:archiveFileID:callback: | 获取指定存档封面。 |
XDGArchiveMetadata 用于创建和更新存档,包含 name、summary、extra、playtime。XDGArchiveData 为服务端返回的存档数据,包含 uuid、name、summary、extra、playtime、saveSize、coverSize、fileId、createdTime、modifiedTime。
回调协议:
| 协议 | 方法 | 说明 |
|---|---|---|
XDGTapTapCloudSaveCallback | onResult: | 云存档统一状态结果。 |
XDGTapTapCloudSaveRequestCallback | onArchiveCreatedWithArchive: | 创建成功。 |
XDGTapTapCloudSaveRequestCallback | onArchiveUpdatedWithArchive: | 更新成功。 |
XDGTapTapCloudSaveRequestCallback | onArchiveDeletedWithArchive: | 删除成功。 |
XDGTapTapCloudSaveRequestCallback | onArchiveListResultWithArchives: | 存档列表结果。 |
XDGTapTapCloudSaveRequestCallback | onArchiveDataResultWithArchiveUUID:archiveFileID:data: | 存档数据下载结果。 |
XDGTapTapCloudSaveRequestCallback | onArchiveCoverResultWithArchiveUUID:archiveFileID:coverData: | 存档封面下载结果。 |
XDGTapTapCloudSaveRequestCallback | onRequestErrorWithErrorCode:errorMessage: | 请求失败。 |
#import <XDTapSDK4WrapperSDK/XDTapSDK4WrapperSDK.h>
XDGArchiveMetadata *metadata = [XDGArchiveMetadata new];
metadata.name = @"save_001";
metadata.summary = @"第一章";
metadata.extra = @"{}";
metadata.playtime = 3600;
[XDGTapTapCloudSaveWrapper createArchiveWithArchiveMetadata:metadata
archiveFilePath:@"path/to/archive/file"
archiveCoverPath:@"path/to/cover/image"
callback:requestCallback];
[XDGTapTapCloudSaveWrapper getArchiveListWithCallback:requestCallback];