关注模式
阅读本文前请先完成 SDK 初始化。
好友通知设置
好友模块默认会向游戏推送好友状态及申请的通知,如果游戏需要关闭,可调用如下接口:
- Unity
- Android
- iOS
try {
await TDSFollows.DisableFriendNotification();
TapLog("关闭推送通知成功");
} catch (Exception e) {
TapLog($"关闭推送通知失败: ${e}");
}
TDSFollows.disableFriendNotification(new Callback<Void>() {
@Override
public void onSuccess(Void result) {
toast("消息推送关闭成功");
}
@Override
public void onFail(TDSFriendError error) {
toast("消息推送关闭失败 " + error.detailMessage);
}
});
void (^callback)(BOOL succeeded, NSError * error) = ^(BOOL succeeded, NSError * _Nullable error){
if (succeeded) {
[LogHelper log:LogInfoTypeDisplay :[NSString stringWithFormat:@"设置成功"]];
} else {
[LogHelper log:LogInfoTypeError :[NSString stringWithFormat:@"设置失败"]];
}
};
[TDSFollows disableFriendNotificationWithCallback:callback];
当关闭通知后,如果需要再次开启,可调用如下接口:
- Unity
- Android
- iOS
try {
await TDSFollows.EnableFriendNotification();
TapLog("关闭推送通知成功");
} catch (Exception e) {
TapLog($"关闭推送通知失败: ${e}");
}
TDSFollows.enableFriendNotification(new Callback<Void>() {
@Override
public void onSuccess(Void result) {
toast("消息推送开启成功");
}
@Override
public void onFail(TDSFriendError error) {
toast("消息推送开启失败 " + error.detailMessage);
}
});
void (^callback)(BOOL succeeded, NSError * error) = ^(BOOL succeeded, NSError * _Nullable error){
if (succeeded) {
[LogHelper log:LogInfoTypeDisplay :[NSString stringWithFormat:@"设置成功"]];
} else {
[LogHelper log:LogInfoTypeError :[NSString stringWithFormat:@"设置失败"]];
}
};
[TDSFollows enableFriendNotificationWithCallback:callback];
响应好友变化通知
好友模块支持客户端监听好友状态变化,在游戏中实时给玩家提示。 你需要在调用上线接口前注册好友状态变更监听实例,这样,玩家上线后就能收到相应通知:
- Unity
- Android
- iOS
TDSFollows.FriendStatusChangedDelegate = new TDSFriendStatusChangedDelegate {
// 当前玩家成功上线(长连接建立成功)
OnConnected = () => {},
// 当前玩家长连接断开,SDK 会自动重试,开发者通常无需额外处理
OnDisconnected = () => {},
// 当前连接异常
OnConnectionError = (code, message) => {},
};
TDSFollows.registerFriendStatusChangedListener(new FriendStatusChangedListener() {
// 当前玩家成功上线(长连接建立成功)
@Override
public void onConnected() {}
// 当前玩家长连接断开,SDK 会自动重试,开发者通常无需额外处理
@Override
public void onDisconnected() {}
// 当前连接异常
@Override
public void onConnectError(int code, String msg){});
}
[TDSFollows registerNotificationDelegate:self];
// 当前玩家成功上线(长连接建立成功)
- (void)onConnected {}
// 当前玩家长连接断开,SDK 会自动重试,开发者通常无需额外处理
- (void)onDisconnected {}
// 当前连接异常
- (void)onDisconnectedWithError:(NSError * _Nullable)error {}
如果想要停止监听:
- Unity
- Android
- iOS
TDSFollows.FriendStatusChangedDelegate = null;
TDSFollows.removeFriendStatusChangedListener();
[TDSFollows unregisterNotificationDelegate];
玩家上线
玩家成功登录后,需要调用该接口建立和好友服务云端的长连接。 长连接建立后, 如果网络临时中断,SDK 会在网络恢复后自动重连。
- Unity
- Android
- iOS
await TDSFollows.Online();
TDSFollows.online(new Callback<Void>() {
@Override
public void onSuccess(Void result) {
// 成功
}
@Override
public void onFail(TDSFriendError error) {
// 处理异常
}
});
建立长连接后,如果玩家通过好友邀请链接打开游戏,那么 Android SDK 也会自动发送对应的好友申请。
[TDSFollows online];
玩家下线
玩家登出后,需要调用此接口断开和云端的长连接。
- Unity
- Android
- iOS
await TDSFollows.Offline();
TDSFollows.offline();
[TDSFollows offline];
根据昵称查询好友
在不知道玩家 objectId 的情况下,可以通过玩家昵称查询好友。
例如,搜索昵称为 Tarara 的好友:
- Unity
- Android
- iOS
ReadOnlyCollection<TDSFriendInfo> friendInfos = await TDSFollows.SearchUserByName("Tarara");
foreach (TDSFriendInfo info in friendInfos) {
// 玩家信息
TDSUser user = info.User;
// 富信息数据,详见后文
Dictionary<string, string> richPresence = info.RichPresence;
// 好友是否在线
bool online = info.Online;
}
TDSFollows.searchUserByName("Tarara", new ListCallback<TDSFriendInfo>() {
@Override
public void onSuccess(List<TDSFriendInfo> friendInfoList) {
for (TDSFriendInfo info : friendInfoList) {
// 玩家信息
TDSUser user = info.getUser();
// 富信息数据,详见后文
TDSRichPresence richPresence = info.getRichPresence();
// 好友是否在线
boolean online = info.isOnline();
}
}
@Override
public void onFail(TDSFriendError error) {
toast("Failed search friend by nickname" + error.detailMessage);
}
});
TDSFriendQueryOption *option = [TDSFriendQueryOption new];
option.from = 0;
option.limit = 100;
[TDSFollows searchUserWithNickname:@"Tarara" option:option
callback:^(NSArray<TDSFriendInfo *> * _Nullable friendInfos, NSError * _Nullable error) {
if (friendInfos) {
for (TDSFriendInfo *info in friendInfos) {
// 玩家信息
TDSUser *user = info.user;
// 富信息数据,详见后文
NSDictionary *richPresence = info.richPresence;
// 好友是否在线
BOOL online = info.online;
}
} else if (error) {
// 处理错误
}
}];
注意,使用这一功能的前提是内建账户系统中设置了 nickname(昵称)字段。
参见内建账户系统文档。
好友码
每个已登录玩家都有一个好友码,可以分享给其他玩家用于添加好友。
访问 TDSUser 的 shortId 属性可获取好友码:
- Unity
- Android
- iOS
// currentUser 是已登录的 TDSUser
string shortId = currentUser["shortId"];
String shortId = currentUser.getString("shortId");
NSString *shortId = currentUser[@"shortId"];
可以通过好友码查询玩家:
- Unity
- Android
- iOS
TDSFriendInfo friendInfo = await TDSFollows.SearchUserByShortCode(shortId);
TDSFollows.searchUserByShortCode(shortId, new Callback<TDSFriendInfo>() {
@Override
public void onSuccess(TDSFriendInfo friendInfo) { /* 略(参见上节) */ }
@Override
public void onFail(TDSFriendError error) { /* 略(参见上节) */ }
});
[TDSFollows searchUserWithShortCode:shortId
callback:^(TDSFriendInfo * _Nullable friendInfo, NSError * _Nullable error) {
// 略(参见上节)
}];
根据 objectId 查询好友
除了昵称、好友码外,还可以根据 objectId 查找好友。
查询 objectId 为 5b0b97cf06f4fd0abc0abe35 的好友:
- Unity
- Android
- iOS
TDSFriendInfo friendInfo = await TDSFollows.SearchUserById("5b0b97cf06f4fd0abc0abe35");
TDSFollows.searchUserById("5b0b97cf06f4fd0abc0abe35", new Callback<TDSFriendInfo>() {
@Override
public void onSuccess(TDSFriendInfo friendInfo) { /* 略 */ }
@Override
public void onFail(TDSFriendError error) { /* 略 */ }
});
[TDSFollows searchUserWithObjectId:@"5b0b97cf06f4fd0abc0abe35"
callback:^(TDSFriendInfo * _Nullable friendInfo, NSError * _Nullable error) {
// 略
}];
富信息
富信息用于呈现玩家状态等信息,如在线状态、正在使用哪个英雄、正处于哪个游戏模式等。
在控制台添加富信息相关配置后,可以根据已配置的富信息字段,设置对应的富信息内容:
- Unity
- Android
- iOS
await TDSFollows.SetRichPresence("score", "60");