# 给朋友送道具

# 功能说明

基础库最低版本 v3.11.2

给朋友送道具是小游戏官方提供的轻量化好友互动送道具组件。游戏内,提供用户给微信朋友批量赠送或领取道具礼包功能;游戏外「服务通知」的社交形式增加回流触达

# 1.赠送道具给朋友

游戏内 开放数据域 开发者可选择 开放数据域自定义赠送界面样式 或 直接拉取平台组件;

# 2.领取朋友赠送的道具

用户可以在以下渠道,领取朋友赠送的道具

1)小程序右上角菜单「福利」入口内

2)游戏自行设置入口,打开平台福利半屏页面。

​​ 可同时监听平台事件,出提醒红点,当符合“有礼物待领取”的用户主动进入游戏,开发者可以「游戏内跑马灯」或「入口气泡」提供游戏内承接。

道具领取限额

有效期:已赠送道具有效期为48小时;

每日上限:开发者可在[1,10]范围内自定义每个用户每日领取道具上限;

领取通知

送道具功能支持以社交形式增加回流触达——当用户收到好友赠送的道具,平台将以服务通知形式,在游戏外触达已订阅用户。开发者需在游戏内设置任务,通过 wx.requestSubscribeSystemMessage 引导用户订阅「朋友互动提醒」

# 3.送道具任务

开发者可选配置每日送道具任务礼包,以此激励用户每日主动赠送行为,获得更多通知触达曝光与回流机会;

送道具任务礼包领取规则:用户每日送道具达5人,即可在菜单-福利界面领取一份当日送道具任务礼包。

# 接入步骤

# 1.MP 配置礼包

配置位置:mp地图 → 运营功能管理 → 奖励配置 → 游戏礼包管理 → 礼包配置。礼包接入文档

  • 礼包类型1:给朋友送道具

​​ 用于每日好友互动赠送。开发者可在范围[ 1, 10 ]内自定义「用户单日限制」,规定单个用户每日领取上限。配置完成后,平台将自动展示配置礼包中 首个道具icon作为组件中赠送的礼包icon。

  • 礼包类型2:送道具任务礼包(可选配置)

​​ 用于激励用户每日赠送行为。配置完成后,平台将自动展示配置礼包中首个道具icon作为组件中送道具任务礼包的icon。用户在完成每日5次道具赠送后,当日可领取一次礼包。

# 2.开发接入实现

# 1)道具赠送

接入方式1-平台组件:调用PageManager拉取送道具组件

// 示例代码
let pageManager = wx.createPageManager();
pageManager.load({
  openlink: 'ZmNux0GwB1lH3lpraFJCGrHX5ex5aYVqrqi0Z8870fK-mygTZ2y5kuPlXMyf37Stc78m3CtMvHJlO5WTsJnIkoVfMW8GrUDd2W5Mb81f23ydxCJzcSi_wf8YtFE-WME3', // 通过该固定openlink,打开平台送道具组件
}).then(res => {
  pageManager.show();
});

接入方式2-开放数据域:

从基础库 v3.11.2 开始,基础库在开放数据域新增了wx.getFriendSendGiftStatuswx.sendGiftToFriend 两个接口使开发者能够接入上述赠送道具能力。

// 注意做好 API 兼容性判断,低版本不存在该接口
if (wx.getFriendSendGiftStatus) {
    // step① 批量查询好友的送礼状态,openidList 可以是来自 getFriendCloudStorage 查询到的好友列表
     wx.getFriendSendGiftStatus({
        giftId: 'xxxxxxx', // 礼包 id
        openidList: ['xxxx', 'xxxx']
        success(res) {
            // 根据状态渲染好友榜单,比如已经赠送的好友显示“已赠送”按钮
        }
    });
}

if (wx.sendGiftToFriend) {
    // step② 点击好友的赠送按钮,发起赠送操作
    wx.sendGiftToFriend({
      giftId: 'xxxxx',
      openid: 'xxxxx',
      success(res) {
        console.log('send success', res);
        // 刷新已赠送的状态
      },
      fail: console.error,
    });
}

# 2)游戏内入口,领取朋友赠送的道具

通过PageManager.on(string eventName, function callback) 接口监听 getGiftStatus 事件,可做游戏内入口承接;根据礼包道具领取发货情况,主动刷新该用户道具数量。

let pageManager = wx.createPageManager();
pageManager.load({
  openlink: 'OAlx0CJihzz1pDQQNr9_GZ7fE43wOxBJTreaTcShoIbkZFfBl3K8bsXgnRJY3PAP0Ij3gLOVWYaSeMHP4OSg7qreYJDpNwq_fqfq3KT5erP5wJzRcuhWWSnD7rGATiN6', // 通过该固定openlink,打开道具领取界面
}).then(res => {});
// 注意这是一个查询接口,如果需要多次查询需要多次createPageManager
pageManager.on("getGiftStatus", (res: {
  hasGift: boolean; 
  hasFriendGift: boolean;
}) => { 
  if( res.hasGift ) {
    // 可领取普通礼包
    console.log("可领取普通礼包")
  }

  if( res.hasFriendGift ) {
    // 可领取好友礼包
  }
});

pageManager.on("destroy", () => {
  // 监听到destroy事件后,pageManager不再可用,不可以再次show
})

# 3)游戏内,引导用户订阅赠送提醒

使用开放数据域发起赠送后,可在成功回调中引导用户订阅消息

if (wx.sendGiftToFriend) {
    wx.sendGiftToFriend({
      giftId: 'xxxxx',
      openid: 'xxxxx',
      success(res) {
        // 可在赠送道具成功回调中,调起小游戏系统订阅消息
        wx.requestSubscribeSystemMessage({
          // 订阅好友互动提醒消息
          msgTypeList: ['SYS_MSG_TYPE_INTERACTIVE'],
          success (res) {        
          }
         })
      },
      fail: console.error,
    });
}

点击咨询小助手