From ec5dc4027453d8a1f57f11fc69275ab6c15e4998 Mon Sep 17 00:00:00 2001 From: ci-gitlab Date: Thu, 23 Mar 2023 21:00:51 +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 -> 16292 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..77ccd40a868f9628ad6cb3579da53a007f729c87 GIT binary patch literal 35328 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 WsQ;VbVSC>HU+n4sckOQwf&UB4DTRUn 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..b1c5bb15d794fdb5bd06e0e8b6f738be8d32bdb2 GIT binary patch literal 16292 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 EKkBqtp8x;= 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..6118cac --- /dev/null +++ b/package.json @@ -0,0 +1,14 @@ +{ + "name": "com.taptap.tds.bootstrap", + "displayName": "TapTap Bootstrap", + "description": "TapTap Develop Service", + "version": "3.18.3", + "unity": "2018.3", + "license": "MIT", + "dependencies": { + "com.taptap.tds.common": "https://github.com/TapTap/TapCommon-Unity.git#3.18.3", + "com.taptap.tds.login": "https://github.com/TapTap/TapLogin-Unity.git#3.18.3", + "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: