From 16088e655d5ad6e8f96051c09ff491bbd2e54bcd Mon Sep 17 00:00:00 2001 From: ci-gitlab Date: Tue, 12 Jul 2022 18:33:17 +0800 Subject: [PATCH] feat:update upm --- CHANGELOG.md | 254 +++++++++++++++++++++++ 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 -> 32768 bytes Plugins/TapTap.Bootstrap.dll.meta | 33 +++ Plugins/TapTap.Bootstrap.pdb | Bin 0 -> 15392 bytes Plugins/TapTap.Bootstrap.pdb.meta | 7 + README.md | 254 +++++++++++++++++++++++ README.md.meta | 3 + VERSIONNOTE.md | 6 + 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..e945ec1 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,254 @@ +# ChangeLog +## 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..43929a4525c097251383acf4bae99bcec5451504 GIT binary patch literal 32768 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%0AEThpi~>((#|>(gqR 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 S;vX;iAFSj5s`imt;Qs;5JKVki 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..ca7597c14e5cf0ea43af9d41118a21204937e80c GIT binary patch literal 15392 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 AY5)KL 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..f9495e5 --- /dev/null +++ b/VERSIONNOTE.md @@ -0,0 +1,6 @@ +### Dependencies + +- TapTap.Login v3.11.0 +- TapTap.Common v3.11.0 +- LeanCloud.Realtime v0.10.11 +- LeanCloud.Storage v0.10.11 \ No newline at end of file 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..880e936 --- /dev/null +++ b/package.json @@ -0,0 +1,14 @@ +{ + "name": "com.taptap.tds.bootstrap", + "displayName": "TapTap Bootstrap", + "description": "TapTap Develop Service", + "version": "3.11.0", + "unity": "2018.3", + "license": "MIT", + "dependencies": { + "com.taptap.tds.common": "https://github.com/TapTap/TapCommon-Unity.git#3.11.0", + "com.taptap.tds.login": "https://github.com/TapTap/TapLogin-Unity.git#3.11.0", + "com.leancloud.realtime": "https://github.com/leancloud/csharp-sdk-upm.git#realtime-0.10.11", + "com.leancloud.storage": "https://github.com/leancloud/csharp-sdk-upm.git#storage-0.10.11" + } +} 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: