From 07ad25fae5195203367037afabf9c4e831ed6cd6 Mon Sep 17 00:00:00 2001 From: ci-gitlab Date: Thu, 15 Sep 2022 16:44:37 +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 -> 34304 bytes Plugins/TapTap.Bootstrap.dll.meta | 33 +++ Plugins/TapTap.Bootstrap.pdb | Bin 0 -> 15584 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..3719c20a8343f40f83e1665666c41b3fd8efd7c5 GIT binary patch literal 34304 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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..7f6ef18b50c690e91499ed077efd8304b050b710 GIT binary patch literal 15584 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 Upub@j@T(YOrhwcMtZCK%0zp%z3jhEB 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..5ea4ab2 --- /dev/null +++ b/package.json @@ -0,0 +1,14 @@ +{ + "name": "com.taptap.tds.bootstrap", + "displayName": "TapTap Bootstrap", + "description": "TapTap Develop Service", + "version": "3.15.1", + "unity": "2018.3", + "license": "MIT", + "dependencies": { + "com.taptap.tds.common": "https://github.com/TapTap/TapCommon-Unity.git#3.15.1", + "com.taptap.tds.login": "https://github.com/TapTap/TapLogin-Unity.git#3.15.1", + "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: