From b6fadbe950525303222d3a84896641af5ca51940 Mon Sep 17 00:00:00 2001 From: Hexinghua Date: Thu, 18 Aug 2022 17:12:36 +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 -> 15544 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..6e1c7649b5c321b6a19c0ca7cbc73b0004b8b0aa GIT binary patch literal 33280 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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..b8f25d9469ae2c78e753b35326181cef6d3daba7 GIT binary patch literal 15544 zcmaJ|2S8I-7rqH0AP}}}B`iTkm@*t?B~$_2vtxJ(BiA0Q!+FA%PkDUc(OKM?+Lsbsi&Mq-4%MRsu4 z1T+h%50DTDTqW%(z)BTptp~mf_^-g90{7=|P$Y+oDuGV|z8&}>;7@_S0UpZbpg~;7 z2R;e-HsA+=KLh?R@NgpziZ$Y*YT#3W9|nF3_y^$TJT6M)anNAklY!3w{wHt~V=hWD z=Aa_r%#VkHJ$NYB!x+hcmU!^dMxebOINt<)=0BAUn3}_6{SfKGhQ-G!c%>h~rv=XQp=&l#ziy3+j_#ZEG)YID> z_3^eqQ9w&P1SrK@fQA7P-j-;ZH&A?^7#=u?od1eyx87^ns4Adn{xx%M9i`IFcL$!M;lc>~GK&DR6ZH)4?G0(R(YgGS(?fZK}Z2WWnW z=K16>ut8I3zJ=zGY3>$4=~vTyEy-~j{&CRH0UY!znPvndj+r-HA&k+K$Q#l5c-}E(VH3b+@Q=w~4%nQ9V*p#Qa5!KA3yT0-0>&QVpE-~fAO>Um z)&|%HEHL@lUt1P_1K18UOlW&HfbCgW0JtX$<9r7e#`%sc90b^jg>3;lvoOwgVPTx_ z%EEX+xUn$K@5REn{N4uGorSSKLKb!c>|uaCS$H<&d$BO?FK-r(0_?-W!GQa)Fm8We z7RL4SgVr{s+Y`5UUlz^-><_KogOwk^!Z>~c0h`hJxc)&bjO!<2VeB7+Vd;WcKqwe` z)ST8Y2OJ7L#$ddT;Fw}Cj+Y1)#%oGH7RLFJER6GUnQZ-N7RLEFhS~Z3Ss3RJfQVr7 z8(5eR_fvodLcS&Ke=^`f5D^T}Nm&@je+dis1S~Vaau(hS`2=8C zui*~Q?Ff~!a4g_57RLT4$Qh_Zehdp^|I1-?GxqSvosY*;jRBqjW`Mqd)+~4zAcsJmMEbIXC494yK6VPJFcc=9i0batw z6(G-Gd&uhzcp2n-((=0?Z3PQ&1H2ju+w*aItzlu@e+uCQ0f2?$3W?0`slIhlgnmWyV<)rjnW9*i>l8wP!0R~p<;ARt9Ms~C`wOq99Q2(x?h8Ej zIY{T@2po?M4r=ys0gmSk4$AZG1-v(qJCGVIYM||OusfIlzDruQ9Mk;GrqTzEGnk6ESW>V;Nj08n+4fXrFJKB_I9m ztB0$`FV2dO_V^vQ=A-d_kqtca^o@h-rM`N&3jOsqCP?gm9PTUqku4vs^pAtxhE=-J5~)s#)FopGnJ!h1N)?1sjui4z zsaRc6AyvtdjOL{p1p%;9qb^k_38W#km1>oiK+;MDs?rjg?2<7!u}Z1KcRH!I97$zL zq$RXkg<6%bE+F9JiIYXh6OCVbU zS+(|UJZNK=Fn!iI%Z8=f9A1|Ujy+{^*=BwoI-b3byY{F~v}p6s<0W&Ftim=P-h0{j z@%#O)v+L59+(;^^KazgUG&%D#Rgd8rJ8qn_K0HPzIO+c`-{+xA+$#TnvK_58uY0#_ zt~mW#mvXFR^wA+9x5px5Tyrg7C#{7476mGWt|mvV!QCK$1g*S0ET{@6^7EyYd6IN1 zUuA^I*g=v2^Vl z5)zjx+<9v9@a@JCqCQ>`i+0#Q**Rm}-h=6N4J)pc*B>!^f2Fq|HBTqi=<=cWI;rZH z2!B)m#G8^TzWBl{Qn&Z*=9P_^5g&^FnVGcF`G!O2>|mXBD%-=(+82ejF;Vj#*86UV zXg(kMXPsyfQGU(#X;6Ng=0d?QtHjs(x`1-LY_x)?CMqB*y7!{iO1Rm+e)XT<7cAx> zZrJpw^NWYW(dpKJd5c>tm0y1A048#zH6OQ8=O%1DP~;bWIWl6>TF}3aQx3>PQLZFSKiw5{m#ad+s!MI z;zA$uKH1PX{@_A?zge}8U<3YVsLK=|>CL+PLSCezaa`_x+0$b;@3qu<-(0)?@PY@f z$_dMTcSoPI-Klfxc8GU!r9M#T{&MMl<76@lXDJeT*k@6=Vl$}D{JI->Ocy$uH~gY4a*_1N=X zyWvz-sk$4J4SvGe*<=0;f0FO{)p=)`Xw2JSMT3{mlwkYG3)gPFG=I~x#~dRLcdC0e z4IR2 zmLo}xN?M_i!Gcwjp-`0*@(e|ZMhYvJx>Bd8P)v~OpfzEIBU?U5PLx!Y1yw3x^{Z4$ zb){-e1&UYIh%2j*28=5zh<5)Yq5Y!+`t>Ud1zROToxKu8WIy3Lda#M zr6Ez_G4d#a2qD^?Zr6_zg~MuGs!$OqKQ~^S7?_)wkrIj2KR!zmpDSVChm8zj z!_bi-BeQcyCg&!`=O^ZN&I$c!PS{6t!atf5@zI=qAI*vUNDfqjm4lYgp{8JwT&aW| zpv9q;S5X^6(QRL^?f>Cza{a77LMA=t9?wuz6XfoKmaAT}?l3wIanY8nsqksuL9|RN-Nw91Zla4wSXD;$f@nMfl;!c)HcIHOqG;ul&&a&ZGM9 zwhFCGtx+mUXt8Hl3^t^Z%gqOvPSj+s8a65FqQ|KQ*0`i4mso;ioIMg<+Fr4gb0I;$ z<=M044aIHrj7Cezhb=#Z+PG-zSLfef9r<~dzDK~{cS2^&W2DG^2`xL~fYVCs;-I^# z)_UvvX$O-zJ)3_l%gd|L>WB(ad?l<}uqhd@qvgM(tK==dMa&2gCmb5F@WSy$tIcS6 zv0ABw-44XKRs@Rle$YU7ze8m6EU&@YtDG8~!=1|acB4ym5L1}nz6)NP-|4gGmYmkQ zw{fO+qmZRmB@-$_qmUUC7UPx~&L3`>G%vmJ`JuMii@VXyt0ZI!sZue4kQ*rbUv}s{ zYL{R9hND-7L*{ts+m$O|pA1`?OtqX)LPY^;q36{qTA%6oYx_1o%Td;6Z2H>a+wr^a zn0Bw>#wiub1ZIA zpMgI*E?3Oy-bR;rWz;wLjdI;(HC4RoJU@0=SkFn_tLN8L641vm!NR7Mt~g`i?eRZO zM?2P~)b_sDhw%R7K)VH%R;?rqgdbR>{8&_aB=f)x?cMjpFq?K^4I_DouGg7qW9FBf zR>p5{@n5ia;gKd<5T!)rx6MQh{oA#&k@?h?gmg zHc9s1{`$>EzicsMS|Ke{skJ(Vj0|YlsLOQB@MbD&V&4>ErHe|~o1c1cM@`JiZd4_B zqNjcPmaa^qKJ0M6e)dVb951Zjl2+y3jam|{GxQ2fE{&ASjDhJ^pWDWWmS!w`(QDM# zQMsRXV*sAKWbm+NP;$h;FA^Wv3)ANLe7~b@#4jhhQG^YEtUMoT%X9%#=)0{A8`@NL zscXmBymnf#Y+*OL`7m7+Y7`I^qyhW{hli$t6ZYo@+?+p9nbdSKJIm_u-_N@oeRKV{>2kKB}q#8M@^43KJ=7H3MF6E(-6~Tp!Kk=}ohXn-Pf1z(;(hGfBG-rAsw9qwu)v#3!vYhIs`%@NNyY1D zO3cn)v8|)EQ?tpL7T!l-CAx-Z>7Fh7wPoz{MMqNSKDinAj2|<$dmTKU=$y`@f8*{s z*InNXPuw-WIp@kC=?~qj7bz;S1%sluO8S=%4jLfYdV;g#{(z}#J9Mcs7#DpX3hd0w zk7hSd>B)Px(~oHss8$!Z&e65n#Z~#qZb=g74Sm>usrm>rMRZn?Xkg31njRSCZ~L#C zdiAnj!dmB@Jd24fYdZX5mDeTC813WS**f*v*O@JL1E&Oj5fIa@cA-=!gZD3VgD|R1 z^L@VGyHA#R=Q)}fjTv%geFz(YLw1V-z9PuDg&%-Dz5^Ll3exr?LDJ(|v} zT2R|eqC%~y$&^-B5_0T36ETdY;P8M8(gD512d%!*)_OgB)lp)OqOx830$tAH;j=i~ zt~E(^$^(0bmelhUHXknXyaHgMW?HzUAah0-{XB)#ovBAemWb<`#`(nVfM7AEG8>iNk;|SMOP*W8( zuo&IqmbQuyO@VQX3jIco{IHnWyJ8P>IwoF5`tS?oQ~u7EX)}+StT>#Vew$TNm%(s} zuGNAy!EVc^6KP+Z8ylMMW2t57(C;3ZUSu>J@6S5UJ+L(EFz9_4I$|o6yqm4jP^Y=kIqWo*K&9E^^=ViT~)h8(NDDMi?_4) z=NkW;u_yTc=-;e2Giwwc6ZoxyR+LNj8SN{hwXf)hrE|Z0D&DyTxnH_F;7NOd9a_{~ zCOLI6lQE;d(M&21ot2w3Z&huzY@+wPF6z`yjV|;W?P|uU%+u-Oh@`{n+wW(uT+7TT z%DZvN{hEMyst)-&@Z=IHv6IdcX11?N(-iX1oC3 z$!A*jgh_5x;bH$=?0Nq4%C#A58h=aj^q<_zpuoRrIT@Z(aHStqiSTmQF@Jaa`5A-+RU;9sBIM>8_XRQo1SH=V-A~s;FRUev2;C z`;VtvH-vg5?B2C=Q+~lQmo7@0no6Cz4F0Gyx<(YQEK|dDKe~&RylGo@$i#l)jV}G} z-`B-?{$DF%Ewj?zrk(h8$k9tPX1~o`IWW6tDKC+EwC(Vm?L?wVrj~cCg^Z0n?cm9m zFBK-$UHV5t|JQ{sUC>5*QvNLWz^0ZxNgEn>&3$>;Xz2g7GPGYvj2QnhuoT{s z;y1|D*t$d8lDbd6)@*brWB##QfBkn|b%>!Ya6%mk=|{3z;FUi<>q{5OsGfP%@cz>)kK&h)obkhV<1F5{7fJrLjaqJCL8Y~rF=Ty5 zJ6~X&k@?m1p^{1Uv-;3l_}N!v(ArEv?@C|VEwikXOr3wOp=IqN=FzpYN|$+#(SEz_ z)xdR4%JikT!*7-i-Nv*GshvxdRVk&KuA53mxoY{%(9>GTJ5aYKGT;yfeZNP5Gty%j(Eo?#Zoj^ZdKgWd0aTKnsDe$oZ!-o$Mx zI-qHM=)*kcu(V0HX-AndhtD(_y|3t4^6vCI153TGd31G@)XITZ5C)o};Q76l{yaUs z=|RQLAzS6?T{YpoJ+llm#idU-e!ekabY{crGd=FdPCCLUX{0JGyi#I41v3G*|K^E| zRU+@qH7QS0eoA@jN^1;}DyxY6s>=2aJyXKjqVh|#7R*guvFNGIhWIJWV|v%fy|ZWZ z7g2%Y_=w2w9n@37_SaZJ~c@1$X=P!A10zdbNDef3zm-97sct+a5*L`n+6 z^1Zyye2Il~aq<@fGM>tx>6i$^f~-fQ=X9TGmnm#k?1>UDtDb@0ZNJ29!m%{93F@>f zVXCP6Zd>uX1vXhLj6%mwzJ0}q6 zu)MbKasQzGTk|HZIN-*+l=Zv?=6(~Owy{+zlm<%7wl)9C*C~^NveV}$Z(rT|!^(c0 zl^74(LxWMY7tlXZD|oV5{Xwb))IiHM3Zw`@|w#FXBcU| z`i_<*|Kv&gGt@r%do+rJj0c_Cx8UEHgjsdbgCE|{wj%$!kf?&cjWRDvZvK2zkB-M9 zhhKVVPsli#N0#p2GIO5vU;LSZ(5eR?4dR*FBM!Hwvr9&twQ<%Q#0zu~1fvi$e4>Gf5 zD!GV$4`R-0Gb_&8cbsM`PIDh{ozomGgac6mFM&03G+I5Ak8Ce(pVRrCd#*A{-vH8l2x2P!+_D=V-}lJZPafXrw`K(8{f+z!aJA z;FB0PevN>-%jefvnCL9w{9uSR7;@l2olTI4!wcl)#i9sHs!MR84z~7us_I!XTy-DQaPO>;}3i*&M)}Lg( z0!Zc#04;+0!09t?u_H?6LQrtHV{wC87hAzSuL>XD^VZMo?+Tsas9yxF?8t?4 zWG?suC)or@fMW$ZgB|4%)5Z|f$tc8vYCtUE#*S%H#SHpMhyxK~3zunQBY>{w)(GLG z9^b(e&cAWt5W2z?+4IK1=L(bEKnM;|n-<_xZ#m`yClt+vlj-UB0%|?lqpk;M{VFQF zu-Q~I0UXWb)>yEII2jk~kK&Ht;lTkRXbC6J0NGK4SbfstMO>}jTsRl<|LGeiXCU#yY^E9A_aX^ ziV33)(KwP|;A|+uj(S_z*>zZL|BEgoO%1ROb2(Hcy#;W74wP&tW=k;#iaAoum16D` z^CIi&?Mtx$iUm_FoMKTF8$hvGiis(fOtEx|Wm7DVVuchNPO(t}9Atj_-2!~NF?Da1NM(_<6q(m_(ZmM5_j*$WNSFT86In6 z4{pFw&rcwrAR#yv5@2q&MUh-2!lygoRHzYh4Td(eZZt=2W{$(=MOvFmY(>|kBh(mfWrcvipEFE2LtJx;qYxJkPZj4z#*|Qz?F%#_;NWbZ+CesE z$b<_Ehbte3GxUoq1%3DspwL1|LM)ZaNCn~bl9YGE^02tl@}xSfs{-WBHH9AHz#_}X zU?P~|jdk$=@4y2ilvIVs!jO(y;4{GF5oO$u`f2W-jHF*VZur4CNMVL%Dou*}flM40 zZ**-p9HC!|Bh%2bFNl4DMQ48E1q^(!MNaw?FznpPXotvwZz_5C=y5Ufhcy#SSnzmA ze-K%^z_DN?qyq)}g<^rA2a$gE4!C|t-t~k|3jxy4##4X$51(c4@Gcud5qi(iJNz*Y z?mhk74$%_*JOQ|BD2j`QG^C&J=M4-hVulj+YXso<5Y(RwUkRW*gSNuQrpfPx$RZZ5 z26O;OzfkA{jO-3u{U(7i4rXY&EOKCxqk?SZKoAmR`Ni>lfI%9>WDpY822r~WV@{lD zjRQx*1ARUZ4s3^-VxeOE6{(vY&j}yThSu}L!;Cbz6RhCF>-r^-0$)}@qq*Y#flMRR zUw=dZC*g-0bTvL`o)4s7=8t=w6cyHv#2#=>xyTR4DawG!4hIR$3mxv`UWb8>^egaC z@^yC(?+YAi%|`*Y0=_YLDdvo^zz59>(MTTZWz?T%8jUP05%fBQ8-Fb0_hisphApju G%l`oU*08bw 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..efa61c5 --- /dev/null +++ b/package.json @@ -0,0 +1,14 @@ +{ + "name": "com.taptap.tds.bootstrap", + "displayName": "TapTap Bootstrap", + "description": "TapTap Develop Service", + "version": "3.12.1", + "unity": "2018.3", + "license": "MIT", + "dependencies": { + "com.taptap.tds.common": "https://github.com/TapTap/TapCommon-Unity.git#3.12.1", + "com.taptap.tds.login": "https://github.com/TapTap/TapLogin-Unity.git#3.12.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: