私域分享增加权益


在分享增加抽奖次数、助力、组团等需要依赖分享来获得权益的场景下,用户分享时需要在链接携带参数以及做一些业务处理。在微信环境下,利用了微信的分享能力做了实现。但在其他环境下(如:APP、小程序)则需要做一些对接。

微信小程序

      由于微信小程序的限制,难以直接调用JS函数。因此直接通过postMessage传递分享的数据。

获取分享参数

      页面加载后通过postMessage传递分享相关参数。注意:小程序接收消息,会在以下特定时机触发组件的message事件:小程序后退、组件销毁、分享、复制链接。

  • 调用示例
    小程序中引入作品链接,通过bindmessage绑定事件函数。
    <web-view src="https://test.eqxiu.cn/gs/10000?cc=QrDE3O6f" bindmessage="shareMessage"/>
    
    data: {
      shareData: {}
    },
    shareMessage(e) {
      const data = e.detail.data && e.detail.data.filter(item => item.type === 'EQS_CREATION_SHARE').sort((a, b) => b.shareData.timesTamp - a.shareData.timesTamp)[0]
      const { shareData }= data //注意第二步需要用到
      console.log('分享信息', shareData )
      this.setData({shareData: shareData});
    }
    
  • 参数示例
    以下是内容中台传递参数的示例:
    wx.miniProgram.postMessage({
      data: {
          type: 'EQS_CREATION_SHARE',
          shareData: {
              title: '特种兵夏令营报名送好礼特种兵夏令营招生方案',
              link: 'https://test.eqxiu.cn/v/10000?cc=IUC4K0Hd&playerId=10086',
              imgUrl: 'https://asset.eqxiu.cn/tencent/image/ff80808157f95ff80157fb0ea4a0026b/9jq99md6di.jpeg',
              summary: '我做了一个超级炫酷的互动H5,快来看看吧。',
              replaceLink: 'https://test.eqxiu.cn/v/10000?cc=IUC4K0Hd&playerId=10086&shareSuccess=1',
              timesTamp: 1691056180,
              shareCallback: true
          }
      }
    }
    
  • 参数说明
    参数名 必须 参数类型 参数说明
    type String 类型,固定为:EQS_CREATION_SHARE
    shareData json 分享信息
    - title String 分享标题
    - link String 分享链接(带https或者http)
    - imgUrl String 图片url
    - summary String 介绍
    - replaceLink String 替换链接,当分享成功后改变webview的src可用该链接,也可以自己在link链接后拼shareSuccess=1
    - timesTamp Long 推送时间,当前事件推送的时间戳,由于微信会重复推送事件,可通过该字段取最新的数据
    -shareCallback boolean 分享成功后是否需要回调。true-需要、false-不需要

使用分享参数

当小程序触发分享时使用第一步获得的参数(参照:https://developers.weixin.qq.com/miniprogram/dev/reference/api/Page.html#onShareAppMessage-Object-object):

Page({
    // shareData即前面shareMessage方法中获取到的参数
  onShareAppMessage() {
    return {
      title: this.shareData.title,
      path: this.shareData.link,
      ...
    }
  }
})
onShareTimeline()

被分享人打开小程序的分享卡片时,需要做一下判断,若有path时在webView里就使用分享的path。

分享成功回调

  • 调用示例
    A用户分享给B用户,当shareCallback为true 改变A用户webview的src为replaceLink,B用户访问取用link。
  • 注意timesTamp-推送时间
    当前事件推送的时间戳,由于微信会重复推送事件,可通过该字段取最新的数据
<web-view src="https://test.eqxiu.cn/gs/10000?cc=QrDE3O6f&shareSuccess=1" bindmessage="shareMessage"/>

APP

引入JSSDK

      JSSDK提供了”获取分享的参数“和”分享成功回调“的方法。在控制台-集成管理-自定义脚本(js)添加脚本。注意:加载JSSDK后,js即拥有了全局对象EQS,所有方法需要通过EQS对象调用。脚本地址:https://asset.eqxiu.cn/libs/@eqxiu/outAdapter/share/1.0.0/index.js

获取分享参数

  • 方法名称:getShare

  • 方法描述:获取分享信息,包括分享标题、链接、图片、说明等。

  • 调用参数:getShare(paramRecvFun),paramRecvFun-接收参数的方法名。可选参数,支持某些不能直接返回参数的场景下,通过调用该方法传递参数。

  • 调用样例:EQS.getShare()或EQS.getShare(‘paramRecvFun’)

  • 返回示例:

    {
      "type": "EQS_CREATION_SHARE",
      "shareData": {
          "title": "特种兵夏令营报名送好礼特种兵夏令营招生方案",
          "link": "https://test.eqxiu.cn/v/10000?cc=IUC4K0Hd&playerId=10086&shareUserId=3fbdedfa4a405b9a397ad0a65d9e1962",
          "imgUrl": "https://asset.eqxiu.cn/tencent/image/ff80808157f95ff80157fb0ea4a0026b/9jq99md6di.jpeg",
          "summary": "我做了一个超级炫酷的互动H5,快来看看吧。"
      }
    }
    
  • 参数说明:参照小程序返回参数说明

  • 调用示例:

    • Android
      webView.evaluateJavascript("javascript:EQS.getShare()", value -> { 
          JSONObject object = new JSONObject(value);
          String type = object.getString("type");
          JSONObject dataObj = object.getJSONObject("shareData");
          String title = dataObj.getString("title");
          String link = dataObj.getString("link");
          String imgUrl = dataObj.getString("imgUrl");
          String summary = dataObj.getString("summary");
      });
      
      若使用loadUrl()调用方法,需要设置接收参数的方法。
      // 添加,APP为固定值
      webView.addJavascriptInterface(new JavaScriptInterface(), "APP");
      // 调用方法并设置接收参数的方法
      webView.loadUrl("javascript:EQS.getShare('reveiveShareParam')");
      // 获取参数
      public class JavaScriptInterface {
          @JavascriptInterface
          public void reveiveShareParam(String value) {
              JSONObject object = new JSONObject(value);
              String type = object.getString("type");
              JSONObject dataObj = object.getJSONObject("shareData");
               String title = dataObj.getString("title");
               String link = dataObj.getString("link");
               String imgUrl = dataObj.getString("imgUrl");
               String summary = dataObj.getString("summary");
           }
      }
      
    • IOS
      NSString * titleJs = @"EQS.getShare()";
      @weakify(self);
      [self.webView evaluateJavaScript:titleJs completionHandler:^(id _Nullable result, NSError * _Nullable error) {
          @strongify(self);
          if ( error == nil && result ){
              if([result isKindOfClass:[NSDictionary class]]){
                  WebInfoModel *model = [WebInfoModel modelWithDictionary:result];
                  self.webShare.shareUrl = model.shareData.link;
              }
          }else{
              self.webShare.shareUrl = self.urlStr;
          }
      }];
      

分享成功回调

  • 方法名称:shareSuccess
  • 方法描述:分享成功后的回调,用于内容中台进行业务处理。
  • 调用样例:EQS.shareSuccess()
  • 调用示例:
    • Android
      webView.loadUrl("javascript:EQS.shareSuccess()");
      

2025年1月20日 09:40 7706 收藏文档