跳转到内容

社交(Cocos)

Cocos 封装里有两层社交:

  • FRVR 好友图谱 —— 同步到服务器、跨渠道:syncFriendsgetAllFriendsaddFriendremoveFriend
  • 平台原生面 —— 原生分享面板、邀请选择器、更新通道:shareMessageinviteUserssendUpdategetPlatformFriends。受当前渠道限制。

实时事件(好友状态变更、游戏邀请 socket)请见 Social live

需要玩家已登录。

await FRVRSDK.instance.syncFriends();
const friends = await FRVRSDK.instance.getAllFriends();

await FRVRSDK.instance.addFriend(friendId);
await FRVRSDK.instance.removeFriend(friendId);

每个会话调用一次 syncFriends() —— 它会把渠道好友列表上传给 FRVR 后端,后端据此匹配并注册他们。

不同渠道暴露不同子集 —— 显示按钮前先判断:

if (FRVRSDK.instance.isSocialAPISupported('shareMessage')) {
  showShareButton();
}

if (await FRVRSDK.instance.canInvite()) {
  showInviteButton();
}

可传给 isSocialAPISupported 的常见 API 名:shareMessageinviteUserssendUpdategetPlatformFriendsgetContextIdgetContextDatagetContextPlayers

发布到用户的动态 / 故事 / 分享面板,具体行为视渠道而定。

await FRVRSDK.instance.shareMessage({
  image:    imageBase64,            // BASE64 / JPEG / PNG
  text:     'I hit 10,000 points!',
  headline: 'New high score',
  cta:      'Beat my score',
  entryPointData: { from: 'share', score: 10000 },
});
字段类型必填说明
imagestring图片 data URL 或托管 URL(BASE64 / JPEG / PNG)。
textstring正文 / 描述文字。
headlinestring正文上方的简短标题(渠道支持时)。
ctastring行动号召按钮文案。
entryPointDataobject接收方打开分享时,通过入口点拿到的任意 payload。

打开渠道的好友选择器,让玩家把具体联系人邀请进游戏。

if (await FRVRSDK.instance.canInvite()) {
  await FRVRSDK.instance.inviteUsers({
    image:    imageBase64,
    text:     'Come play with me!',
    headline: 'Join my game',
    cta:      'Play now',
    entryPointData: { from: 'invite', lobbyId: 'lobby_42' },
  });
}
字段类型必填说明
imagestring图片 data URL 或托管 URL(BASE64 / JPEG / PNG)。
textstring与图片一同展示的文案。
headlinestring正文上方的简短标题(渠道支持时)。
ctastring行动号召按钮文案。
entryPointDataobject接收方加入时,通过入口点拿到的 payload。

canInvite() 在不支持邀请的渠道返回 false —— 用它来控制 UI 的显隐。

把控制权暂时交给平台,让它通过模板下发一条更新(Facebook context update、Snapchat sticker、Discord activity 等)。模板存放在 SDK 默认模板配置里 —— 把对应渠道的配置拷进游戏目录后才能用。

await FRVRSDK.instance.sendUpdate({
  template:       'JOIN_PLAYER',
  image:          imageBase64,
  bitmojiVariant: 'HAPPY',                   // 仅 Snapchat
  entryPointData: { lobbyId: 'lobby_42' },
});
字段类型说明
templatestring预定义模板名(如 'JOIN_PLAYER')。
imagestring图片 data URL 或托管 URL(BASE64 / JPEG / PNG)。
bitmojiVariantstringSnapchat bitmoji 表情 —— 'HAPPY''WINK''HEARTEYES' 等。
entryPointDataobject接收方打开更新时,通过入口点拿到的 payload。
overrideobject各渠道的原始 payload(snapchatfacebookInstantfacebookRoomsdiscord),用来替换模板字段。

读取渠道原生的好友列表(例如玩家在 Facebook gaming 上的好友):

const platformFriends = await FRVRSDK.instance.getPlatformFriends();
// → Friend[]:{ id, name, nickname?, image, channel }

适合做模仿宿主平台样式的邀请 UI,或预填你自己的”好友选择器”。需要跨渠道的 FRVR 图谱时,改用 getAllFriends()

玩家在宿主上当前所处的位置(FB context、Snap chat、Discord activity):

const ctxId      = await FRVRSDK.instance.getContextId();
const ctxData    = await FRVRSDK.instance.getContextData();
const ctxPlayers = await FRVRSDK.instance.getContextPlayers();

getContextPlayers()getPlatformFriends() 返回相同的 Friend[] 结构,但范围限定在当前与玩家同处一个对话 / 房间 / 派对的人。