iOS SDK 开发指南
本文介绍如何在游戏中加入好友系统。
集成前准备
- 参考 开发者中心配置 创建应用、配置包名与签名证书
- 参考 iOS 集成指南完成 TapSDK 基础接入
- 好友 Lite 模块依赖于 TapTap 登录模块,开发者接入前应先完成 TapTap 登录的接入
注意:【获取好友列表/获取关注列表/获取粉丝列表】需要双方都授予好友关系权限,在登录接口的 scopes 参数中添加 user_friends 权限。
SDK 获取
远程依赖
- 在工程 Podfile 文件中对应模块下添加依赖:
pod 'TapTapSDK/RelationLite', '~> 4.11.0'
- 执行
Pod install下载对应依赖文件
本地文件依赖
好友 Lite 依赖于初始化和 TapTap 登录模块,使用本地文件方式添加依赖时,需先参考集成指南 和 TapTap 登录添加对应本地文件依赖项。
- 在下载页下载如下文件:
TapTapRelationLiteSDK.xcframework好友依赖库TapTapRelationLiteResource.bundle好友资源文件TapTapProfileSDK.xcframework用户名片依赖库TapTapProfileResource.bundle用户名片资源文件TapTapKingfisher.xcframework基础库
- 在工程中添加
framework静态库,注意添加时选择 Embed 方式为 Do Not Embed,导入bundle资源文件
外部唤起工程配置
为了让玩家能够通过邀请上线或邀请组队等消息唤起游戏,开发者需要在工程中添加如下配置:
-
在 Xcode 工程的
Info.plist中添加 URL Scheme:tds{clientId},并将{clientId}替换为游戏的 Client ID。 -
在 openURL 回调中添加 SDK 处理
- Swift
- Objective-C
a) 如果项目中有
SceneDelegate.swift,请在该文件中添加如下代码:import TapTapRelationLiteSDKfunc scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {for context in URLContexts {/// 是否被好友模块处理if TapTapRelationLite.open(url: context.url) {return}}}b) 如果项目中只有
AppDelegate.swift,请在该文件中添加如下代码:import TapTapRelationLiteSDKfunc application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {return TapTapRelationLite.open(url: url)}func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {return TapTapRelationLite.open(url: url)}a) 如果项目中有
SceneDelegate.m,请在该文件中添加如下代码:#import <TapTapRelationLiteSDK/TapTapRelationLiteSDK-Swift.h>#pragma mark - 处理外部 URL 打开(iOS 13+)- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts API_AVAILABLE(ios(13.0)) {for (UIOpenURLContext *context in URLContexts) {/// 是否被好友模块处理if ([TapTapRelationLite openWithUrl:context.URL]) {return;}}}b) 如果项目中只有
AppDelegate.m,请在该文件中添加如下代码:#import <TapTapRelationLiteSDK/TapTapRelationLiteSDK-Swift.h>- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {return [TapTapRelationLite openWithUrl:url];}- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {return [TapTapRelationLite openWithUrl:url];}
注册/注销 统一状态码监听回调
统一状态回调,不同 code 代表不同的状态。
- Swift
- Objective-C
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
注册邀请回调
当玩家点击 TapTap 邀请消息并打开游戏时,SDK 会解析邀请信息,开发者可通过注册该回调获取发起邀请的用户和组队信息。示例如下:
- Swift
- Objective-C
import TapTapRelationLiteSDK
class InviteCallback: NSObject, TapTapRelationLiteInviteDelegate {
func onGameInviteReceived(openId: String, unionId: String) {
NSLog("收到邀请上线 openId = \(openId) unionId = \(unionId)")
}
func onTeamInviteReceived(openId: String, unionId: String, teamId: String) {
NSLog("收到组队邀请 openId = \(openId) unionId = \(unionId) teamId = \(teamId)")
}
}
let inviteDelegate = InviteCallback()
TapTapRelationLite.registerRelationLiteInviteDelegate(delegate: inviteDelegate)
TapTapRelationLite.unregisterRelationLiteInviteDelegate(delegate: inviteDelegate)
#import "TapTapRelationLiteSDK/TapTapRelationLiteSDK-Swift.h"
@interface TapSDKInviteCallback : NSObject <TapTapRelationLiteInviteDelegate>
@end
@implementation TapSDKInviteCallback
- (void)onGameInviteReceivedWithOpenId:(NSString *)openId unionId:(NSString *)unionId {
NSLog(@"收到邀请上线 openId = %@, unionId = %@", openId, unionId);
}
- (void)onTeamInviteReceivedWithOpenId:(NSString *)openId unionId:(NSString *)unionId teamId:(NSString *)teamId {
NSLog(@"收到组队邀请 openId = %@, unionId = %@, teamId = %@", openId, unionId, teamId);
}
@end
TapSDKInviteCallback *inviteCallback = [TapSDKInviteCallback new];
[TapTapRelationLite registerRelationLiteInviteDelegateWithDelegate:inviteCallback];
[TapTapRelationLite unregisterRelationLiteInviteDelegateWithDelegate:inviteCallback];
邀请好友上线
打开邀请好友页面,向选中好友发送邀请上线消息。
- Swift
- Objective-C
import TapTapRelationLiteSDK
TapTapRelationLite.inviteGame()
#import "TapTapRelationLiteSDK/TapTapRelationLiteSDK-Swift.h"
[TapTapRelationLite inviteGame];
邀请好友组队
打开邀请好友页面,向选中好友发送邀请组队消息,需要传组队相关参数teamId。
- Swift
- Objective-C
import TapTapRelationLiteSDK
let teamId = ""
TapTapRelationLite.inviteTeam(teamId: teamId)
#import "TapTapRelationLiteSDK/TapTapRelationLiteSDK-Swift.h"
NSString * teamId = @"";
[TapTapRelationLite inviteTeamWithTeamId:teamId];
获取好友列表
获取当前用户的好友列表。
- Swift
- Objective-C
import TapTapRelationLiteSDK
let nextPageToken = ""
TapTapRelationLite.getFriendsList(nextPageToken: nextPageToken) { result, error in
if let error {
NSLog("request error : \(error.localizedDescription)")
return
}
// 请求成功, 好友数据:result?.list, 下一页 token : result?.nextPageToken
}
#import "TapTapRelationLiteSDK/TapTapRelationLiteSDK-Swift.h"
NSString * nextPageToken = @"";
[TapTapRelationLite getFriendsListWithNextPageToken:nextPageToken completion:^(RelationLiteUserResult * _Nullable result, NSError * _Nullable error) {
if(error){
NSLog(@"request error : %@", error.localizedDescription);
return;
}
// 请求成功, 好友数据:result.list, 下一页 token :result.nextPageToken
}];
获取关注列表
获取当前用户的关注列表。
- Swift
- Objective-C
import TapTapRelationLiteSDK
let nextPageToken = ""
TapTapRelationLite.getFollowingList(nextPageToken: nextPageToken) { result, error in
if let error {
NSLog("request error : \(error.localizedDescription)")
return
}
// 请求成功, 关注用户数据:result?.list, 下一页 token : result?.nextPageToken
}
#import "TapTapRelationLiteSDK/TapTapRelationLiteSDK-Swift.h"
NSString * nextPageToken = @"";
[TapTapRelationLite getFollowingListWithNextPageToken:nextPageToken completion:^(RelationLiteUserResult * _Nullable result, NSError * _Nullable error) {
if(error){
NSLog(@"request error : %@", error.localizedDescription);
return;
}
// 请求成功, 关注用户数据:result.list, 下一页 token :result.nextPageToken
}];
获取粉丝列表
获取当前用户的粉丝列表。
- Swift
- Objective-C
import TapTapRelationLiteSDK
let nextPageToken = ""
TapTapRelationLite.getFansList(nextPageToken: nextPageToken) { result, error in
if let error {
NSLog("request error : \(error.localizedDescription)")
return
}
// 请求成功, 粉丝数据:result?.list, 下一页 token : result?.nextPageToken
}
#import "TapTapRelationLiteSDK/TapTapRelationLiteSDK-Swift.h"
NSString * nextPageToken = @"";
[TapTapRelationLite getFansListWithNextPageToken:nextPageToken completion:^(RelationLiteUserResult * _Nullable result, NSError * _Nullable error) {
if(error){
NSLog(@"request error : %@", error.localizedDescription);
return;
}
// 请求成功, 粉丝数据:result.list, 下一页 token :result.nextPageToken
}];
同步好友关系(openId)
使用好友 openId 将好友关系同步至 TapTap。
- Swift
- Objective-C
import TapTapRelationLiteSDK
let action = TapTapRelationLiteSyncType.ADD_FRIEND
let nickname = ""
let friendNickname = ""
let friendOpenId = ""
TapTapRelationLite.syncRelationshipWithOpenId(action: action , nickname: nickname, friendNickname: friendNickname, friendOpenId: friendOpenId) { error in
if let error {
NSLog("request error : \(error.localizedDescription)")
return
}
// 同步成功
}
#import "TapTapRelationLiteSDK/TapTapRelationLiteSDK-Swift.h"
NSInteger action = TapTapRelationLiteSyncType.ADD_FRIEND;
NSString * nickName = @"";
NSString * friendNickName = @"";
NSString * friendOpenId = @"";
[TapTapRelationLite syncRelationshipWithOpenIdWithAction:action nickname:nickName friendNickname:friendNickName friendOpenId:friendOpenId completion:^(NSError * _Nullable error) {
if(error){
NSLog(@" sync fail error = %@", error.localizedDescription);
return;
}
//同步成功
}];
同步好友关系(unionId)
使用好友 unionId 将好友关系同步至 TapTap。
- Swift
- Objective-C
import TapTapRelationLiteSDK
let action = TapTapRelationLiteSyncType.ADD_FRIEND
let nickname = ""
let friendNickname = ""
let friendUnionId = ""
TapTapRelationLite.syncRelationshipWithUnionId(action: action , nickname: nickname, friendNickname: friendNickname, friendUnionId: friendUnionId) {
error in
if let error {
NSLog("request error : \(error.localizedDescription)")
return
}
// 同步成功
}
#import "TapTapRelationLiteSDK/TapTapRelationLiteSDK-Swift.h"
NSInteger action = TapTapRelationLiteSyncType.ADD_FRIEND;
NSString * nickName = @"";
NSString * friendNickName = @"";
NSString * friendUnionId = @"";
[TapTapRelationLite syncRelationshipWithUnionIdWithAction: action nickname:nickName friendNickname:friendNickName friendUnionId:friendUnionId completion:^(NSError * _Nullable error) {
if(error){
NSLog(@" sync fail error = %@", error.localizedDescription);
return;
}
// 同步成功
}];
展示 TapTap 用户名片
展示指定用户的名片弹窗,可用于关注/取关用户。
- Swift
- Objective-C
import TapTapRelationLiteSDK
// openId unionId二选一即可
let openId = ""
let unionId = ""
TapTapRelationLite.showTapUserProfile(openId: openId)
TapTapRelationLite.showTapUserProfile(unionId: unionId)
#import "TapTapRelationLiteSDK/TapTapRelationLiteSDK-Swift.h"
// openId unionId二选一即可
NSString * openId = @"";
NSString * unionId = @"";
[TapTapRelationLite showTapUserProfileWithOpenId:openId unionId:unionId];
国际化
TapTapRelationLite 支持设置语言:目前只支持简体中文