开发指南
本文 介绍如何在游戏中加入云存档功能。
PC 端云存档功能,使用前需接入启动校验,具体参考 TapTap PC 端集成 文档
权限说明
- Unity
- Android Java
- Android Kotlin
- iOS Swift
- iOS Objective-C
该模块需要如下权限:
权限 | 使用目的 | 权限申请时机 |
---|---|---|
网络权限 | 用于访问网络数据 | 用户首次使用该功能时会申请权限 |
网络状态权限 | 用于检查网络连接状态(如 Wi-Fi 或移动数据是否可用) | 用户首次使用该功能时会申请权限 |
该模块将在应用中添加如下权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
该模块需要如下权限:
权限 | 使用目的 | 权限申请时机 |
---|---|---|
网络权限 | 用于访问网络数据 | 用户首次使用该功能时会申请权限 |
网络状态权限 | 用于检查网络连接状态(如 Wi-Fi 或移动数据是否可用) | 用户首次使用该功能时会申请权限 |
该模块将在应用中添加如下权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
iOS 云存档模块不需要特殊权限配置。
iOS 云存档模块不需要特殊权限配置。
集成前准备
参考 准备工作 创建应用、开启云存档服务。
SDK 获取
由于 TapSDK V4 依赖于 TapTapCore 核心库以及 TapTapLogin 登录,所以需要在 TapTapCore 的基础上,另外添加 TapTapCloudSave
、TapTapLogin
模块:
- Unity
- Android Java
- Android Kotlin
- iOS Swift
- iOS Objective-C
第一步:添加 SDK 所需的外部依赖
SDK 内部使用了部分第三方库,开发者接入时需先确保 SDK 外部依赖库已正常接入,具体设置如下:
- SDK 使用的 JSON 解析库为
Newtonsoft-json
,如果当前工程已接入该依赖库,则不需额外处理,否则需在Packages/manifest.json
添加如下依赖:
"com.unity.nuget.newtonsoft-json":"3.2.1"
- SDK 使用
com.google.external-dependency-manager
管理 Android、iOS 依赖,如果当前工程已接入该依赖库,则不需额外处理,否则需在Packages/manifest.json
添加如下依赖:
{
"dependencies": {
"com.google.external-dependency-manager": "1.2.179"
},
"scopedRegistries": [
{
"name": "package.openupm.com",
"url": "https://package.openupm.com",
"scopes": [
"com.google.external-dependency-manager"
]
}
]
}
第二步:添加 SDK 依赖
SDK 支持 Unity Package Manager 及本地文件导入两种集成方式,开发者根据需求选择其中一种即可,推荐使用远程依赖。
远程依赖
SDK 支持通过 NPMJS 及 GitHub 两种方式,开发者选择其中一种即可。
1. NPMJS 接入
在项目的 Packages/manifest.json
文件中添加以下依赖:
"dependencies":{
"com.taptap.sdk.core":"4.8.2",
"com.taptap.sdk.login":"4.8.2",
"com.taptap.sdk.cloudsave":"4.8.2",
}
但需要注意的是,需在 Packages/manifest.json
中 dependencies
同级下声明 scopedRegistries
:
"scopedRegistries":[
{
"name": "NPMJS",
"url": "https://registry.npmjs.org/",
"scopes": ["com.taptap"]
}
]
2. GitHub 接入
在项目的 Packages/manifest.json
文件中添加以下依赖:
"dependencies":{
"com.taptap.sdk.core":"https://github.com/taptap/tapsdk-unity-dist.git?path=/Core#4.8.2",
"com.taptap.sdk.login":"https://github.com/taptap/tapsdk-unity-dist.git?path=/Login#4.8.2",
"com.taptap.sdk.cloudsave":"https://github.com/taptap/tapsdk-unity-dist.git?path=/CloudSave#4.8.2",
}
说明:自 4.7.2 起,Unity Packages 仓库已统一为大仓
tapsdk-unity-dist
,所有包通过目录区分并使用?path=
指定子目录、#
指定版本标签。例如 Core 模块:"com.taptap.sdk.core": "https://github.com/taptap/tapsdk-unity-dist.git?path=/Core#4.7.2"
在 Unity 顶部菜单中选择 Window > Package Manager 可查看已经安装在项目中的包。
本地文件导入
- 在 下载页 下载下列模块对应
unitypackage
文件,并在 Unity 项目中依次通过 Assets > Import Packages > Custom Packages 进行导入,包括:
TapSDK_Core.unitypackage
TapTapSDK 核心模块,必选。TapSDK_Login.unitypackage
TapTapSDK 登录模块,必选。TapSDK_CloudSave.unitypackage
TapTapSDK 云存档模块,必选。
- 如果当前项目已集成
Newtonsoft.Json
依赖,则忽略该步骤,否则在NuGet.org
Newtonsoft.Json 页面中通过点击右侧 「Download package」 下载库文件,并将下载的文件后缀从.nupkg
修改为.zip
,同时解压该文件并复制内部的Newtonsoft.Json.dll
文件拷贝到工程Assets
的Plugins
目录下,另外为了避免导出 IL2CPP 平台时删除必要数据,需在Assets
目录下创建link.xml
文件(如果已有该文件,则添加如下内容),其内容如下:
<linker>
<assembly fullname="System.Core">
<type fullname="System.Linq.Expressions.Interpreter.LightLambda" preserve="all" />
</assembly>
</linker>
- 项目根目录的 build.gradle 添加仓库地址:
allprojects {
repositories {
google()
mavenCentral()
}
}
- app module 的 build.gradle 添加对应依赖:
dependencies {
implementation 'com.taptap.sdk:tap-core:4.8.2'
implementation 'com.taptap.sdk:tap-login:4.8.2'
implementation 'com.taptap.sdk:tap-cloudsave:4.8.2'
}
- 项目根目录的 build.gradle 添加仓库地址:
allprojects {
repositories {
google()
mavenCentral()
}
}
- app module 的 build.gradle 添加对应依赖:
dependencies {
implementation 'com.taptap.sdk:tap-core:4.8.2'
implementation 'com.taptap.sdk:tap-login:4.8.2'
implementation 'com.taptap.sdk:tap-cloudsave:4.8.2'
}
iOS 提供通过添加 cocoaPods 远程依赖和使用本地文件导入两种集成方式,推荐使用远程依赖方式。
远程依赖
- 在工程 Podfile 文件中对应模块下添加依赖:
pod 'TapTapCloudSaveSDK', '~> undefined'
- 执行
Pod install
下载对应依赖文件 - 将工程 Pods 目录下
TapTapLoginSDK/Frameworks/TapTapLoginResource.bundle
等资源文件导入工程中
本地文件依赖
云存档模块依赖于 Tap 登录模块,使用本地文件方式添加依赖时,需先参考 入门指南 和 TapTap 登录 添加对应本地文件依赖项。
- 在下载页下载如下文件:
TapTapCloudSaveSDK
云存档依赖库
- 在工程中添加
framework
静态库,注意添加时选择 Embed 方式为 Do Not Embed
iOS 提供通过添加 cocoaPods 远程依赖和使用本地文件导入两种集成方式,推荐使用远程依赖方式。
远程依赖
- 在工程 Podfile 文件中对应模块下添加依赖:
pod 'TapTapCloudSaveSDK', '~> undefined'
- 执行
Pod install
下载对应依赖文件 - 将工程 Pods 目录下
TapTapLoginSDK/Frameworks/TapTapLoginResource.bundle
等资源文件导入工程中
本地文件依赖
云存档模块依赖于 Tap 登录模块,使用本地文件方式添加依赖时,需先参考 入门指南 和 TapTap 登录 添加对应本地文件依赖项。
- 在下载页下载如下文件:
TapTapCloudSaveSDK
云存档依赖库
- 在工程中添加
framework
静态库,注意添加时选择 Embed 方式为 Do Not Embed
SDK 初始化
详见 TapTapSDK 初始化文档。
- Unity
- Android Java
- Android Kotlin
- iOS Swift
- iOS Objective-C
TapTapSdkOptions
详细参数见 入门指南#快速开始
using TapSDK.Core;
using TapSDK.CloudSave;
// 核心配置 详细参数见 [TapTapSDK]
TapTapSdkOptions coreOptions = new TapTapSdkOptions();
// TapSDK 初始化
TapTapSDK.Init(coreOptions, otherOptions);
TapTapSdkOptions
详细参数见 入门指南#快速开始
import com.taptap.sdk.core.TapTapRegion;
import com.taptap.sdk.core.TapTapSdk;
import com.taptap.sdk.core.TapTapSdkOptions;
/* 必选配置 */
// 开发者中心对应 Client ID
String clientId = "";
// 开发者中心对应 Client Token
String clientToken = "";
// 是否开启 log,建议 Debug 开启,Release 关闭,默认关闭 log
boolean enableLog = BuildConfig.DEBUG;
TapTapSdkOptions tapSdkOptions = new TapTapSdkOptions(
clientId, // 游戏 Client ID
clientToken, // 游戏 Client Token
TapTapRegion.CN // 游戏可玩区域: [TapTapRegion.CN]=国内 [TapTapRegion.GLOBAL]=海外
);
tapSdkOptions.setEnableLog(enableLog);
// 初始化 TapSDK
TapTapSdk.init(context, tapSdkOptions);
import com.taptap.sdk.core.TapTapSdk
import com.taptap.sdk.core.TapTapSdkOptions
import com.taptap.sdk.core.TapTapLanguage
import com.taptap.sdk.core.TapTapRegion
/* 必选配置 */
// 开发者中心对应 Client ID
val clientId = "";
// 开发者中心对应 Client Token
val clientToken = "";
// 是否开启 log,建议 Debug 开启,Release 关闭,默认关闭 log
val enableLog = BuildConfig.DEBUG;
TapTapSdk.init(
context = context,
sdkOptions = TapTapSdkOptions(
clientId = clientId,
clientToken = clientToken,
region = TapTapRegion.CN,
preferredLanguage = TapTapLanguage.ZH_HANS,
enableLog = false
)
)
import TapTapCloudSaveSDK
import TapTapCoreSDK
// 核心配置
let coreOptions = TapTapSdkOptions()
// TODO: coreOptions 配置
// 其他模块配置项
let otherOptions = []
// TapSDK 初始化
TapTapSDK.initWith(coreOptions, otherOptions: otherOptions)
#import "TapTapCoreSDK/TapTapSDK.h"
#import "TapTapCloudSaveSDK/TapTapCloudSaveSDK-Swift.h"
// 核心配置项
TapTapSdkOptions *options = [[TapTapSdkOptions alloc] init];
// TODO: 应用信息配置
// 其他模块配置项
NSArray *otherOptions = @[];
// TapSDK 初始化
[TapTapSDK initWithOptions:options otherOptions:otherOptions];
注册/注销统一状态码监听回调
统一状态回调,不同 code 代表不同的状态。
- Unity
- Android Java
- Android Kotlin
- iOS Swift
- iOS Objective-C
using TapSDK.CloudSave;
TapCloudSaveCallback callback = new TapCloudSaveCallback();
TapTapCloudSave.RegisterCloudSaveCallback(callback);
class TapCloudSaveCallback : ITapCloudSaveCallback
{
public TapCloudSaveCallback(){}
public void OnResult(int resultCode)
{
// 处理状态码
// 300001:需要登录
// 300002:初始化失败 需要重新初始化
}
}
import com.taptap.sdk.cloudsave.internal.TapCloudSaveCallback;
import com.taptap.sdk.cloudsave.TapTapCloudSave;
TapCloudSaveCallback callback = new TapCloudSaveCallback(){
@Override
public void onResult(int resultCode) {
// 处理云存档的状态码
// 300001:需要登录
// 300002:初始化失败 需重新初始化
}
};
TapTapCloudSave.registerCloudSaveCallback(callback);
import com.taptap.sdk.cloudsave.internal.TapCloudSaveCallback
import com.taptap.sdk.cloudsave.TapTapCloudSave
private val cloudSaveCallback = object : TapCloudSaveCallback {
override fun onResult(resultCode: Int) {
// 处理云存档的状态码
// 300001:需要登录
// 300002:初始化失败 需重新初始化
}
}
TapTapCloudSave.registerCloudSaveCallback(cloudSaveCallback)
import TapTapCloudSaveSDK
class CloudSaveCallbackImpl: NSObject, TapTapCloudSaveCallback {
override init() {}
func onResult(_ resultCode: Int) {
// 处理云存档的状态码
// 300001:需要登录
// 300002:初始化失败 需重新初始化
}
}
let callback = CloudSaveCallbackImpl()
TapTapCloudSave.registerCloudSaveCallback(callback)
// 不需要接收回调时调用接口移除之前设置的回调对象
TapTapCloudSave.unregisterCloudSaveCallback(callback)
#import "TapTapCloudSaveSDK/TapTapCloudSaveSDK-Swift.h"
@interface GameMainController () <TapTapCloudSaveCallback>
@end
@implementation GameMainController
- (void)handleCloudSaveCallback {
//注册回调
[TapTapCloudSave registerCloudSaveCallbackWithCallback:self];
// 不需要接收回调时调用接口移除之前设置的回调对象
[TapTapCloudSave unregisterCloudSaveCallbackWithCallback:self];
}
- (void)onResultWithResultCode:(NSInteger)resultCode {
// 处理云存档的状态码
// 300001:需要登录
// 300002:初始化失败 需重新初始化
}
创建存档
创建游戏存档并上传云端。
存档名称仅支持【英文/数字/下划线/中划线】,不支持中文
存档摘要 (summary) 以及额外信息 (extra) 无此限制
一分钟内仅可调用一次(与更新存档共享冷却时间)
- Unity
- Android Java
- Android Kotlin
- iOS Swift
- iOS Objective-C
using System.Threading.Tasks;
using TapSDK.Core;
using TapSDK.CloudSave;
// 存档元信息
ArchiveMetadata metadata = new ArchiveMetadata(
archiveName: "存档名称",
archiveSummary: "存档描述",
archiveExtra: "额外信息",
archivePlaytime: 0 // 创建时间
);
// 存档文件路径(单个存档文件大小不超过10MB)
string archiveFilePath = "path/to/archive/file";
// 存档封面路径(可选,封面大小不超过512KB)
string archiveCoverPath = "path/to/cover/image";
try
{
ArchiveData archive = await TapTapCloudSave.CreateArchive(metadata, archiveFilePath, archiveCoverPath);
// 处理存档创建成功
}
catch (TapException ex)
{
// 处理错误,可使用 ex.Code 与 ex.Message
}
import com.taptap.sdk.cloudsave.TapTapCloudSave;
import com.taptap.sdk.cloudsave.internal.TapCloudSaveRequestCallback;
import com.taptap.sdk.cloudsave.internal.model.ArchiveMetadata;
import com.taptap.sdk.cloudsave.internal.model.ArchiveData;
// 存档元信息
ArchiveMetadata metadata = new ArchiveMetadata.Builder()
.setName("存档名称")
.setSummary("存档描述")
.setExtra("额外信息")
.setPlaytime(0)
.build();
// 存档文件路径(单个存档文件大小不超过10MB)
String archiveFilePath = "path/to/archive/file";
// 存档封面路径(可选,封面大小不超过512KB)
String archiveCoverPath = "path/to/cover/image";
// 请求回调
TapCloudSaveRequestCallback callback = new TapCloudSaveRequestCallback() {
@Override
public void onRequestError(int errorCode, @NonNull String errorMessage) {
// 处理请求错误
}
@Override
public void onArchiveCreated(@NonNull ArchiveData archive) {
// 处理存档创建成功
}
};
TapTapCloudSave.createArchive(metadata, archiveFilePath, archiveCoverPath, callback);
import com.taptap.sdk.cloudsave.TapTapCloudSave
import com.taptap.sdk.cloudsave.internal.TapCloudSaveRequestCallback
import com.taptap.sdk.cloudsave.internal.model.ArchiveMetadata
import com.taptap.sdk.cloudsave.internal.model.ArchiveData
// 存档元信息
val metadata = ArchiveMetadata.Builder()
.setName("存档名称")
.setSummary("存档描述")
.setExtra("额外信息")
.setPlaytime(0)
.build()
// 存档文件路径(单个存档文件大小不超过10MB)
val archiveFilePath = "path/to/archive/file"
// 存档封面路径(可选,封面大小不超过512KB)
val archiveCoverPath = "path/to/cover/image"
// 请求回调
val callback = object : TapCloudSaveRequestCallback() {
override fun onRequestError(errorCode: Int, errorMessage: String) {
// 处理请求错误
}
override fun onArchiveCreated(archive: ArchiveData) {
// 处理存档创建成功
}
}
TapTapCloudSave.createArchive(metadata, archiveFilePath, archiveCoverPath, callback)
import TapTapCloudSaveSDK
// 存档元信息
let metadata = ArchiveMetadata(
name: "存档名称",
summary: "存档描述",
extra: "额外信息",
playtime: 0
)
// 存档文件路径(单个存档文件大小不超过10MB)
let archiveFilePath = "path/to/archive/file"
// 存档封面路径(可选,封面大小不超过512KB)
let archiveCoverPath = "path/to/cover/image"
// 请求回调
class CloudSaveRequestCallback: NSObject, TapTapCloudSaveRequestCallback {
func onRequestError(errorCode: Int, errorMessage: String) {
// 处理请求错误
}
func onArchiveCreated(archive: ArchiveData) {
// 处理存档创建成功
}
}
let callback = CloudSaveRequestCallback()
TapTapCloudSave.createArchive(
archiveMetadata: metadata,
archiveFilePath: archiveFilePath,
archiveCoverPath: archiveCoverPath,
callback: callback
)
#import "TapTapCloudSaveSDK/TapTapCloudSaveSDK-Swift.h"
// 存档元信息
ArchiveMetadata *metadata = [[ArchiveMetadata alloc] initWithName:@"存档名称"
summary:@"存档描述"
extra:@"额外信息"
playtime:0];
// 存档文件路径(单个存档文件大小不超过10MB)
NSString *archiveFilePath = @"path/to/archive/file";
// 存档封面路径(可选,封面大小不超过512KB)
NSString *archiveCoverPath = @"path/to/cover/image";
// 请求回调
id<TapTapCloudSaveRequestCallback> callback = // 实现回调协议
[TapTapCloudSave createArchiveWithArchiveMetadata:metadata
archiveFilePath:archiveFilePath
archiveCoverPath:archiveCoverPath
callback:callback];
获取存档列表
获取当前用户的存档列表。
- Unity
- Android Java
- Android Kotlin
- iOS Swift
- iOS Objective-C
using System.Collections.Generic;
using System.Threading.Tasks;
using TapSDK.Core;
using TapSDK.CloudSave;
try
{
List<ArchiveData> archives = await TapTapCloudSave.GetArchiveList();
// 处理存档列表
}
catch (TapException ex)
{
// 处理错误,可使用 ex.Code 与 ex.Message
}
import com.taptap.sdk.cloudsave.TapTapCloudSave;
import com.taptap.sdk.cloudsave.internal.TapCloudSaveRequestCallback;
TapCloudSaveRequestCallback callback = new TapCloudSaveRequestCallback() {
@Override
public void onArchiveListResult(@NonNull List<ArchiveData> archiveList) {
// 处理存档列表
}
@Override
public void onRequestError(int errorCode, @NotNull String errorMessage) {
// 处理请求错误
}
};
TapTapCloudSave.getArchiveList(callback);
import com.taptap.sdk.cloudsave.TapTapCloudSave
import com.taptap.sdk.cloudsave.internal.TapCloudSaveRequestCallback
val callback = object : TapCloudSaveRequestCallback() {
override fun onArchiveListResult(archiveList: List<ArchiveData>) {
// 处理存档列表
}
override fun onRequestError(errorCode: Int, errorMessage: String) {
// 处理请求错误
}
}
TapTapCloudSave.getArchiveList(callback)
import TapTapCloudSaveSDK
class CloudSaveRequestCallback: NSObject, TapTapCloudSaveRequestCallback {
func onArchiveListResult(archives: [ArchiveData]) {
// 处理存档列表
}
func onRequestError(errorCode: Int, errorMessage: String) {
// 处理请求错误
}
}
let callback = CloudSaveRequestCallback()
TapTapCloudSave.getArchiveList(callback: callback)
#import "TapTapCloudSaveSDK/TapTapCloudSaveSDK-Swift.h"
id<TapTapCloudSaveRequestCallback> callback = // 实现回调协议
[TapTapCloudSave getArchiveListWithCallback:callback];
下载存档
下载指定的存档文件。
- Unity
- Android Java
- Android Kotlin
- iOS Swift
- iOS Objective-C
using System.Threading.Tasks;
using TapSDK.Core;
using TapSDK.CloudSave;
// 存档UUID
string archiveUuid = "archive_uuid";
// 存档文件ID
string archiveFileId = "archive_file_id";
try
{
byte[] data = await TapTapCloudSave.GetArchiveData(archiveUuid, archiveFileId);
// 处理下载的存档数据
}
catch (TapException ex)
{
// 处理错误,可使用 ex.Code 与 ex.Message
}
import com.taptap.sdk.cloudsave.TapTapCloudSave;
import com.taptap.sdk.cloudsave.internal.TapCloudSaveRequestCallback;
// 存档UUID
String archiveUuid = "archive_uuid";
// 存档文件ID
String archiveFileId = "archive_file_id";
TapCloudSaveRequestCallback callback = new TapCloudSaveRequestCallback() {
@Override
public void onArchiveDataResult(@NonNull byte[] archiveData) {
// 处理下载的存档数据
}
@Override
public void onRequestError(int errorCode, @NotNull String errorMessage) {
// 处理请求错误
}
};
TapTapCloudSave.getArchiveData(archiveUuid, archiveFileId, callback);
import com.taptap.sdk.cloudsave.TapTapCloudSave
import com.taptap.sdk.cloudsave.internal.TapCloudSaveRequestCallback
// 存档UUID
val archiveUuid = "archive_uuid"
// 存档文件ID
val archiveFileId = "archive_file_id"
val callback = object : TapCloudSaveRequestCallback() {
override fun onArchiveDataResult(archiveData: ByteArray) {
// 处理下载的存档数据
}
override fun onRequestError(errorCode: Int, errorMessage: String) {
// 处理请求错误
}
}
TapTapCloudSave.getArchiveData(archiveUuid, archiveFileId, callback)
import TapTapCloudSaveSDK
// 存档UUID
let archiveUuid = "archive_uuid"
// 存档文件ID
let archiveFileId = "archive_file_id"
class CloudSaveRequestCallback: NSObject, TapTapCloudSaveRequestCallback {
func onArchiveDataResult(archiveUUID: String, archiveFileID: String, data: Data) {
// 处理下载的 存档数据
}
func onRequestError(errorCode: Int, errorMessage: String) {
// 处理请求错误
}
}
let callback = CloudSaveRequestCallback()
TapTapCloudSave.getArchiveData(
archiveUUID: archiveUuid,
archiveFileID: archiveFileId,
callback: callback
)
#import "TapTapCloudSaveSDK/TapTapCloudSaveSDK-Swift.h"
// 存档UUID
NSString *archiveUuid = @"archive_uuid";
// 存档文件ID
NSString *archiveFileId = @"archive_file_id";
id<TapTapCloudSaveRequestCallback> callback = // 实现回调协议
[TapTapCloudSave getArchiveDataWithArchiveUUID:archiveUuid
archiveFileID:archiveFileId
callback:callback];
更新存档
更新指定的存档文件。
存档名称仅支持【英文/数字/下划线/中划线】,不支持中文
存档摘要 (summary) 以及额外信息 (extra) 无此限制
一分钟内仅可调用一次(与创建存档共享冷却时间)
- Unity
- Android Java
- Android Kotlin
- iOS Swift
- iOS Objective-C
using System.Threading.Tasks;
using TapSDK.Core;
using TapSDK.CloudSave;
// 存档UUID
string archiveUuid = "archive_uuid";
// 存档元信息
ArchiveMetadata metadata = new ArchiveMetadata(
archiveName: "更新后的存档名称",
archiveSummary: "更新后的存档描述",
archiveExtra: "额外信息",
archivePlaytime: 0 // 创建时间
);
// 新的存档文件路径(单个存档文件大小不超过10MB)
string archiveFilePath = "path/to/new/archive/file";
// 新的存档封面路径(可选,封面大小不超过512KB)
string archiveCoverPath = "path/to/new/cover/image";
using System.Threading.Tasks;
using TapSDK.Core;
try
{
ArchiveData updated = await TapTapCloudSave.UpdateArchive(archiveUuid, metadata, archiveFilePath, archiveCoverPath);
// 处理存档更新成功
}
catch (TapException ex)
{
// 处理错误,可使用 ex.Code 与 ex.Message
}
import com.taptap.sdk.cloudsave.TapTapCloudSave;
import com.taptap.sdk.cloudsave.internal.TapCloudSaveRequestCallback;
// 存档UUID
String archiveUuid = "archive_uuid";
// 存档元信息
ArchiveMetadata metadata = new ArchiveMetadata.Builder()
.setName("更新后的存档名称")
.setSummary("更新后的存档描述")
.setExtra("额外信息")
.setPlaytime(0)
.build();
// 新的存档文件路径(单个存档文件大小不超过10MB)
String archiveFilePath = "path/to/new/archive/file";
// 新的存档封面路径(可选,封面大小不超过512KB)
String archiveCoverPath = "path/to/new/cover/image";
TapCloudSaveRequestCallback callback = new TapCloudSaveRequestCallback() {
@Override
public void onArchiveUpdated(@NonNull ArchiveData archive) {
// 处理存档更新成功
}
@Override
public void onRequestError(int errorCode, @NotNull String errorMessage) {
// 处理请求错误
}
};
TapTapCloudSave.updateArchive(archiveUuid, metadata, archiveFilePath, archiveCoverPath, callback);
import com.taptap.sdk.cloudsave.TapTapCloudSave
import com.taptap.sdk.cloudsave.internal.TapCloudSaveRequestCallback
// 存档UUID
val archiveUuid = "archive_uuid"
// 存档元信息
val metadata = ArchiveMetadata.Builder()
.setName("更新后的存档名称")
.setSummary("更新后的存档描述")
.setExtra("额外信息")
.setPlaytime(0)
.build()
// 新的存档文件路径(单个存档文件大小不超过10MB)
val archiveFilePath = "path/to/new/archive/file"
// 新的存档封面路径(可选,封面大小不超过512KB)
val archiveCoverPath = "path/to/new/cover/image"
val callback = object : TapCloudSaveRequestCallback() {
override fun onArchiveUpdated(archive: ArchiveData) {
// 处理存档更新成功
}
override fun onRequestError(errorCode: Int, errorMessage: String) {
// 处理请求错误
}
}
TapTapCloudSave.updateArchive(archiveUuid, metadata, archiveFilePath, archiveCoverPath, callback)
import TapTapCloudSaveSDK
// 存档UUID
let archiveUuid = "archive_uuid"
// 存档元信息
let metadata = ArchiveMetadata(
name: "更新后的存档名称",
summary: "更新后的存档描述",
extra: "额外信息",
playtime: 0
)
// 新的存档文件路径(单个存档文件大小不超过10MB)
let archiveFilePath = "path/to/new/archive/file"
// 新的存档封面路径(可选,封面大小不超过512KB)
let archiveCoverPath = "path/to/new/cover/image"
class CloudSaveRequestCallback: NSObject, TapTapCloudSaveRequestCallback {
func onArchiveUpdated(archive: ArchiveData) {
// 处理存档更新成功
}
func onRequestError(errorCode: Int, errorMessage: String) {
// 处理请求错误
}
}
let callback = CloudSaveRequestCallback()
TapTapCloudSave.updateArchive(
archiveUUID: archiveUuid,
archiveMetadata: metadata,
archiveFilePath: archiveFilePath,
archiveCoverPath: archiveCoverPath,
callback: callback
)
#import "TapTapCloudSaveSDK/TapTapCloudSaveSDK-Swift.h"
// 存档UUID
NSString *archiveUuid = @"archive_uuid";
// 存档元信息
ArchiveMetadata *metadata = [[ArchiveMetadata alloc] initWithName:@"更新后的存档名称"
summary:@"更新后的存档描述"
extra:@"额外信息"
playtime:0];
// 新的存档文件路径(单个存档文件大小不超过10MB)
NSString *archiveFilePath = @"path/to/new/archive/file";
// 新的存档封面路径(可选,封面大小不超过512KB)
NSString *archiveCoverPath = @"path/to/new/cover/image";
id<TapTapCloudSaveRequestCallback> callback = // 实现回调协议
[TapTapCloudSave updateArchiveWithArchiveUUID:archiveUuid
archiveMetadata:metadata
archiveFilePath:archiveFilePath
archiveCoverPath:archiveCoverPath
callback:callback];
删除存档
删除指定的存档文件。
- Unity
- Android Java
- Android Kotlin
- iOS Swift
- iOS Objective-C
using System.Threading.Tasks;
using TapSDK.Core;
using TapSDK.CloudSave;
// 存档UUID
string archiveUuid = "archive_uuid";
try
{
ArchiveData deleted = await TapTapCloudSave.DeleteArchive(archiveUuid);
// 处理存档删除成功
}
catch (TapException ex)
{
// 处理错误,可使用 ex.Code 与 ex.Message
}
import com.taptap.sdk.cloudsave.TapTapCloudSave;
import com.taptap.sdk.cloudsave.internal.TapCloudSaveRequestCallback;
// 存档UUID
String archiveUuid = "archive_uuid";
TapCloudSaveRequestCallback callback = new TapCloudSaveRequestCallback() {
@Override
public void onArchiveDeleted(@NonNull ArchiveData archive) {
// 处理存档删除成功
}
@Override
public void onRequestError(int errorCode, @NotNull String errorMessage) {
// 处理请求错误
}
};
TapTapCloudSave.deleteArchive(archiveUuid, callback);
import com.taptap.sdk.cloudsave.TapTapCloudSave
import com.taptap.sdk.cloudsave.internal.TapCloudSaveRequestCallback
// 存档UUID
val archiveUuid = "archive_uuid"
val callback = object : TapCloudSaveRequestCallback() {
override fun onArchiveDeleted(archive: ArchiveData) {
// 处理存档删除成功
}
override fun onRequestError(errorCode: Int, errorMessage: String) {
// 处理请求错误
}
}
TapTapCloudSave.deleteArchive(archiveUuid, callback)
import TapTapCloudSaveSDK
// 存档UUID
let archiveUuid = "archive_uuid"
class CloudSaveRequestCallback: NSObject, TapTapCloudSaveRequestCallback {
func onArchiveDeleted(archive: ArchiveData) {
// 处理存档删除成功
}
func onRequestError(errorCode: Int, errorMessage: String) {
// 处理请求错误
}
}
let callback = CloudSaveRequestCallback()
TapTapCloudSave.deleteArchive(archiveUUID: archiveUuid, callback: callback)
#import "TapTapCloudSaveSDK/TapTapCloudSaveSDK-Swift.h"
// 存档UUID
NSString *archiveUuid = @"archive_uuid";
id<TapTapCloudSaveRequestCallback> callback = // 实现回调协议
[TapTapCloudSave deleteArchiveWithArchiveUUID:archiveUuid callback:callback];
获取存档封面
获取指定存档的封面图片。
- Unity
- Android Java
- Android Kotlin
- iOS Swift
- iOS Objective-C
using System.Threading.Tasks;
using TapSDK.Core;
using TapSDK.CloudSave;
// 存档UUID
string archiveUuid = "archive_uuid";
// 存档文件ID
string archiveFileId = "archive_file_id";
try
{
byte[] cover = await TapTapCloudSave.GetArchiveCover(archiveUuid, archiveFileId);
// 处理封面数据
}
catch (TapException ex)
{
// 处理错误,可使用 ex.Code 与 ex.Message
}
import com.taptap.sdk.cloudsave.TapTapCloudSave;
import com.taptap.sdk.cloudsave.internal.TapCloudSaveRequestCallback;
// 存档UUID
String archiveUuid = "archive_uuid";
// 存档文件ID
String archiveFileId = "archive_file_id";
TapCloudSaveRequestCallback callback = new TapCloudSaveRequestCallback() {
@Override
public void onArchiveCoverResult(@NonNull byte[] coverData) {
// 处理封面数据
}
@Override
public void onRequestError(int errorCode, @NotNull String errorMessage) {
// 处理请求错误
}
};
TapTapCloudSave.getArchiveCover(archiveUuid, archiveFileId, callback);
import com.taptap.sdk.cloudsave.TapTapCloudSave
import com.taptap.sdk.cloudsave.internal.TapCloudSaveRequestCallback
// 存档UUID
val archiveUuid = "archive_uuid"
// 存档文件ID
val archiveFileId = "archive_file_id"
val callback = object : TapCloudSaveRequestCallback() {
override fun onArchiveCoverResult(coverData: ByteArray) {
// 处理封面数据
}
override fun onRequestError(errorCode: Int, errorMessage: String) {
// 处理请求错误
}
}
TapTapCloudSave.getArchiveCover(archiveUuid, archiveFileId, callback)
import TapTapCloudSaveSDK
// 存档UUID
let archiveUuid = "archive_uuid"
// 存档文件ID
let archiveFileId = "archive_file_id"
class CloudSaveRequestCallback: NSObject, TapTapCloudSaveRequestCallback {
func onArchiveCoverResult(archiveUUID: String, archiveFileID: String, coverData: Data) {
// 处理封面数据
}
func onRequestError(errorCode: Int, errorMessage: String) {
// 处理请求错误
}
}
let callback = CloudSaveRequestCallback()
TapTapCloudSave.getArchiveCover(
archiveUUID: archiveUuid,
archiveFileID: archiveFileId,
callback: callback
)
#import "TapTapCloudSaveSDK/TapTapCloudSaveSDK-Swift.h"
// 存档UUID
NSString *archiveUuid = @"archive_uuid";
// 存档文件ID
NSString *archiveFileId = @"archive_file_id";
id<TapTapCloudSaveRequestCallback> callback = // 实现回调协议
[TapTapCloudSave getArchiveCoverWithArchiveUUID:archiveUuid
archiveFileID:archiveFileId
callback:callback];
结果码说明
结果码 | 说明 |
---|---|
300001 | 需要登录 |
300002 | 初始化失败,需要重新初始化 |
请求错误码
用于 onRequestError(errorCode, errorMessage)
回调中的 errorCode
。
错误码 | 说明 |
---|---|
400000 | 非法的存档文件/封面大小 |
400001 | 存档上传频率超限 |
400002 | 指定的存档不存在 |
400003 | 单个应用下存档数量超限 |
400004 | 单个应用下使用存储空间超限 |
400005 | 总使用存储空间超限 |
400006 | 非法的操作令牌,通常是由于网络卡顿,创建/更新存档耗时过长导致 |
400007 | 不允许并发调用 |
400008 | 找不到可用的 OSS 供应商 |
400009 | 存档名称不合法 |
国际化
TapTapCloudSave 支持设置语言:目前只支持简体中文