好友(不含聊天)开发指南
本文介绍如何在游戏中加入好友系统。
集成前准备
- 参考 开发者中心配置 创建应用、配置包名与签名证书
- 参考集成指南(Unity、Android、iOS)完成对应平台或引擎的基础接入
- 好友 Lite 模块依赖于 TapTap 登录模块,开发者接入前应先完成 TapTap 登录的接入
info
注意:【获取好友列表/获取关注列表/获取粉丝列表】需要双方都授予好友关系权限,在登录接口的 scopes 参数中添加 user_friends 权限。
权限说明
- Android
该模块需要如下权限:
| 权限 | 使用目的 | 权限申请时机 |
|---|---|---|
| 网络权限 | 用于访问网络数据 | 用户首次使用该功能时会申请权限 |
| 网络状态权限 | 用于检查网络连接状态(如 Wi-Fi 或移动数据是否可用) | 用户首次使用该功能时会申请权限 |
| 读取外部存储权限 | 用于读取设备上的文件和媒体内容 | 用户首次使用相关功能时会申请权限 |
| 写入外部存储权限 | 用于保存文件到设备存储 | 用户首次使用文件保存功能时会 申请权限 |
| 管理外部存储权限 | 用于管理设备上的文件 | 用户首次使用文件管理功能时会申请权限 |
| 前台服务权限 | 用于在应用处于后台时保持某些功能运行 | 应用需要在后台运行服务时 |
| 相机权限 | 用于拍摄照片和视频通话 | 用户首次使用相机相关功能时会申请权限 |
| 振动权限 | 用于消息通知时的振动提醒 | 应用需要使用振动提醒时 |
该模块将在应用中添加如下权限:
<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" />
SDK 获取
- Unity
- Android
- iOS
远程依赖
NPMJS 方式:在 Packages/manifest.json 中添加:
"dependencies":{
"com.taptap.sdk.core":"4.9.5",
"com.taptap.sdk.login":"4.9.5",
"com.taptap.sdk.relationlite":"4.9.5"
}
GitHub 方式:在 Packages/manifest.json 中添加:
"dependencies":{
"com.taptap.sdk.core":"https://github.com/taptap/tapsdk-unity-dist.git?path=/Core#4.9.5",
"com.taptap.sdk.login":"https://github.com/taptap/tapsdk-unity-dist.git?path=/Login#4.9.5",
"com.taptap.sdk.relationlite":"https://github.com/taptap/tapsdk-unity-dist.git?path=/RelationLite#4.9.5"
}
本地文件导入
在 下载页 下载并导入以下 unitypackage 文件:
TapSDK_Core.unitypackage(TapTapSDK 核心模块,必选)TapSDK_Login.unitypackage(TapTapSDK 登录模块,必选)TapSDK_RelationLite.unitypackage(TapTapSDK 好友 Lite 模块,必选)
在 app module 的 build.gradle 中添加对应依赖:
dependencies {
implementation 'com.taptap.sdk:tap-core:4.9.5'
implementation 'com.taptap.sdk:tap-login:4.9.5'
implementation 'com.taptap.sdk:tap-relation-lite:4.9.5'
}
远程依赖
- 在工程 Podfile 文件中对应模块下添加依赖:
pod 'TapTapSDK/RelationLite', '~> 4.9.5'
- 执行
Pod install下载对应依赖文件
本地文件依赖
好友 Lite 依赖于初始化和 TapTap 登录模块,使用本地文件方式添加依赖时,需先参考集成指南 和 TapTap 登录添加对应本地文件依赖项。
- 在下载页下载如下文件:
TapTapRelationLiteSDK好友依赖库TapTapRelationLiteResource.bundle好友资源文件TapTapProfileSDK用户名片依赖库TapTapProfileResource.bundle用户名片资源文件TapTapKingfisher基础库
- 在工程中添加
framework静态库,注意添加时选择 Embed 方式为 Do Not Embed,导入bundle资源文件
注册/注销 统一状态码监听回调
统一状态回调,不同 code 代表不同的状态。
- Unity
- Android Java
- Android Kotlin
- iOS Swift
- iOS Objective-C
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 权限
}
}
import com.taptap.sdk.relation.lite.internal.TapTapRelationLiteCallback;
import com.taptap.sdk.relation.lite.TapTapRelationLite;
import com.taptap.sdk.relation.lite.internal.TapTapRelationLiteCode;
TapTapRelationLiteCallback callback = new TapTapRelationLiteCallback(){
@Override
public void onRelationLiteResult(int code) {
// 处理好友 SDK 的状态码
// TapTapRelationLiteCode.NEED_LOGIN:需要登录
// TapTapRelationLiteCode.NEED_USER_FRIENDS_SCOPE:需要授权 TapTap 好友关系权限,在调用登录时添加 user_friends 权限
}
};
TapTapRelationLite.registerRelationLiteCallback(callback);
TapTapRelationLite.unregisterRelationLiteCallback(callback);
import com.taptap.sdk.relation.lite.internal.TapTapRelationLiteCallback
import com.taptap.sdk.relation.lite.TapTapRelationLite
import com.taptap.sdk.relation.lite.internal.TapTapRelationLiteCode
private val relationLiteCallback = object : TapTapRelationLiteCallback {
override fun onRelationLiteResult(code: Int) {
when (code) {
NEED_LOGIN -> appendLog("未登录,请先登录")
NEED_USER_FRIENDS_SCOPE -> appendLog("未授权好友关系,请授权")
}
}
}
TapTapRelationLite.registerRelationLiteCallback(callback = relationLiteCallback)
TapTapRelationLite.unregisterRelationLiteCallback(callback = relationLiteCallback)
import TapTapRelationLiteSDK
class MyRelationLiteDelegate: NSObject, TapTapRelationLiteDelegate {
func onRelationLiteResult(code: Int) {
switch(code){
case TapTapRelationLiteCode.NEED_LOGIN:
// 需要登录
case TapTapRelationLiteCode.NEED_USER_FRIENDS_SCOPE:
// 缺少好友权限
case TapTapRelationLiteCode.REQUEST_ERROR:
// 请求错误
default:
// 其他错误
}
}
}
let myRelationLiteDelegate = MyRelationLiteDelegate()
// 注册好友回调
TapTapRelationLite.registerRelationLiteDelegate(delegate: myRelationLiteDelegate)
// 移除好友回调
TapTapRelationLite.unregisterRelationLiteDelegate(delegate: myRelationLiteDelegate)
#import "TapTapRelationLiteSDK/TapTapRelationLiteSDK-Swift.h"
@interface GameMainController() <TapTapRelationLiteDelegate>
@end
@implementation GameMainController
- (void) handleRelationDelegate {
[TapTapRelationLite registerRelationLiteDelegateWithDelegate:self];
[TapTapRelationLite unregisterRelationLiteDelegateWithDelegate:self];
}
- (void)onRelationLiteResultWithCode:(NSInteger)code {
if(code == TapTapRelationLiteCode.NEED_LOGIN){
// 未登录
}else if(code == TapTapRelationLiteCode.NEED_USER_FRIENDS_SCOPE){
// 缺少好友权限授权
}else if (code == TapTapRelationLiteCode.REQUEST_ERROR){
// 请求错误
}else{
// 其他错误
}
}
@end
邀请好友上线
打开邀请好友页面,向选中好友发送邀请上线消息。
- Unity
- Android Java
- Android Kotlin
- iOS Swift
- iOS Objective-C
using TapSDK.RelationLite;
TapTapRelationLite.InviteGame();
import com.taptap.sdk.relation.lite.TapTapRelationLite;
TapTapRelationLite.inviteGame();
import com.taptap.sdk.relation.lite.TapTapRelationLite
TapTapRelationLite.inviteGame()
import TapTapRelationLiteSDK
TapTapRelationLite.inviteGame()
#import "TapTapRelationLiteSDK/TapTapRelationLiteSDK-Swift.h"
[TapTapRelationLite inviteGame];
邀请好友组队
打开邀请好友页面,向选中好友发送邀请组队消息,需要传组队相关参数teamId。
- Unity
- Android Java
- Android Kotlin
- iOS Swift
- iOS Objective-C
using TapSDK.RelationLite;
string teamId = "";
TapTapRelationLite.InviteTeam(teamId);
import com.taptap.sdk.relation.lite.TapTapRelationLite;
String teamId = "";
TapTapRelationLite.inviteTeam(teamId);
import com.taptap.sdk.relation.lite.TapTapRelationLite
val teamId = ""
TapTapRelationLite.inviteTeam(teamId = teamId)
import TapTapRelationLiteSDK
let teamId = ""
TapTapRelationLite.inviteTeam(teamId: teamId)
#import "TapTapRelationLiteSDK/TapTapRelationLiteSDK-Swift.h"
NSString * teamId = @"";
[TapTapRelationLite inviteTeamWithTeamId:teamId];