Unity SDK 开发指南
本文介绍如何在游戏中加入好友系统。
集成前准备
- 参考 开发者中心配置 创建应用、配置包名与签名证书
- 参考 Unity 集成指南完成 TapSDK 基础接入
- 好友 Lite 模块依赖于 TapTap 登录模块,开发者接入前应先完成 TapTap 登录的接入
权限说明
Android 权限说明
该模块在 Android 平台需要如下权限:
| 权限 | 使用目的 | 权限申请时机 |
|---|---|---|
| 网络权限 | 用于访问网络数据 | 用户首次使用该功能时会申请权限 |
| 网络状态权限 | 用于检查网络连接状态(如 Wi-Fi 或移动数据是否可用) | 用户首次使用该功能时会申请权限 |
| 读取外部存储权限 | 用于读取设备上的文件和媒体内容 | 用户首次使用相关功能时会申请权限 |
| 写入外部存储权限 | 用于保存文件到设备存储 | 用户首次使用文件保存功能时会申请权限 |
| 管理外部存储权限 | 用于管理设备上的文件 | 用户首次使用文件管理功能时会申请权限 |
| 前台服务权限 | 用于在应用处于后台时保持某些功能运行 | 应用需要在后台运行服务时 |
| 相机权限 | 用于拍摄照片和视频通话 | 用户首次使用相机相关功能时会申请权限 |
| 振动权限 | 用于消息通知时的振动提醒 | 应用需要使用振动提醒时 |
该模块将在 Android 应用中添加如下权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.VIBRATE" />
信息
注意:【获取好友列表/获取关注列表/获取粉丝列表】需要双方都授予好友关系权限,在登录接口的 scopes 参数中添加 user_friends 权限。
SDK 获取
远程依赖
NPMJS 方式:在 Packages/manifest.json 中添加:
"dependencies":{
"com.taptap.sdk.core":"4.11.0",
"com.taptap.sdk.login":"4.11.0",
"com.taptap.sdk.relationlite":"4.11.0"
}
GitHub 方式:在 Packages/manifest.json 中添加:
"dependencies":{
"com.taptap.sdk.core":"https://github.com/taptap/tapsdk-unity-dist.git?path=/Core#4.11.0",
"com.taptap.sdk.login":"https://github.com/taptap/tapsdk-unity-dist.git?path=/Login#4.11.0",
"com.taptap.sdk.relationlite":"https://github.com/taptap/tapsdk-unity-dist.git?path=/RelationLite#4.11.0"
}
本地文件导入
在 下载页 下载并导入以下 unitypackage 文件:
TapSDK_Core.unitypackage(TapTapSDK 核心模块,必选)TapSDK_Login.unitypackage(TapTapSDK 登录模块,必选)TapSDK_RelationLite.unitypackage(TapTapSDK 好友 Lite 模块,必选)
外部唤起工程配置
为了让玩家能够通过邀请上线或邀请组队等消息唤起游戏,开发者需要在工程中添加如下配置:
请在 Assets/Plugins 目录下创建 TDS-Info.json 文件,并将 client_id 对应值替换为游戏的 Client ID:
{
"app": {
"client_id": "游戏 Client ID"
}
}
注册/注销 统一状态码监听回调
统一状态回调,不同 code 代表不同的状态。
using TapSDK.RelationLite;
RelationLiteCallback callback = new RelationLiteCallback();
TapTapRelationLite.RegisterRelationLiteCallback(callback);
TapTapRelationLite.UnregisterRelationLiteCallback(callback);
class RelationLiteCallback : ITapTapRelationLiteCallback
{
public RelationLiteCallback(){}
public void OnResult(int code)
{
// 处理好友 SDK 的状态码
// 700001:需要登录
// 700002:需要授权 TapTap 好友关系权限,在调用登录时添加 user_friends 权限
}
}
注册邀请回调
当玩家点击 TapTap 邀请消息并打开游戏时,SDK 会解析邀请信息,开发者可通过注册该回调获取发起邀请的用户和组队信息。示例如下:
using System;
using UnityEngine;
using TapSDK.RelationLite;
class DemoRelationLiteInviteCallback : ITapTapRelationLiteInviteCallback
{
private Action<string> callback;
public DemoRelationLiteInviteCallback(Action<string> callback)
{
this.callback = callback;
}
public void OnGameInviteReceived(string openId, string unionId)
{
callback($"收到邀请上线: openId={openId}, unionId={unionId}");
}
public void OnTeamInviteReceived(string openId, string unionId, string teamId)
{
callback($"收到组队邀请: openId={openId}, unionId={unionId}, teamId={teamId}");
}
}
var inviteCallback = new DemoRelationLiteInviteCallback(msg =>
{
Debug.Log(msg);
});
TapTapRelationLite.RegisterRelationLiteInviteCallback(inviteCallback);
TapTapRelationLite.UnregisterRelationLiteInviteCallback(inviteCallback);
邀请好友上线
打开邀请好友页面,向选中好友发送邀请上线消息。
using TapSDK.RelationLite;
TapTapRelationLite.InviteGame();
邀请好友组队
打开邀请好友页面,向选中好友发送邀请组队消息,需要传组队相关参数teamId。
using TapSDK.RelationLite;
string teamId = "";
TapTapRelationLite.InviteTeam(teamId);
获取好友列表
获取当前用户的好友列表。
using TapSDK.RelationLite;
// 如非第一页 使用接口返回的nextPageToken
string nextPageToken = "";
try
{
var result = await TapTapRelationLite.GetFriendsList(nextPageToken);
// result.nextPageToken 下一页请求token,分页请求需传入
// result.list 好友列表请求结果
}
catch (Exception e)
{
Debug.Log($"friendsList request error : {e.Message}");
}
获取关注列表
获取当前用户的关注列表。
using TapSDK.RelationLite;
// 如非第一页 使用接口返回的nextPageToken
string nextPageToken = "";
try
{
var result = await TapTapRelationLite.GetFollowingList(nextPageToken);
// result.nextPageToken 下一页请求token,分页请求需传入
// result.list 关注列表请求结果
}
catch (Exception e)
{
Debug.Log($"followingList request error : {e.Message}");
}
获取粉丝列表
获取当前用户的粉丝列表。
using TapSDK.RelationLite;
// 如非第一页 使用接口返回的nextPageToken
string nextPageToken = "";
try
{
var result = await TapTapRelationLite.GetFansList(nextPageToken);
// result.nextPageToken 下一页请求token,分页请求需传入
// result.list 粉丝列表请求结果
}
catch (Exception e)
{
Debug.Log($"fansList request error : {e.Message}");
}
同步好友关系(openId)
使用好友 openId 将好友关系同步至 TapTap。
using TapSDK.RelationLite;
// 1-新增好友 2-删除好友
int action = 1;
// 当前用户昵称
string nickname = "";
// 好友用户昵称
string friendNickname = "";
// 好友openId
string friendOpenId = "";
try
{
await TapTapRelationLite.SyncRelationshipWithOpenId(action, nickname, friendNickname, friendOpenId);
}
catch (Exception e)
{
Debug.Log($" request error : {e.Message}");
}
同步好友关系(unionId)
使用好友 unionId 将好友关系同步至 TapTap。
using TapSDK.RelationLite;
// 1-新增好友 2-删除好友
int action = 1;
// 当前用户昵称
string nickname = "";
// 好友用户昵称
string friendNickname = "";
// 好友 unionId
string friendUnionId = "";
try
{
await TapTapRelationLite.SyncRelationshipWithUnionId(action, nickname, friendNickname, friendUnionId);
}
catch (Exception e)
{
Debug.Log($" request error : {e.Message}");
}
展示 TapTap 用户名片
展示指定用户的名片弹窗,可用于关注/取关用户。
using TapSDK.RelationLite;
string openId = "";
string unionId = "";
TapTapRelationLite.ShowTapUserProfile(openId, unionId);
国际化
TapTapRelationLite 支持设置语言:目前只支持简体中文