跳到主要内容

好友列表

在多人游戏中,游戏内的玩家互动对于提升整体游戏体验和发展游戏社区至关重要。Player Network 提供了一个访问玩家游戏中好友列表的界面,其中提供了好友的 OpenID 和个人资料信息。

通过好友列表,玩家可以相互发送或接收游戏中的物品,相互聊天,组建公会或小队共同完成任务,并以游戏中能想到的多种方式相互交流。

除了游戏中的好友,Player Network 还可以检索与玩家当前登录渠道相关联的同玩好友列表。

注册好友列表回调

开发人员可以注册以下回调函数,以接收有关好友列表事件的通知。这样,开发人员就能检测和处理查询好友列表的请求。

API描述
AddFriendResultObserver添加 FriendResult 回调以管理 QueryFriends 的回调
RemoveFriendResultObserver删除 FriendResult 回调

注册回调后,请按照以下说明查询各登录渠道的好友列表。

查询 Discord 好友列表

Player Network 的好友列表功能需要游戏具备访问 Discord 的 identifyrelationships.read、和 activities.write 权限。更多信息,请参见 OAuth2 Scopes

要查询 Discord 好友列表,玩家必须在设备上安装 Discord 应用程序,并使用 Discord 渠道登录游戏。调用 QueryFriends 接口,入参为当前登录渠道,用于检索好友的页码的 int,用于设置每页的好友数的 int,用于确定是否只检索同玩好友的 bool,及一个可以用于任何额外数据的可选参数。

INTLAPI.QueryFriends(1, 10, false, INTLChannel.Discord); //Organizes platform friends to 10 per page, returns to page 1 

查询 Epic 好友列表

Epic 好友列表支持查询平台好友和好友分页。Epic 只支持获取非同玩好友。

调用 QueryFriends 接口,入参为当前登录渠道,用于检索好友的页码的 int,用于设置每页的好友数的 int,用于确定是检索平台好友的 false,及一个可以用于任何额外数据的可选参数。

INTLAPI.QueryFriends(1, 10, false, INTLChannel.Epic); //Organizes platform friends to 10 per page, returns to page 1 

查询 Facebook 好友列表

需要游戏项目组,自行到 Facebook 开发者管理端申请好友列表 user_friends 权限,只有在审核通过后才能使用好友列表功能。更多详情,请联系 Player Network 助手。

图片:应用审核

通过审核后,通过后台接口 /v2/friend/friend_list 获取 Facebook 好友列表。

查询 Steam 好友列表

Steam 好友列表支持查询平台好友和同玩好友,好友分页,以及查询好友状态。Steam 的同玩好友指的是最近一起进行游戏的好友,不一定在 Steam 平台添加了好友。

要使好友列表功能正常运行,玩家必须在其电脑上安装并运行 Steam,且登录状态有效。调用 QueryFriends 接口,入参为当前登录渠道,用于检索好友的页码的 int,用于设置每页的好友数的 int,用于确定是检索同玩好友还是平台好友的 bool,及一个可以用于任何额外数据的可选参数。

// 获取最近一起游戏的好友,按每页 10 个好友获取,获取第一页
INTLAPI.QueryFriends(1, 10, true, INTLChannel.Steam);
// 获取Steam好友,按每页 10 个好友获取,获取第一页
INTLAPI.QueryFriends(1, 10, false, INTLChannel.Steam);
Steam 好友状态

好友状态信息在 FriendResultextra_json 字段中返回。

"extra_json": {
"persona_state": 0
}

persona_state 字段说明:

说明
0未登录
1已登录
2已登录,但繁忙
3自动离开
4自动离开很久
5在线,交易中
6在线,想玩游戏
7在线,但对好友显示为离线。这种状态永远不会向用户公布
Steam 错误码

下表列出了一些 Steam 渠道中的常见错误码。

错误码说明
1031Steam Dll 加载失败
1032需要从 Steam 平台拉取游戏
1033Steam 初始化失败, 一般是因为 steam_appid.txt 没有放在可执行 .exe 文件的同级目录,或者没有启动 Steam 软件造成的

查询 Switch 好友列表

Switch 好友列表支持查询平台好友和同玩好友,以及好友分页。

调用 QueryFriends 接口并传递以下入参:

  • 当前登录渠道,也就是 Switch
  • 代表好友页书的整数,默认从 0 开始
  • 代表一页好友数的整数,此整数不能大于300,即一个页面最多只能有300条数据记录,且每个页面的记录数必须相同
  • 代表支持同玩好友和渠道好友的 booltrue 表示同玩好友,false 表示渠道好友
  • 代表任意额外信息的可选参数
INTLAPI.QueryFriends(1, 10, true, INTLChannel.Switch);

返回的数据结构为:

{
"ret": 0,
"msg": "",
"method_id": 203,
"ret_code": 0,
"ret_msg": "Success",
"extra_json": "{}",
"extinfo": "{}",
"lists": [{
"openid": "eb4621e26d73bdab",
"user_name": "xuzhang",
"gender": 0,
"picture_url": "",
"country": "",
"province": "",
"city": "",
"language": "",
"extra_json": "{\"status\":\"0\",\"isFavorite\":\"true\",\"lastPlayedAppId\":\"0\",\"lastPlayedGroupId\":\"0\",\"lastUpdateTime\":\"1668740158\",\"isSameApplication\ ":\"false\"}"
}, {
"openid": "8867f26c1681ea8b",
"user_name": "swtchtest",
"gender": 0,
"picture_url": "",
"country": "",
"province": "",
"city": "",
"language": "",
"extra_json": "{\"status\":\"0\",\"isFavorite\":\"true\",\"lastPlayedAppId\":\"300761088\",\"lastPlayedGroupId\":\"300761088\",\"lastUpdateTime\":\"1670204409\",\"isSameApplication\":\"true\"}"
}]
}

查询 VK 好友列表

VK 好友列表支持查询平台好友和好友分页。调用 QueryFriends 接口,入参为当前登录渠道,用于检索好友的页码的 int,用于设置每页的好友数的 int,用于确定是否只检索同玩好友的 bool,及一个可以用于任何额外数据的可选参数。

INTLAPI.QueryFriends(1, 10, true, INTLChannel.VK); //Organizes platform friends to 10 per page, returns to page 1 
INTLAPI.QueryFriends(1, 10, false, INTLChannel.VK); //Organizes platform friends to 10 per page, returns to page 1

查询 Xbox Series X|S 好友列表

Xbox Series X|S 好友列表只支持获取同玩好友列表。

调用 QueryFriends 接口,入参为当前登录渠道,用于检索好友的页码的 int,用于设置每页的好友数的 int,用于确定只检索同玩好友的 true,及一个可以用于任何额外数据的可选参数。

返回的数据结构为:

{
"ret": 0,
"msg": "",
"method_id": 203,
"ret_code": 0,
"ret_msg": "Success",
"extra_json": "{}",
"extinfo": "{}",
"lists": [{
"openid": "10027382",
"user_name": "xuzhang",
"gender": 0,
"picture_url": "",
"country": "",
"province": "",
"city": "",
"language": "",
"extra_json": "{\"status\":\"Online\"}"
}, {
"openid": "10027312",
"user_name": "swtchtest",
"gender": 0,
"picture_url": "",
"country": "",
"province": "",
"city": "",
"language": "",
"extra_json": "{\"status\":\"Offline\"}"
}]
}