背景ios
做为专业的消息推送服务商,个推为开发者提供了不一样种类的推送模板,以实现相应的推送功能。推送模板能够单用,也能够组合使用。为帮助APP开发者更快速地找到适合的推送模板,实现所想要的推送效果,咱们写下这篇教学普及贴,但愿能够帮到你们。浏览器
推送样式网络
个推提供了不一样的推送样式,好比系统样式、展开式通知样式。app
ps. setLogo的图片须要在客户端开发时嵌入(main-res),不然没法展现;优化
pps. setLogo 和 setLogoUrl 能够二选一。若是两者都设置了,则 setLogoUrl 优先级比setLogo高,可是小米、华为等有些机型并不支持该功能,所以,开发者要慎选;spa
ppps.small logo图片没有能够修改的服务端接口,展现客户端内置的图片,默认值是push_small.png,不少手机(好比小米)改过其展现效果,这部分的小图标不必定能显示出来;code
系统样式,展开式通知样式具体代码以下:component
//系统样式 public static AbstractNotifyStyle getStyle0() { Style0style =new Style0(); style.setTitle("
这是你想要的标题");视频
style.setText("
这是你想要的内容");blog
style.setLogo("push.png");//
配置通知栏图标,须要在客户端开发时嵌入
style.setLogoUrl("");//
配置通知栏网络图标
style.setRing(true); //
设置通知是否响铃
style.setVibrate(true); //
设置通知是否震动
style.setClearable(true); //
设置通知是否可清除
//Android 8.0
以上支持的
style.setChannel("
通知渠道id");
style.setChannelName("
通知渠道名称");
style.setChannelLevel(3); return style; } //
展开式通知样式
public static AbstractNotifyStyle getStyle6() { Style6style =new Style6(); style.setTitle("
这是你想要的标题");
style.setText("
这是你想要的内容");
style.setLogo("push.png"); //
配置通知栏图标,须要在客户端开发时嵌入
style.setLogoUrl(""); //
配置通知栏网络图标
//
两种方式选一种
style.setBigStyle1("bigImageUrl"); //
设置大图+文本样式
//style.setBigStyle2("bigText"); //
设置长文本+文本样式
style.setRing(true); style.setVibrate(true); style.setClearable(true); style.setChannel("
通知渠道id");
style.setChannelName("
通知渠道名称");
style.setChannelLevel(3); return style; }
效果图
以小米8手机 Android 9版本为例,推送效果以下(为了脱敏,直接用个推demo自带的图标)
上述代码中提到了安卓8.0系统中开始支持的通知渠道,具体的字段含义解释以下。
setChannel表示通知渠道id,是渠道的惟一标识,其默认值为“Default” ;setChannelName表示通知渠道名称,用户可在手机“设置”中查看,其默认值也为“Default”。 setChannelName长度建议设置在40Byte之内,超出会被安卓8.0系统自动缩减。 setChannelLevel表示设置通知渠道的重要性,其默认值为3。具体操做过程当中值有五种可供选择:0、一、二、三、4;设置以后不能修改,展现形式以下:
0:无声音,无震动,不显示。
1:无声音,无震动,锁屏不显示,通知栏中内容被折叠显示,导航栏无logo。
2:无声音,无震动,锁屏和通知栏都予以显示,通知不唤醒屏幕。
3:有声音,有震动,锁屏和通知栏中都予以显示,通知唤醒屏幕。
4:有声音,有震动,亮屏下通知悬浮展现,锁屏通知以默认形式展现且唤醒屏幕。
ppps. channel设置完后,就不能再对channelLevel进行修改,只能新建一个新的channel。这是安卓原生的限制;
推送模板
到此,你们应该已经了解了想要推送的展现效果,可是须要什么样的模板来实现具体的通知效果呢?各位请继续往下看。
通知 & 启动应用
采用下述代码用户能够在通知栏看到一条含图标、标题等的通知,当他点击后能够激活应用,到达应用首页。
NotificationTemplate
template = new NotificationTemplate();
template.setAppId(APPID); template.setAppkey(APPKEY); template.setStyle(getStyle0()); //
设置展现样式,具体见推送样式部分
通知 &启动应用 & 透传
这种方式在前一种的基础上,加了透传(这部份内容用户是看不到的)。经过透传能够达到不一样的效果,好比更新用户信息。
NotificationTemplate
template = new NotificationTemplate();
template.setAppId(APPID); template.setAppkey(APPKEY); template.setStyle(getStyle0()); template.setTransmissionType(1); //
透传消息设置;1:当即启动APP;2:客户端收到消息后须要自行处理
template.setTransmissionContent("
透传内容");
通知 & 打开网页
下述代码用户能够在通知栏看到一条含图标、标题等的通知。当他点击通知、启动手机浏览器,即可以打开该通知所设置好的页面。
LinkTemplate
template = new LinkTemplate();
template.setAppId(APPID); template.setAppkey(APPKEY); template.setStyle(getStyle0()); template.setUrl("http://www.baidu.com"); //
设置打开的网址地址
通知 & 启动应用打开intent
这是咱们最多见的方方式:点击通知,打开APP内指定的页面。
StartActivityTemplate
template = new StartActivityTemplate();
template.setAppId(APPID); template.setAppkey(APPKEY); template.setStyle(getStyle0()); String intent = "intent:#Intent;component=com.yourpackage/.NewsActivity;end";//
这部分写法不清楚的,能够咨询安卓客户端的童鞋
template.setIntent(intent); //
最大长度限制为1000,很重要
透传
若是你们有一些个性化需求,好比想要本身定义所要实现的展现效果,那么能够用纯透传的方式。
TransmissionTemplate
template = new TransmissionTemplate();
template.setAppId(APPID); template.setAppkey(APPKEY); template.setTransmissionType(2);//
//
透传消息设置;1:当即启动APP;2:客户端收到消息后须要自行处理,若是设置为1,对用户使用不友好,不推荐使用
template.setTransmissionContent("
透传内容");
消息撤回
这个功能很实用,当App运营者不当心发送了不当的消息,能够立马撤回。
RevokeTemplate
template = new RevokeTemplate();
template.setAppId(APPID); template.setAppkey(APPKEY); template.setOldTaskId(taskId); //
指定须要撤回消息对应的taskId
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() {
APNPayloadpayload =new APNPayload(); //
在已有数字基础上加1显示,设置为-1时,在已有数字上减1显示,设置为数字时,显示指定数字
payload.setAutoBadge("+1"); payload.setContentAvailable(1); //ios 12.0
以上可使用 Dictionary 类型的 sound
payload.setSound("default"); payload.setCategory("$
由客户端定义种类");
payload.addCustomMsg("
由客户自定义消息key", "由客户自定义消息value");
payload.setAlertMsg(getDictionaryAlertMsg()); //
字典模式
//
设置语音播报类型,int类型,0.不可用 1.播放body 2.播放自定义文本
payload.setVoicePlayType(2); //
设置语音播报内容,String类型,非必须参数,用户自定义播放内容,仅在voicePlayMessage=2时生效
//
注:当"定义类型"=2, "定义内容"为空时则忽略不播放
payload.setVoicePlayMessage("
定义内容");
//
添加多媒体资源,能够是图片、音频、视频,最多能够添加3条多媒体
payload.addMultiMedia(new MultiMedia().setResType(MultiMedia.MediaType.pic) .setResUrl("
资源文件地址")
.setOnlyWifi(true));//
设置是否在WIFI下才展现多媒体消息,若是设置true但未使用WIFI时会展现成普统统知
return payload; }
private static APNPayload.DictionaryAlertMsg getDictionaryAlertMsg() {
APNPayload.DictionaryAlertMsg alertMsg = new APNPayload.DictionaryAlertMsg(); alertMsg.setBody("body1"); alertMsg.setActionLocKey("
显示关闭和查看两个按钮的消息");
alertMsg.setLocKey("loc-key1"); alertMsg.addLocArg("loc-ary1"); alertMsg.setLaunchImage("
调用已经在应用程序中绑定的图形文件名");
alertMsg.setTitle("
通知标题");
alertMsg.setTitleLocKey("
自定义通知标题");
alertMsg.addTitleLocArg("
自定义通知标题组");
return alertMsg; } /** *
须要使用iOS语音传输,请使用VoIPPayload代替APNPayload
*
须要相关证书才可使用此功能
*/ 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接口,以更加符合开发者的使用习惯,敬请期待。