From ac6767f7a7512e73a665d8644907082c80bfa85f Mon Sep 17 00:00:00 2001 From: ci-gitlab Date: Thu, 4 Aug 2022 21:35:03 +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 -> 33280 bytes Plugins/TapTap.Bootstrap.dll.meta | 33 +++ Plugins/TapTap.Bootstrap.pdb | Bin 0 -> 15540 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..0696e2e89501fc7117d3ab76277569db088f15ed GIT binary patch literal 33280 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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..083b09d --- /dev/null +++ b/package.json @@ -0,0 +1,14 @@ +{ + "name": "com.taptap.tds.bootstrap", + "displayName": "TapTap Bootstrap", + "description": "TapTap Develop Service", + "version": "3.12.0", + "unity": "2018.3", + "license": "MIT", + "dependencies": { + "com.taptap.tds.common": "https://github.com/TapTap/TapCommon-Unity.git#3.12.0", + "com.taptap.tds.login": "https://github.com/TapTap/TapLogin-Unity.git#3.12.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: