前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >个推消息推送模板详解

个推消息推送模板详解

作者头像
个推君
发布2022-01-04 10:44:45
1.8K0
发布2022-01-04 10:44:45
举报
文章被收录于专栏:原创

背景

作为专业的消息推送服务商,个推为开发者提供了不同种类的推送模板,以实现相应的推送功能。推送模板可以单用,也可以组合使用。为帮助APP开发者更快速地找到适合的推送模板,实现所想要的推送效果,我们写下这篇教学普及贴,希望可以帮到大家。

推送样式

个推提供了不同的推送样式,比如系统样式、展开式通知样式。

ps. setLogo的图片需要在客户端开发时嵌入(main-res),否则无法展示;

pps. setLogo 和 setLogoUrl 可以二选一。如果二者都设置了,则 setLogoUrl 优先级比setLogo高,但是小米、华为等有些机型并不支持该功能,因此,开发者要慎选;

ppps.small logo图片没有可以修改的服务端接口,展示客户端内置的图片,默认值是push_small.png,很多手机(比如小米)改过其展示效果,这部分的小图标不一定能显示出来;

系统样式,展开式通知样式具体代码如下:

代码语言:javascript
复制
   //系统样式

 public static AbstractNotifyStyle getStyle0() {

    Style0style =new Style0();

    style.setTitle("

这是你想要的标题");

代码语言:javascript
复制
    style.setText("

这是你想要的内容");

代码语言:javascript
复制
    style.setLogo("push.png");//

配置通知栏图标,需要在客户端开发时嵌入

代码语言:javascript
复制
    style.setLogoUrl("");//

配置通知栏网络图标

代码语言:javascript
复制
    style.setRing(true); //

设置通知是否响铃

代码语言:javascript
复制
    style.setVibrate(true); //

设置通知是否震动

代码语言:javascript
复制
    style.setClearable(true); //

设置通知是否可清除

代码语言:javascript
复制
    //Android 8.0

以上支持的

代码语言:javascript
复制
    style.setChannel("

通知渠道id");

代码语言:javascript
复制
    style.setChannelName("

通知渠道名称");

代码语言:javascript
复制
    style.setChannelLevel(3);

    return style;

}



//

展开式通知样式

代码语言:javascript
复制
 public static AbstractNotifyStyle getStyle6() {

    Style6style =new Style6();

    style.setTitle("

这是你想要的标题");

代码语言:javascript
复制
    style.setText("

这是你想要的内容");

代码语言:javascript
复制
    style.setLogo("push.png"); //

配置通知栏图标,需要在客户端开发时嵌入

代码语言:javascript
复制
    style.setLogoUrl(""); //

配置通知栏网络图标

代码语言:javascript
复制
    //

两种方式选一种

代码语言:javascript
复制
    style.setBigStyle1("bigImageUrl"); //

设置大图+文本样式

代码语言:javascript
复制
          //style.setBigStyle2("bigText"); //

设置长文本+文本样式

代码语言:javascript
复制
    style.setRing(true);

    style.setVibrate(true);

    style.setClearable(true);

    style.setChannel("

通知渠道id");

代码语言:javascript
复制
    style.setChannelName("

通知渠道名称");

代码语言:javascript
复制
    style.setChannelLevel(3);

    return style;

}

效果图

以小米8手机 Android 9版本为例,推送效果如下(为了脱敏,直接用个推demo自带的图标)

上述代码中提到了安卓8.0系统中开始支持的通知渠道,具体的字段含义解释如下。

setChannel表示通知渠道id,是渠道的唯一标识,其默认值为“Default” ;setChannelName表示通知渠道名称,用户可在手机“设置”中查看,其默认值也为“Default”。 setChannelName长度建议设置在40Byte以内,超出会被安卓8.0系统自动缩减。 setChannelLevel表示设置通知渠道的重要性,其默认值为3。具体操作过程中值有五种可供选择:0、1、2、3、4;设置之后不能修改,展示形式如下:

0:无声音,无震动,不显示。

1:无声音,无震动,锁屏不显示,通知栏中内容被折叠显示,导航栏无logo。

2:无声音,无震动,锁屏和通知栏都予以显示,通知不唤醒屏幕。

3:有声音,有震动,锁屏和通知栏中都予以显示,通知唤醒屏幕。

4:有声音,有震动,亮屏下通知悬浮展示,锁屏通知以默认形式展示且唤醒屏幕。

ppps. channel设置完后,就不能再对channelLevel进行修改,只能新建一个新的channel。这是安卓原生的限制;

推送模板

到此,大家应该已经了解了想要推送的展示效果,但是需要什么样的模板来实现具体的通知效果呢?各位请继续往下看。

通知 & 启动应用

采用下述代码用户可以在通知栏看到一条含图标、标题等的通知,当他点击后可以激活应用,到达应用首页。

代码语言:javascript
复制
    NotificationTemplate

template = new NotificationTemplate();

代码语言:javascript
复制
    template.setAppId(APPID);

    template.setAppkey(APPKEY);

    template.setStyle(getStyle0()); //

设置展示样式,具体见推送样式部分

通知 &启动应用 & 透传

这种方式在前一种的基础上,加了透传(这部分内容用户是看不到的)。通过透传可以达到不同的效果,比如更新用户信息。

代码语言:javascript
复制
    NotificationTemplate

template = new NotificationTemplate();

代码语言:javascript
复制
    template.setAppId(APPID);

    template.setAppkey(APPKEY);

    template.setStyle(getStyle0());

    template.setTransmissionType(1); //

透传消息设置;1:立即启动APP;2:客户端收到消息后需要自行处理

代码语言:javascript
复制
    template.setTransmissionContent("

透传内容");

通知 & 打开网页

下述代码用户可以在通知栏看到一条含图标、标题等的通知。当他点击通知、启动手机浏览器,便可以打开该通知所设置好的页面。

代码语言:javascript
复制
    LinkTemplate

template = new LinkTemplate();

代码语言:javascript
复制
    template.setAppId(APPID);

    template.setAppkey(APPKEY);

    template.setStyle(getStyle0());

    template.setUrl("http://www.baidu.com");  //

设置打开的网址地址

通知 & 启动应用打开intent

这是我们最常见的方方式:点击通知,打开APP内指定的页面。

代码语言:javascript
复制
    StartActivityTemplate

template = new StartActivityTemplate();

代码语言:javascript
复制
    template.setAppId(APPID);

    template.setAppkey(APPKEY);

    template.setStyle(getStyle0());

    String intent = "intent:#Intent;component=com.yourpackage/.NewsActivity;end";//

这部分写法不清楚的,可以咨询安卓客户端的童鞋

代码语言:javascript
复制
    template.setIntent(intent); //

最大长度限制为1000,很重要

透传

如果大家有一些个性化需求,比如想要自己定义所要实现的展示效果,那么可以用纯透传的方式。

代码语言:javascript
复制
    TransmissionTemplate

template = new TransmissionTemplate();

代码语言:javascript
复制
    template.setAppId(APPID);

    template.setAppkey(APPKEY);

    template.setTransmissionType(2);//

//

透传消息设置;1:立即启动APP;2:客户端收到消息后需要自行处理,如果设置为1,对用户使用不友好,不推荐使用

代码语言:javascript
复制
    template.setTransmissionContent("

透传内容");

消息撤回

这个功能很实用,当App运营者不小心发送了不当的消息,可以立马撤回。

代码语言:javascript
复制
    RevokeTemplate

template = new RevokeTemplate();

代码语言:javascript
复制
    template.setAppId(APPID);

    template.setAppkey(APPKEY);

    template.setOldTaskId(taskId); //

指定需要撤回消息对应的taskId

代码语言:javascript
复制
    template.setForce(false); //

客户端没有找到对应的taskid,是否把对应appid下所有的通知都撤回

消息覆盖

比如足球比赛实时比分播报,用户只想知道最新比分,我们就可以选择“消息覆盖”方式的推送模板。

前面代码中提到的StartActivityTemplate 、LinkTemplate 、NotificationTemplate都有一个方法:setNotifyid(Integer notifyid)。在消息推送的时候设置notifyid,当有覆盖需求时,使用相同的notifyid发一条新的消息,客户端sdk会根据notifyid对应的前一条消息进行覆盖。

iOS推送

你可能发现了前面所讲的都是基于安卓推送的操作,iOS的操作相对会比较特殊。逻辑是当APP在线时,个推消息推送会直接把透传内容发送到手机上,需要客户端解析后予以展示;当APP离线时,推送会采用APNs通道,由iPhone的系统通道通知并展示消息。iOS推送可以采用TransmissionTemplate模板,根据setAPNInfo(Payload apn)法来设置具体参数。

具体参数基本上按照iOS官网的字段来进行命名,应该会比较容易上手。这里附上iOS官网文档链接。

个推iOS推送参考代码如下:

private static APNPayloadgetAPNPayload() {

代码语言:javascript
复制
    APNPayloadpayload =new APNPayload();

    //

在已有数字基础上加1显示,设置为-1时,在已有数字上减1显示,设置为数字时,显示指定数字

代码语言:javascript
复制
    payload.setAutoBadge("+1");

    payload.setContentAvailable(1);

    //ios 12.0

以上可以使用 Dictionary 类型的 sound

代码语言:javascript
复制
    payload.setSound("default");

    payload.setCategory("$

由客户端定义种类");

代码语言:javascript
复制
    payload.addCustomMsg("

由客户自定义消息key", "由客户自定义消息value");

代码语言:javascript
复制
    payload.setAlertMsg(getDictionaryAlertMsg());  //

字典模式

代码语言:javascript
复制
    //

设置语音播报类型,int类型,0.不可用 1.播放body 2.播放自定义文本

代码语言:javascript
复制
    payload.setVoicePlayType(2);

    //

设置语音播报内容,String类型,非必须参数,用户自定义播放内容,仅在voicePlayMessage=2时生效

代码语言:javascript
复制
    //

注:当"定义类型"=2, "定义内容"为空时则忽略不播放

代码语言:javascript
复制
    payload.setVoicePlayMessage("

定义内容");

代码语言:javascript
复制
    //

添加多媒体资源,可以是图片、音频、视频,最多可以添加3条多媒体

代码语言:javascript
复制
    payload.addMultiMedia(new MultiMedia().setResType(MultiMedia.MediaType.pic)

            .setResUrl("

资源文件地址")

代码语言:javascript
复制
            .setOnlyWifi(true));//

设置是否在WIFI下才展示多媒体消息,如果设置true但未使用WIFI时会展示成普通通知

代码语言:javascript
复制
    return payload;

}

private static APNPayload.DictionaryAlertMsg getDictionaryAlertMsg() {

代码语言:javascript
复制
    APNPayload.DictionaryAlertMsg alertMsg = new APNPayload.DictionaryAlertMsg();

    alertMsg.setBody("body1");

    alertMsg.setActionLocKey("

显示关闭和查看两个按钮的消息");

代码语言:javascript
复制
    alertMsg.setLocKey("loc-key1");

    alertMsg.addLocArg("loc-ary1");

    alertMsg.setLaunchImage("

调用已经在应用程序中绑定的图形文件名");

代码语言:javascript
复制
    alertMsg.setTitle("

通知标题");

代码语言:javascript
复制
    alertMsg.setTitleLocKey("

自定义通知标题");

代码语言:javascript
复制
    alertMsg.addTitleLocArg("

自定义通知标题组");

代码语言:javascript
复制
    return alertMsg;

}

/**

 *

需要使用iOS语音传输,请使用VoIPPayload代替APNPayload

代码语言:javascript
复制
 *

需要相关证书才可以使用此功能

代码语言:javascript
复制
 */

private static VoIPPayload getVoIPPayload() {

    VoIPPayloadpayload =new VoIPPayload();

    JSONObjectjo =new JSONObject();

    jo.put("key1", "value1");

    payload.setVoIPPayload(jo.toString());

    return payload;

}

总结

个推推送模板提供了系统样式和展开通知样式,但是开发者请务必要注意:Android和iOS的代码推送方式是不同的。推送iOS消息,只能用TransmissionTemplate透传模板;推送Android消息,可以使用TransmissionTemplate透传模板和NotificationTemplate、LinkTemplate、StartActivityTemplate、RevokeTemplate通知类模板。为提供更优质的推送服务,个推持续优化产品功能,丰富推送模板,同时将于近期推出基于Restful的v2接口,以更加符合开发者的使用习惯,敬请期待。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档