From 2d4fe2ece12abc62f1315f924dbabec42737ba19 Mon Sep 17 00:00:00 2001 From: ci-gitlab Date: Thu, 30 Mar 2023 15:28:25 +0800 Subject: [PATCH] feat:update upm --- CHANGELOG.md | 260 ++++++++++++++++++++++++ CHANGELOG.md.meta | 3 + Documentation.meta | 8 + Documentation/README.md | 257 +++++++++++++++++++++++ Documentation/README.md.meta | 7 + Plugins.meta | 8 + Plugins/TapTap.Bootstrap.deps.json | 233 +++++++++++++++++++++ Plugins/TapTap.Bootstrap.deps.json.meta | 7 + Plugins/TapTap.Bootstrap.dll | Bin 0 -> 35328 bytes Plugins/TapTap.Bootstrap.dll.meta | 33 +++ Plugins/TapTap.Bootstrap.pdb | Bin 0 -> 16316 bytes Plugins/TapTap.Bootstrap.pdb.meta | 7 + README.md | 254 +++++++++++++++++++++++ README.md.meta | 3 + VERSIONNOTE.md | 0 VERSIONNOTE.md.meta | 7 + package.json | 14 ++ package.json.meta | 7 + 18 files changed, 1108 insertions(+) create mode 100644 CHANGELOG.md create mode 100644 CHANGELOG.md.meta create mode 100644 Documentation.meta create mode 100644 Documentation/README.md create mode 100644 Documentation/README.md.meta create mode 100644 Plugins.meta create mode 100644 Plugins/TapTap.Bootstrap.deps.json create mode 100644 Plugins/TapTap.Bootstrap.deps.json.meta create mode 100644 Plugins/TapTap.Bootstrap.dll create mode 100644 Plugins/TapTap.Bootstrap.dll.meta create mode 100644 Plugins/TapTap.Bootstrap.pdb create mode 100644 Plugins/TapTap.Bootstrap.pdb.meta create mode 100644 README.md create mode 100644 README.md.meta create mode 100644 VERSIONNOTE.md create mode 100644 VERSIONNOTE.md.meta create mode 100644 package.json create mode 100644 package.json.meta diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..9fea556 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,260 @@ +# ChangeLog +## 3.11.1 +- TapTap.Login v3.11.1 +- TapTap.Common v3.11.1 +- LeanCloud.Realtime v0.10.11 +- LeanCloud.Storage v0.10.11 + +## 3.11.0 + +### Dependencies + +- TapTap.Login v3.11.0 +- TapTap.Common v3.11.0 +- LeanCloud.Realtime v0.10.11 +- LeanCloud.Storage v0.10.11 + +## 3.10.0 + +### New Feature +- 支持排行榜 + +### Dependencies + +- TapTap.Login v3.10.0 +- TapTap.Common v3.10.0 +- LeanCloud.Realtime v0.10.11 +- LeanCloud.Storage v0.10.11 + +## 3.9.0 + +### Dependencies + +- TapTap.Login v3.9.0 +- TapTap.Common v3.9.0 +- LeanCloud.Realtime v0.10.11 +- LeanCloud.Storage v0.10.11 + +## 3.8.0 + +### Dependencies + +- TapTap.Login v3.8.0 +- TapTap.Common v3.8.0 +- LeanCloud.Realtime v0.10.10 +- LeanCloud.Storage v0.10.10 + +## 3.7.1 + +### Dependencies + +- TapTap.Login v3.7.1 +- TapTap.Common v3.7.1 +- LeanCloud.Realtime v0.10.0 +- LeanCloud.Storage v0.10.0 + +## 3.7.0 + +### Dependencies + +- TapTap.Login v3.7.0 +- TapTap.Common v3.7.0 +- LeanCloud.Realtime v0.10.0 +- LeanCloud.Storage v0.10.0 + + +## 3.6.3 + +### Dependencies + +- TapTap.Login v3.6.3 +- TapTap.Common v3.6.3 +- LeanCloud.Realtime v0.10.0 +- LeanCloud.Storage v0.10.0 + +## 3.6.1 + +### Dependencies + +- TapTap.Login v3.6.1 +- TapTap.Common v3.6.1 +- LeanCloud.Realtime v0.10.0 +- LeanCloud.Storage v0.10.0 + +## 3.6.0 + +### Dependencies + +- TapTap.Login v3.6.0 +- TapTap.Common v3.6.0 +- LeanCloud.Realtime v0.10.0 +- LeanCloud.Storage v0.10.0 + +## 3.5.0 + +### Dependencies + +- TapTap.Login v3.5.0 +- TapTap.Common v3.5.0 +- LeanCloud.Realtime v0.10.0 +- LeanCloud.Storage v0.10.0 + +## 3.4.0 + +### Dependencies + +- TapTap.Login v3.4.0 +- TapTap.Common v3.4.0 +- LeanCloud.Realtime v0.10.0 +- LeanCloud.Storage v0.10.0 + +## 3.3.0 + +### Dependencies + +- TapTap.Login v3.3.0 +- TapTap.Common v3.3.0 +- LeanCloud.Realtime v0.9.11 +- LeanCloud.Storage v0.9.11 + +## 3.2.0 + +### New Feature + +- 支持云存档 + +### Dependencies + +- TapTap.Login v3.2.0 +- TapTap.Common v3.2.0 +- LeanCloud.Storage v0.9.5 +- LeanCloud.Realtime v0.9.5 + +## 3.1.0 + +### New Feature + +- `TDSUser` 新增好友系统操作 + +### Dependencies + +- TapTap.Login v3.1.0 +- TapTap.Common v3.1.0 +- LeanCloud.Storage v0.9.2 +- LeanCloud.Realtime v0.9.2 + +## 3.0.0 + +TapSDK 3.0 开始,我们在单纯的 TapTap 登录之外,还提供了一个内建账户系统供游戏使用:开发者可以直接用 TapTap OAuth +授权的结果生成一个游戏内的账号(TDSUser),然后用该账号保存更多玩家数据。同时,我们也支持将更多第三方认证登录的结果绑定到这一账号上来(以及后续的解绑操作)。 + +### New Feature + +- 新增 `TDSUser` 用于内建账户系统操作 + +### BreakingChange + +- `TapBootstrap` 接口仅保留 `TapBootstrap.Init(tapConfig)` 接口 + +### Dependencies + +- LeanCloud.Storage v0.8.2 +- TapTap.Login v3.0.0 +- TapTap.Common v3.0.0 + +## 2.1.7 + +### Dependencies + +- TapTap.Common v2.1.7 + +## 2.1.6 + +### Dependencies + +- TapTap.Common v2.1.6 + +## 2.1.5 + +### Dependencies + +- TapTap.Common v2.1.5 + +## 2.1.4 + +### Optimization and fixed bugs + +- 优化多语言相关 + +### Dependencies + +- TapTap.Common v2.1.4 + +## 2.1.3 + +### Feature + +* 新增繁中、日文、韩文、泰文和印尼语多语言配置 + +## 2.1.2 + +### BreakingChange + +* 废弃 OpenUserCenter 接口 + +### Dependencies + +* TapTap.Common v2.1.2 + +## 2.1.1 + +### Feature + +* 新增篝火测试资格校验 + ``` + TapBootstrap.GetTestQualification((bool, error)=>{ }): + ``` +* 通过 TapConfig 进行初始化配置 + * 新增 TapDBConfig 用于 TapDB 初始化配置 + * 新增 ClientSecret 用于 TapSDK 初始化 + ```c# + //建议使用以下 TapConfig 构造方法进行初始化 + var config = new TapConfig.Builder() + .ClientID("client_id") + .ClientSecret("client_secret") + .RegionType(RegionType.CN) + .TapDBConfig(true, "gameChannel", "gameVersion", true) + .ConfigBuilder(); + TapBootstrap.Init(config); + ``` + +### Breaking changes + +* LoginType 删除 Apple、Guest 登陆方式 +* TDS-Info.plist 删除 Apple_SignIn_Enable 配置 +* 废弃 Bind 接口 +* TapConfig 构造方法参数修改 + +### Dependencies + +* TapTap.Common v2.1.1 + +## 2.1.0 + +### Feature + +* 支持性改动用于 TapTap.Friends + +### Dependencies + +* TapTap.Common v2.1.0 + +## 2.0.0 + +### Feature + +* TapTap Bootstrap + +### Dependencies + +* TapTap.Common v2.0.0 \ No newline at end of file diff --git a/CHANGELOG.md.meta b/CHANGELOG.md.meta new file mode 100644 index 0000000..419383c --- /dev/null +++ b/CHANGELOG.md.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7388165be5344a9682382768c5fce466 +timeCreated: 1616755935 \ No newline at end of file diff --git a/Documentation.meta b/Documentation.meta new file mode 100644 index 0000000..1130a03 --- /dev/null +++ b/Documentation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bd03b50332353477c899419b5b455fb0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/README.md b/Documentation/README.md new file mode 100644 index 0000000..2564c0c --- /dev/null +++ b/Documentation/README.md @@ -0,0 +1,257 @@ +# 使用 TapTap.Bootstrap + +## 使用前提 + +使用 TapTap.Bootstrap 前提是必须依赖以下库: +* [TapTap.Common](https://github.com/TapTap/TapCommon-Unity.git) +* [TapTap.Login](https://github.com/TapTap/TapLogin-Unity.git) +* [LeanCloud.Storage](https://github.com/leancloud/csharp-sdk) +* [LeanCloud.RealTime](https://github.com/leancloud/csharp-sdk) + +## 命名空间 + +```c# +using TapTap.Bootstrap; +``` + +## 接口描述 + +## 1.初始化 + +TapBootstrap 会根据 TapConfig 中的 TapDBConfig 配置来进行 TapDB 的自动初始化。 + +### 开启 TapDB +```c# +var config = new TapConfig.Builder() + .ClientID("client_id") + .ClientToken("client_token") + .ServerURL("https://ikggdre2.lc-cn-n1-shared.com") + .RegionType(RegionType.CN) + .TapDBConfig(true,"channel","gameVersion",true) + .Builder(); +``` +### 关闭 TapDB +```c# +var config = new TapConfig.Builder() + .ClientID("client_id") + .ClientToken("client_token") + .ServerURL("https://ikggdre2.lc-cn-n1-shared.com") + .RegionType(RegionType.CN) +//# .TapDBConfig(false,null,null,false) + .EnableTapDB(false) + .Builder(); +``` +### 初始化 +```c# +TapBootstrap.Init(config); +``` + +## 2.账户系统 + +> 登陆成功之后,都会得到一个 `TDSUser` 实例 + +### 使用 TapTap OAuth 授权结果直接登陆/注册账户系统 + +```c# +var tdsUser = await TDSUser.LoginWithTapTap(); +``` + +### 游客登陆 + +```c# +var tdsUser = await TDSUser.LoginAnonymously(); +``` + +### 使用第三方平台授权登录/注册账户 + +```c# +var tdsUser = await TDSUser.LoginWithAuthData(Dictionary authData, string platform, +LCUserAuthDataLoginOption option = null); +``` + +### 绑定第三方平台授权 + +```c# +await TDSUser.AssociateAuthData(Dictionary authData, string platform); +``` + +### 退出登陆 + +```c# +TDSUser.Logout(); +``` + +## 3.好友系统 + +### 申请成为好友 + +```c# +TDSUser tom, jerry; +await tom.ApplyFriendship(jerry); +``` +申请成功的回调中,我们会得到一个 LCFriendshipRequest 的实例,这个实例中包含了两个用户: +- sourceUser,指请求的发起方,上面的例子中就是 `tom`。 +- friend,指请求的目的方,上面的例子中就是 `jerry`。 + +tom 也可以在申请好友的时候,添加更多的属性,例如 tom 希望加 jerry 为好友的时候,也设定一个名为 cat 的圈子,可以这样操作: + +```cs +Dictionary attrs = new Dictionary { + { "group", "cat" } +}; +await tom.ApplyFriendship(jerry, attrs); +``` + +### 获取好友申请列表 +好友申请有三种状态: + +- `pending`,对方没有回应,还处于等待中。 +- `accepted`,对方已经接受,现在双方成为好友。 +- `declined`,对方已经拒绝。 + +好友请求创建之后默认是 `pending` 状态。 + +jerry 这里可以通过 `friendshipRequestQuery` 来查找不同状态的请求。例如 jerry 想看看新的好友请求,可以这样操作: + +```cs +LCQuery query = jerry.GetFriendshipRequestQuery(LCFriendshipRequest.STATUS_PENDING, false, true); +ReadOnlyCollection reqs = await query.Find(); +foreach (LCFriendshipRequest req in reqs) { + Console.WriteLine(req); +} +``` + +### 处理好友申请 + +jerry 对于新的好友请求,可以同意或者拒绝,也可以什么都不做,无视这些请求,甚至直接删除。这些操作我们都是支持的,请看下面的示例: + +```cs +LCFriendshipRequest tomRequest, tuffyRequest, otherRequest; +await jerry.AcceptFriendshipRequest(tomRequest); +await jerry.DeclineFriendshipRequest(tuffyRequest); +await jerry.DeleteFriendshipRequest(otherRequest); +``` + +注意: +* 在 jerry 拒绝了 tom 的好友请求之后,如果 tom 再次请求成为 jerry 的好友,tom 在执行 applyFriendshipInBackground 时会直接得到错误的应答,表明 jerry 不想和 ta 成为好友。 +* jerry 同意了 tuffy 的好友请求之后,它们就成为了好友,之后两个人中任何一人再次调用 applyFriendshipInBackground 申请横位好友时,也会直接得到错误的应答,表明它们已经是好友无需再次申请。 +* jerry 删除陌生人的好友请求后,对方还可以再次发起请求。 + +### 响应好友变化通知 + +TDS 好友模块支持客户端监听好友状态变化,在游戏中实时给玩家提示。好友状态变化的接口包括 + +```cs +public class FriendshipNotification { + public Action OnNewRequestComing { get; set; } + public Action OnRequestAccepted { get; set; } + public Action OnRequestDeclined { get; set; } +} +``` + +其中: +- onNewRequestComing 表示有其他人申请成为当前用户的好友,通过调用 `LCFriendshipRequest#getSourceUser()` 方法可以获得发起方用户信息。 +- onRequestAccepted 表示当前用户的好友申请被对方通过,通过调用 `LCFriendshipRequest#getFriend()` 方法可以获得对方用户信息。 +- onRequestDeclined 表示当前用户的好友申请被对方拒绝,通过调用 `LCFriendshipRequest#getFriend()` 方法可以获得对方用户信息。 + +开发者可以通过 `TDSUser#registerFriendshipNotification` 来注册通知接收器,通过调用 `TDSUser#unregisterFriendshipNotification` 来取消通知接收器。 + +### 获取好友列表 + +调用 `TDSUser#friendshipQuery()` 可以得到查询好友的 `LCQuery` 实例,之后调用 `LCQuery#findInBackground()` 方法就可以得到好友列表。示例如下: + +```cs +LCQuery query = jerry.GetFirendshipQuery(); +``` + +LCFriendship 里面会包含两个用户: + +- `LCFriendship#getLCUser(LCFriendship.ATTR_USER)` 得到的是 jerry 自己; +- `LCFriendship#getLCUser(LCFriendship.ATTR_FOLLOWEE)` 得到的就是另一方的用户信息。 + +### 删除好友 + +成为好友关系的两个用户,之后也可以单方面删除好友。例如 jerry 不想再和 tom 成为好友,那只需要在自己的好友列表中删除包含 tom 的那条 LCFriendship 记录即可: + +```cs +await friendship.Delete(); +``` + +### 查询好友关系 + +我们使用 LCQuery 可以单独查询两个用户是否为好友关系。 + +```cs +LCQuery query = jerry.GetFirendshipQuery(); +query.whereEqualTo("followee", tom); +int count = await query.Count(); +if (count > 0) { + // tom is a friend of jerry. +} else { + // tom isn't a friend of jerry. +} +``` + +这一查询是通过网络发送到服务端执行的,一般情况下,我们推荐开发者在游戏启动时拉取一次当前登录用户的好友列表,然后缓存在本地,以后需要检查另外玩家是否为当前用户的好友时,直接从缓存中查询即可。如果担心好友数据变化,缓存没有得到及时更新,可以调用前面「响应好友变化通知」的方法,对好友数据更新进行监听,这样在绝大部分时候数据同步都是可以保证的。 + +## 4.云存档 + +### 构建云存档元数据 + +```c# +var gameSave = new TapGameSave +{ + Name = "GameSave_Name",// 存档名称 + Summary = "GameSave_Description", // 该字段会作为展示给用户的实际存档名 + ModifiedAt = DateTime.Now.ToLocalTime(), // 原文件修改时间 + PlayedTime = 1000L, // 游戏时长,单位 ms (非必填) + ProgressValue = 100, // 游戏进度 ,单位 int (非必填) + CoverFilePath = pic, // 游戏封面,可以传入一个本地文件路径,SDK 限制为 png/jpeg 格式 + GameFilePath = dll // 存档源文件,可以传入一个本地文件路径 +}; + +``` +### 保存存档 + +保存存档时,会去检查当前`TDSUser`是否已经登录以及元数据。 + +同时 SDK 在上传时会去限制存档本身以及相关联的两个文件( Cover 以及 GameFile )的权限为当前用户本身。 +```c# +await gameSave.Save(); +``` + +### 查询当前用户的所有存档 + +```c# +var collection = await TapGameSave.GetCurrentUserGameSaves(); + +foreach(var gameSave in collection){ + // 存档概览 + var name = gameSave.Summary; + // 原文件修改时间 + var modifiedAt = gameSave.ModifiedAt; + // 游戏时长 + var playedTime = gameSave.PlayedTime; + // 游戏进度 + var progressValue = gameSave.ProgressValue; + // 游戏封面 + var coverFile = gameSave.CoverFile; + // 存档源文件 + var gameFile = gameSave.GameFile; + // 源文件下载地址 + var gameFileUrl = gameFile.Url; +} +``` + +### 查询当前用户存档 + +我们使用 `LCQuery` 来查询当前用户的云存档。 + +SDK 查询封装了一个限定方法用于查询当前`TDSUser`的云存档。 +```c# +TDSUser user = await TDSUser.GetCurrent(); +LCQuery gameSaveQuery = TapGameSave.GetQueryWithUser(user); +// 查询 Name 为 TDSUser_GameSave_Name 的云存档 +gameSaveQuery.WhereEqualTo("name","TDSUser_GameSave_Name"); +var collection = await gameSaveQuery.Find(); +``` \ No newline at end of file diff --git a/Documentation/README.md.meta b/Documentation/README.md.meta new file mode 100644 index 0000000..125a6de --- /dev/null +++ b/Documentation/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 17ed6166c017a4fcda77ff618f2703db +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins.meta b/Plugins.meta new file mode 100644 index 0000000..bbcf194 --- /dev/null +++ b/Plugins.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dc389bcfbbddc4d35a997cbc06799975 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/TapTap.Bootstrap.deps.json b/Plugins/TapTap.Bootstrap.deps.json new file mode 100644 index 0000000..1229ab6 --- /dev/null +++ b/Plugins/TapTap.Bootstrap.deps.json @@ -0,0 +1,233 @@ +{ + "runtimeTarget": { + "name": ".NETStandard,Version=v2.0/", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETStandard,Version=v2.0": {}, + ".NETStandard,Version=v2.0/": { + "TapTap.Bootstrap/1.0.0": { + "dependencies": { + "NETStandard.Library": "2.0.3", + "TapTap.Common": "1.0.0", + "TapTap.Login": "1.0.0", + "Common": "1.0.0.0", + "LiveQuery": "1.0.0.0", + "Storage": "1.0.0.0", + "Storage.Unity": "1.0.0.0", + "UnityEngine": "0.0.0.0" + }, + "runtime": { + "TapTap.Bootstrap.dll": {} + } + }, + "Microsoft.NETCore.Platforms/1.1.0": {}, + "NETStandard.Library/2.0.3": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0" + } + }, + "TapTap.Common/1.0.0": { + "runtime": { + "TapTap.Common.dll": {} + } + }, + "TapTap.Login/1.0.0": { + "dependencies": { + "TapTap.Common": "1.0.0" + }, + "runtime": { + "TapTap.Login.dll": {} + } + }, + "Common/1.0.0.0": { + "runtime": { + "Common.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.0.0.0" + } + } + }, + "LiveQuery/1.0.0.0": { + "runtime": { + "LiveQuery.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.0.0.0" + } + } + }, + "Storage/1.0.0.0": { + "runtime": { + "Storage.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.0.0.0" + } + } + }, + "Storage.Unity/1.0.0.0": { + "runtime": { + "Storage.Unity.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.0.0.0" + } + } + }, + "UnityEngine/0.0.0.0": { + "runtime": { + "UnityEngine.dll": { + "assemblyVersion": "0.0.0.0", + "fileVersion": "0.0.0.0" + } + } + }, + "LC.Newtonsoft.Json/11.0.0.0": { + "runtime": { + "LC.Newtonsoft.Json.dll": { + "assemblyVersion": "11.0.0.0", + "fileVersion": "11.0.1.0" + } + } + }, + "Realtime/1.0.0.0": { + "runtime": { + "Realtime.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.0.0.0" + } + } + }, + "LC.Google.Protobuf/3.14.0.0": { + "runtime": { + "LC.Google.Protobuf.dll": { + "assemblyVersion": "3.14.0.0", + "fileVersion": "3.14.0.0" + } + } + }, + "System.Memory/4.0.1.1": { + "runtime": { + "System.Memory.dll": { + "assemblyVersion": "4.0.1.1", + "fileVersion": "4.6.27617.2" + } + } + }, + "System.Runtime.CompilerServices.Unsafe/4.0.4.1": { + "runtime": { + "System.Runtime.CompilerServices.Unsafe.dll": { + "assemblyVersion": "4.0.4.1", + "fileVersion": "4.0.0.0" + } + } + }, + "System.Buffers/4.0.2.0": { + "runtime": { + "System.Buffers.dll": { + "assemblyVersion": "4.0.2.0", + "fileVersion": "4.6.25519.3" + } + } + }, + "System.Numerics.Vectors/4.1.3.0": { + "runtime": { + "System.Numerics.Vectors.dll": { + "assemblyVersion": "4.1.3.0", + "fileVersion": "4.6.25519.3" + } + } + } + } + }, + "libraries": { + "TapTap.Bootstrap/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "Microsoft.NETCore.Platforms/1.1.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==", + "path": "microsoft.netcore.platforms/1.1.0", + "hashPath": "microsoft.netcore.platforms.1.1.0.nupkg.sha512" + }, + "NETStandard.Library/2.0.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==", + "path": "netstandard.library/2.0.3", + "hashPath": "netstandard.library.2.0.3.nupkg.sha512" + }, + "TapTap.Common/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "TapTap.Login/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "Common/1.0.0.0": { + "type": "reference", + "serviceable": false, + "sha512": "" + }, + "LiveQuery/1.0.0.0": { + "type": "reference", + "serviceable": false, + "sha512": "" + }, + "Storage/1.0.0.0": { + "type": "reference", + "serviceable": false, + "sha512": "" + }, + "Storage.Unity/1.0.0.0": { + "type": "reference", + "serviceable": false, + "sha512": "" + }, + "UnityEngine/0.0.0.0": { + "type": "reference", + "serviceable": false, + "sha512": "" + }, + "LC.Newtonsoft.Json/11.0.0.0": { + "type": "reference", + "serviceable": false, + "sha512": "" + }, + "Realtime/1.0.0.0": { + "type": "reference", + "serviceable": false, + "sha512": "" + }, + "LC.Google.Protobuf/3.14.0.0": { + "type": "reference", + "serviceable": false, + "sha512": "" + }, + "System.Memory/4.0.1.1": { + "type": "reference", + "serviceable": false, + "sha512": "" + }, + "System.Runtime.CompilerServices.Unsafe/4.0.4.1": { + "type": "reference", + "serviceable": false, + "sha512": "" + }, + "System.Buffers/4.0.2.0": { + "type": "reference", + "serviceable": false, + "sha512": "" + }, + "System.Numerics.Vectors/4.1.3.0": { + "type": "reference", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/Plugins/TapTap.Bootstrap.deps.json.meta b/Plugins/TapTap.Bootstrap.deps.json.meta new file mode 100644 index 0000000..92c4277 --- /dev/null +++ b/Plugins/TapTap.Bootstrap.deps.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 31cab863b627d4a509bd0f259bcf6a31 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/TapTap.Bootstrap.dll b/Plugins/TapTap.Bootstrap.dll new file mode 100644 index 0000000000000000000000000000000000000000..bd8128a5c34503e19934af33a9416894aa8ef2e1 GIT binary patch literal 35328 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 literal 0 HcmV?d00001 diff --git a/Plugins/TapTap.Bootstrap.dll.meta b/Plugins/TapTap.Bootstrap.dll.meta new file mode 100644 index 0000000..6dcd382 --- /dev/null +++ b/Plugins/TapTap.Bootstrap.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 03acb073a9f88474581401ef1020c1c4 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/TapTap.Bootstrap.pdb b/Plugins/TapTap.Bootstrap.pdb new file mode 100644 index 0000000000000000000000000000000000000000..65fc392931f193af1bcad8cf4e5fd16409f25226 GIT binary patch literal 16316 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 literal 0 HcmV?d00001 diff --git a/Plugins/TapTap.Bootstrap.pdb.meta b/Plugins/TapTap.Bootstrap.pdb.meta new file mode 100644 index 0000000..1456e1e --- /dev/null +++ b/Plugins/TapTap.Bootstrap.pdb.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b3d6c5154fb9d4319a2a32e6fde07f63 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/README.md b/README.md new file mode 100644 index 0000000..ac2eea9 --- /dev/null +++ b/README.md @@ -0,0 +1,254 @@ +# [使用 TapTap.Bootstrap ](./Documentation/README.md) + +## 使用前提 + +使用 TapTap.Bootstrap 前提是必须依赖以下库: +* [TapTap.Common](https://github.com/TapTap/TapCommon-Unity.git) +* [TapTap.Login](https://github.com/TapTap/TapLogin-Unity.git) +* [LeanCloud.Storage](https://github.com/leancloud/csharp-sdk) +* [LeanCloud.RealTime](https://github.com/leancloud/csharp-sdk) + +## 命名空间 + +```c# +using TapTap.Bootstrap; +``` + +## 接口描述 + +## 1.初始化 + +TapBootstrap 会根据 TapConfig 中的 TapDBConfig 配置来进行 TapDB 的自动初始化。 + +### 开启 TapDB +```c# +var config = new TapConfig.Builder() + .ClientID("client_id") + .ClientToken("client_token") + .ServerURL("https://ikggdre2.lc-cn-n1-shared.com") + .RegionType(RegionType.CN) + .TapDBConfig(true,"channel","gameVersion",true) + .Builder(); +``` +### 关闭 TapDB +```c# +var config = new TapConfig.Builder() + .ClientID("client_id") + .ClientToken("client_token") + .ServerURL("https://ikggdre2.lc-cn-n1-shared.com") + .RegionType(RegionType.CN) +//# .TapDBConfig(false,null,null,false) + .EnableTapDB(false) + .Builder(); +``` +### 初始化 +```c# +TapBootstrap.Init(config); +``` + +## 2.账户系统 + +> 登陆成功之后,都会得到一个 `TDSUser` 实例 + +### 使用 TapTap OAuth 授权结果直接登陆/注册账户系统 + +```c# +var tdsUser = await TDSUser.LoginWithTapTap(); +``` + +### 游客登陆 + +```c# +var tdsUser = await TDSUser.LoginAnonymously(); +``` + +### 使用第三方平台授权登录/注册账户 + +```c# +var tdsUser = await TDSUser.LoginWithAuthData(Dictionary authData, string platform, +LCUserAuthDataLoginOption option = null); +``` + +### 绑定第三方平台授权 + +```c# +await TDSUser.AssociateAuthData(Dictionary authData, string platform); +``` + +### 退出登陆 + +```c# +TDSUser.Logout(); +``` + +## 3.好友系统 + +### 申请成为好友 + +```c# +TDSUser tom, jerry; +await tom.ApplyFriendship(jerry); +``` +申请成功的回调中,我们会得到一个 LCFriendshipRequest 的实例,这个实例中包含了两个用户: +- sourceUser,指请求的发起方,上面的例子中就是 `tom`。 +- friend,指请求的目的方,上面的例子中就是 `jerry`。 + +tom 也可以在申请好友的时候,添加更多的属性,例如 tom 希望加 jerry 为好友的时候,也设定一个名为 cat 的圈子,可以这样操作: + +```cs +Dictionary attrs = new Dictionary { + { "group", "cat" } +}; +await tom.ApplyFriendship(jerry, attrs); +``` + +### 获取好友申请列表 +好友申请有三种状态: + +- `pending`,对方没有回应,还处于等待中。 +- `accepted`,对方已经接受,现在双方成为好友。 +- `declined`,对方已经拒绝。 + +好友请求创建之后默认是 `pending` 状态。 + +jerry 这里可以通过 `friendshipRequestQuery` 来查找不同状态的请求。例如 jerry 想看看新的好友请求,可以这样操作: + +```cs +LCQuery query = jerry.GetFriendshipRequestQuery(LCFriendshipRequest.STATUS_PENDING, false, true); +ReadOnlyCollection reqs = await query.Find(); +foreach (LCFriendshipRequest req in reqs) { + Console.WriteLine(req); +} +``` + +### 处理好友申请 + +jerry 对于新的好友请求,可以同意或者拒绝,也可以什么都不做,无视这些请求,甚至直接删除。这些操作我们都是支持的,请看下面的示例: + +```cs +LCFriendshipRequest tomRequest, tuffyRequest, otherRequest; +await jerry.AcceptFriendshipRequest(tomRequest); +await jerry.DeclineFriendshipRequest(tuffyRequest); +await jerry.DeleteFriendshipRequest(otherRequest); +``` + +注意: +* 在 jerry 拒绝了 tom 的好友请求之后,如果 tom 再次请求成为 jerry 的好友,tom 在执行 applyFriendshipInBackground 时会直接得到错误的应答,表明 jerry 不想和 ta 成为好友。 +* jerry 同意了 tuffy 的好友请求之后,它们就成为了好友,之后两个人中任何一人再次调用 applyFriendshipInBackground 申请横位好友时,也会直接得到错误的应答,表明它们已经是好友无需再次申请。 +* jerry 删除陌生人的好友请求后,对方还可以再次发起请求。 + +### 响应好友变化通知 + +TDS 好友模块支持客户端监听好友状态变化,在游戏中实时给玩家提示。好友状态变化的接口包括 + +```cs +public class FriendshipNotification { + public Action OnNewRequestComing { get; set; } + public Action OnRequestAccepted { get; set; } + public Action OnRequestDeclined { get; set; } +} +``` + +其中: +- onNewRequestComing 表示有其他人申请成为当前用户的好友,通过调用 `LCFriendshipRequest#getSourceUser()` 方法可以获得发起方用户信息。 +- onRequestAccepted 表示当前用户的好友申请被对方通过,通过调用 `LCFriendshipRequest#getFriend()` 方法可以获得对方用户信息。 +- onRequestDeclined 表示当前用户的好友申请被对方拒绝,通过调用 `LCFriendshipRequest#getFriend()` 方法可以获得对方用户信息。 + +开发者可以通过 `TDSUser#registerFriendshipNotification` 来注册通知接收器,通过调用 `TDSUser#unregisterFriendshipNotification` 来取消通知接收器。 + +### 获取好友列表 + +调用 `TDSUser#friendshipQuery()` 可以得到查询好友的 `LCQuery` 实例,之后调用 `LCQuery#findInBackground()` 方法就可以得到好友列表。示例如下: + +```cs +LCQuery query = jerry.GetFirendshipQuery(); +``` + +LCFriendship 里面会包含两个用户: + +- `LCFriendship#getLCUser(LCFriendship.ATTR_USER)` 得到的是 jerry 自己; +- `LCFriendship#getLCUser(LCFriendship.ATTR_FOLLOWEE)` 得到的就是另一方的用户信息。 + +### 删除好友 + +成为好友关系的两个用户,之后也可以单方面删除好友。例如 jerry 不想再和 tom 成为好友,那只需要在自己的好友列表中删除包含 tom 的那条 LCFriendship 记录即可: + +```cs +await friendship.Delete(); +``` + +### 查询好友关系 + +我们使用 LCQuery 可以单独查询两个用户是否为好友关系。 + +```cs +LCQuery query = jerry.GetFirendshipQuery(); +query.whereEqualTo("followee", tom); +int count = await query.Count(); +if (count > 0) { + // tom is a friend of jerry. +} else { + // tom isn't a friend of jerry. +} +``` + +这一查询是通过网络发送到服务端执行的,一般情况下,我们推荐开发者在游戏启动时拉取一次当前登录用户的好友列表,然后缓存在本地,以后需要检查另外玩家是否为当前用户的好友时,直接从缓存中查询即可。如果担心好友数据变化,缓存没有得到及时更新,可以调用前面「响应好友变化通知」的方法,对好友数据更新进行监听,这样在绝大部分时候数据同步都是可以保证的。 + +## 4.云存档 + +### 构建云存档元数据 + +```c# +var gameSave = new TapGameSave +{ + Name = "GameSave_Name",// 存档名称 + Summary = "GameSave_Description", // 该字段会作为展示给用户的实际存档名 + ModifiedAt = DateTime.Now.ToLocalTime(), // 原文件修改时间 + PlayedTime = 1000L, // 游戏时长,单位 ms (非必填) + ProgressValue = 100, // 游戏进度 ,单位 int (非必填) + CoverFilePath = pic, // 游戏封面,可以传入一个本地文件路径,SDK 限制为 png/jpeg 格式 + GameFilePath = dll // 存档源文件,可以传入一个本地文件路径 +}; + +``` +### 保存存档 + +保存存档时,会去检查当前`TDSUser`是否已经登录以及元数据。 + +同时 SDK 在上传时会去限制存档本身以及相关联的两个文件( Cover 以及 GameFile )的权限为当前用户本身。 +```c# +await gameSave.Save(); +``` + +### 查询当前用户的所有存档 + +```c# +var collection = await TapGameSave.GetCurrentUserGameSaves(); + +foreach(var gameSave in collection){ + // 存档概览 + var name = gameSave.Summary; + // 原文件修改时间 + var modifiedAt = gameSave.ModifiedAt; + // 游戏时长 + var playedTime = gameSave.PlayedTime; + // 游戏进度 + var progressValue = gameSave.ProgressValue; + // 游戏封面 + var coverFile = gameSave.CoverFile; + // 存档源文件 + var gameFile = gameSave.GameFile; + // 源文件下载地址 + var gameFileUrl = gameFile.Url; +} +``` + +### 查询云存档 +云存档只能查询当前用户的所有存档,需要查询该用户的特定存档时,可以增加相应过滤,可参考 [查询条件](https://developer.taptap.com/docs/sdk/storage/guide/objc/#%E6%9F%A5%E8%AF%A2%E6%9D%A1%E4%BB%B6) +```c# +TDSUser user = await TDSUser.GetCurrent(); +LCQuery gameSaveQuery = TapGameSave.GetQueryWithUser(user); +// 查询 Name 为 TDSUser_GameSave_Name 的云存档 +gameSaveQuery.WhereEqualTo("name","TDSUser_GameSave_Name"); +var collection = await gameSaveQuery.Find(); +``` diff --git a/README.md.meta b/README.md.meta new file mode 100644 index 0000000..74191cc --- /dev/null +++ b/README.md.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c5330aab2c6a41699a1601f1af6b27d9 +timeCreated: 1616755935 \ No newline at end of file diff --git a/VERSIONNOTE.md b/VERSIONNOTE.md new file mode 100644 index 0000000..e69de29 diff --git a/VERSIONNOTE.md.meta b/VERSIONNOTE.md.meta new file mode 100644 index 0000000..4bb7039 --- /dev/null +++ b/VERSIONNOTE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d5391b17003874fb2afc3e309a3f63ef +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/package.json b/package.json new file mode 100644 index 0000000..5cc7165 --- /dev/null +++ b/package.json @@ -0,0 +1,14 @@ +{ + "name": "com.taptap.tds.bootstrap", + "displayName": "TapTap Bootstrap", + "description": "TapTap Develop Service", + "version": "3.18.4", + "unity": "2018.3", + "license": "MIT", + "dependencies": { + "com.taptap.tds.common": "https://github.com/TapTap/TapCommon-Unity.git#3.18.4", + "com.taptap.tds.login": "https://github.com/TapTap/TapLogin-Unity.git#3.18.4", + "com.leancloud.realtime": "https://github.com/leancloud/csharp-sdk-upm.git#realtime-0.10.14", + "com.leancloud.storage": "https://github.com/leancloud/csharp-sdk-upm.git#storage-0.10.14" + } +} diff --git a/package.json.meta b/package.json.meta new file mode 100644 index 0000000..a42bf59 --- /dev/null +++ b/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e618b9375caf846708cffea428908521 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: