个推消息推送消息终止、覆盖和撤回

个推消息推送消息终止、覆盖和撤回

一、需求背景

1.1 背景描述

APP 在进行日常消息推送的过程中,因为种种原因,有时会出现推送“失误”,比如不小心推送内容输入错误,或是测试生产环境切换错误,给线上用户推送了测试消息等等。个推消息推送的消息终止、消息覆盖和消息撤回三大功能可以有效帮助 APP 避免推送“失误”。

1.2 名称解释

名词解释
消息终止对正处于推送状态,或者未接收的消息停止下发(只支持批量推和群推任务)。
消息覆盖实现消息覆盖,可以通过相应接口重新发一条具有相同id的消息实现,如果推送的消息未设置此id,则无法实现消息覆盖功能。
消息撤回消息撤回是指对已经发送的个推通道消息进行撤回。客户端接收到消息撤回的指令,会将通知栏中展示的消息进行删除,不再展示。

1.3 功能支持情况

功能支持情况
消息终止支持个推通道存入离线库状态的批量推/群推任务, 不支持安卓厂商/iOS离线
消息覆盖支持个推通道/安卓厂商(华为、小米、OPPO、魅族)/iOS
消息撤回支持个推通道的通知消息/安卓厂商(小米、vivo)

二、功能实现

  • 终止、撤回、覆盖功能实现,客户端不用操作,服务端调用相应的api接口即可
  • 终止、撤回、覆盖功能适用于通知消息
  • 开发者可通过调用 服务端 RestAPI V2 实现对应的功能。

2.1 消息终止代码示例

curl --location --request DELETE 
'https://restapi.getui.com/v2/appid/task/$taskid' \
--header 'content-type: application/json' \
--header 'token: $taskid' \
--data-raw ''

注意事项

  • 只支持批量推和群推任务,单推任务不支持

2.2 消息覆盖代码示例

对于个推通道消息,可设置相同的notify_id,示例:
{
    "push_message":{
        "notification":{
            "notify_id":1111
        }
    }
}

对于IOS通道消息,可设置相同的apns-collapse-id,示例:
{
    "ios":{
        "apns-collapse-id":"2222"
    }
}

对于安卓厂商通道消息,可设置相同的notify_id,示例:
{
    "android":{
        "ups":{
            "notification":{
                "notify_id":3333
            }
        }
    }
}

2.3 消息撤回代码示例

{
   "push_message":{
           //在线通知消息
        "revoke": {
            //需要撤回的taskId
            "old_task_id": "xxx",  
            //在没有找到对应的taskId,是否把对应appId下所有的通知都撤回
            "force": false  
        }
    },
    "push_channel": {
        "android": {
            "ups": {
                //离线通知消息
                "revoke": {
                    //需要撤回的taskId
                    "old_task_id": "xxx"
                }
            }
        }
    }

}

注意事项

  • SDK要求客户端版本:2.12.5.0以上

个推消息推送emoji 表情推送

个推消息推送emoji 表情推送

一、需求背景

1.1 背景描述

emoji是一种文本类型的象形符号,它在我们日常的网络生活中随处可见,通过它你可以了解到行行文字后的感情,甚至于一个emoji就可以表达我们当下的心情。通知栏等消息如果适当的融入emoji表情,可以更好的跟用户交流,提高消息的点击率。

1.2 各渠道支持情况

渠道是否支持
个推支持
APNs支持
华为支持
小米支持
魅族支持
OPPO支持
VIVO支持

二、功能实现

  • Android 和 iOS 都支持 emoji 表情消息
  • emoji 表情适用于通知消息
  • 实现 emoji 表情消息,客户端不用操作,服务端跟据消息场景设置想要的表情即可

2.1 开发者平台设置示例

2.2 服务端 API 接口设置示例

开发者可通过调用 服务端 RestAPI V2 实现对应的功能。api接口支持32位的Unicode表情符号,例 ud83dude00。在线工具获取emoji表情编码示例:

2.2.1 个推

"push_message":{
        "notification":{
            "title":"你点我呀!",
            "body":"假如生活出卖了我,我希望是论斤卖。ud83dude48",
             // ...其他push_message参数略
        }
    }

2.2.2 Android厂商

"push_channel":{
        "android":{
            "ups":{
                "notification":{
                    "title":"你点我呀!",
                    "body":"生命在于运动。u26f9ufe0fud83dudeb4ud83cudfcbufe0f",
                    // ...其他push_channel参数略
                }
            }
        }

2.2.3 APNs

"push_channel":{
    "ios": {
        "aps": {
            "alert": {
                "title": "你点我呀!",
                "body": "加班使我快乐。ud83dudc69u200dud83dudcbb"
                // ...其他push_channel参数略
          }
       }
    }
 }

个推消息推送标签推送

个推消息推送标签推送

一、需求背景

1.1 背景描述

标签是推送赋予用户或者推送设备的一种特征属性,例如:“男性”,“喜爱足球”等,常见的使用场景是根据特征属性,实现针对特定用户的精准推送,从而提升通知消息的转化率。

个推支持客户将自身应用的标签绑定到个推服务器,以便后续可使用该标签实现精细化推送,辅助精细化运营。同时支持使用个推用户画像基础属性标签(例如用户属性、地区属性的标签)圈选目标用户进行消息推送。

二、功能实现

标签推送之前需要先设置标签,设置标签可以调用客户端api接口,也可以调用服务端api接口;默认一个客户端cid,每天只能修改标签一次,最多设置100个标签;单个标签长度最大为32字符,标签总长度最大为512个字符

2.1 标签设置

开发者可在客户端或者服务端给 cid 设置标签,客户端需要区分 android 和 ios,开发者选择其中一个渠道(客户端或服务端)设置标签即可。

2.2.1 客户端标签设置

Android
类名com.igexin.sdk.PushManager
接口public int setTag(Context context,Tag[] tag, String sn)

接口调用示例:

String[] tags = new String[] {"tag1", "tag2", "tag3"};
Tag[] tagParam = new Tag[tags.length];

for (int i = 0; i < tags.length; i++) {
      Tag t = new Tag();
      //name 字段只支持:中文、英文字母(大小写)、数字、除英文逗号和空格以外的其他特殊符号,具体请看代码示例
      t.setName(tags[i]);
      tagParam[i] = t;
}
PushManager.getInstance().setTag(context, tagParam, String.valueOf(System.currentTimeMillis()));

参数:
  • context:应用的 Context
  • tag:用户标签

sn:用户自定义的序列号,用来唯一标识该动作,用户 IntentService 中会回执该结果

iOS
+ (BOOL)setTags:(NSArray *)tags;
+ (BOOL)setTags:(NSArray *)tags andSequenceNum:(NSString *)aSn;

接口调用示例:

[GeTuiSdk setTags:@[@"标签1",@"标签2",@"标签3"]];
[GeTuiSdk setTags:@[@"标签1",@"标签2",@"标签3" andSequenceNum:@"seqtag-1"];
参数:
  • tags:NSString 的对象数组,不能为 nil。只能包含中文字符、英文字母、0-9、+-*.的组合(不支持空格)

aSn:用户自定义的请求序列号,用来唯一标识该动作。若不指定sn,会根据tags自动生成sn。建议每个设置标签操作设置不同的sn标识。

2.2.2 服务端标签设置(RestAPI V2)

  • 接口地址: BaseUrl/user/custom_tag/cid/$cid
  • 请求方式: POSTRequest请求说明:路径参数说明(路径中$开头的参数)
名称类型是否必须默认值说明
cidString用户标识
Header参数说明
名称类型是否必须默认值说明
tokenString接口访问凭据,获取方式请参考获取鉴权token
  • 参数示例{ "custom_tag": [ "tag1", "tag2" ] } 复制请求参数说明
名称类型是否必须默认值描述
custom_tagString Array标签列表,标签中不能包含空格

2.2 标签推送

2.2.1 服务端(RestAPI V2)

  • 接口地址: BaseUrl/push/tag
  • 请求方式: POST
  • Request请求说明:
名称类型是否必须默认值说明
tokenString接口访问凭据,获取方式请参考获取鉴权token

body参数说明:

  • content-type:application/json;charset=utf-8
  • 参数示例:{ "request_id":"请填写requestid", "group_name":"请填写任务组名", "settings":{ "ttl":3600000 }, "audience":{ "tag":[ { "key":"custom_tag", "values":[ "0901","0902" ], "opt_type":"or" } ] }, "push_message":{ "notification":{ "title":"请填写通知标题", "body":"请填写通知内容", "click_type":"url", "url":"https//:xxx" } } }

个推推送消息通知大图、大文本

个推推送消息通知大图、大文本

一、需求背景

1.1 背景描述

通知栏消息支持富文本与大图消息,使消息更富个性化。具体字段详见个推多厂商参数介绍

1.2 名称解释

名词解释
富文本通知栏消息展示长文本样式
大图通知栏消息展示大图样式

1.3 各渠道支持情况

渠道长文本大图
个推支持支持
华为支持不支持
荣耀支持不支持
小米支持支持
oppo支持支持
魅族不支持不支持
vivo不支持不支持
apns不支持支持

二、功能实现

开发者可通过调用 个推服务端 api 或者登陆 个推开发者中心 从页面下发消息。

2.1 个推开发者中心设置

1、长文本设置新手指引

①登录 个推开发者中心,打开【个推消息推送】,点击【创建消息】后在【Android配置】中选择【展开式通知】。

②选择【大文本】样式并将补充的内容填写至文本框即可。

③根据页面说明填写好其他配置信息,查看推送预览,确认无误后,点击【确定】,正式发送推送。

长文本样式示意图

2、大图设置新手指引

①登录个推开发者中心,打开【个推消息推送】,点击【创建消息】后在【Android配置】版块中点击【展开式通知】 ,选择【大图样式】展示样式。

②设计一张430*230的亮眼大图,主题鲜明,亮点突出。

③上传大图,大小不超过200KB,支持JPEG、PNG格式。

④根据页面说明填写好其他配置信息,查看推送预览,确认无误后,点击【确定】,正式发送推送。

2.1 服务端 api 设置

个推

{
    "push_message":{
        "notification":{
            "title":"请填写你的通知标题",
            "body":"请填写你的通知内容",
            "big_text":"请填写你的通知长文本",
            "logo":"logo.png",
            "logo_url":"http://xxxx/a.png",
            "channel_id":"请填写你的channel_id",
            "channel_name":"请填写你的channel_name",
            "channel_level":3,
            "click_type":"intent",
            "intent":"intent://com.getui.push/detail?#Intent;scheme=gtpushscheme;launchFlags=0x4000000;package=com.getui.demo;component=com.getui.demo/com.getui.demo.DemoActivity;S.payload=payloadStr;end"
        }
    }
}

华为

{
  "android": {
    "ups": {
      "notification": {
        // ...其他push_channel参数略
      },
      "options": {
        "HW": {
          "/message/android/notification/style": 1,
          "/message/android/notification/big_title": "big_title",
          "/message/android/notification/big_body": "big_body"
        }
      }
    }
  }
}

荣耀

{
  "android": {
    "ups": {
      "notification": {
        // ...其他push_channel参数略
      },
      "options": {
        "HO": {
          "/android/notification/style": 1,
          "/android/notification/bigTitle": "bigTitle",
          "/android/notification/bigBody": "bigBody"
        }
      }
    }
  }
}

小米

notification_style_type = 1表示多字版。填1时,文本内容为body内的值

{
  "android": {
    "ups": {
      "notification": {
        // ...其他push_channel参数略
      },
      "options": {
        "XM": {
          "/extra.notification_style_type": 1
        }
      }
    }
  }
}

oppo

style = 2 长文本样式(ColorOS版本>5.0可用,通知栏第一条消息可展示全部内容,非第一条消息只展示一行内容)

{
  "android": {
    "ups": {
      "notification": {
        // ...其他push_channel参数略
      },
      "options": {
        "OP": {
          "/style": 2
        }
      }
    }
  }
}

2.2 服务端大图

个推

big_image = 大图的URL地址,通知消息+大图样式, 与big_text二选一,两个都填写时报错,URL长度 ≤ 1024

{
    "push_message":{
        "notification":{
            "title":"请填写你的通知标题",
            "body":"请填写你的通知内容",
            "big_image":"请填写你的通知大图URL",
            "logo":"logo.png",
            "logo_url":"http://xxxx/a.png",
            "channel_id":"请填写你的channel_id",
            "channel_name":"请填写你的channel_name",
            "channel_level":3,
            "click_type":"intent",
            "intent":"intent:#Intent;action=;end"
        }
    }
}

小米

/extra.notification_style_type填2时,填写,表示大图地址(上传到小米返回的url) 图片要求:固定876x324px,小于1M,PNG/JPG/JPEG格式。

{
  "android": {
    "ups": {
      "notification": {
        // ...其他push_channel参数略
      },
      "options": {
        "XM": {
          "/extra.notification_style_type": 2,
          "/extra.notification_bigPic_uri":"http://url.big.pic/xxx.png"
        }
      }
    }
  }
}

oppo

big_picture_id :先调用OPPO接口,上传图片,填写接口返回的图标id,style为3时必填 图片要求:尺寸876*324px,文件大小1M以内,格式为PNG/JPG/JPEG。

通知大图不支持单推,单推请求会返回无权限错误

{
  "android": {
    "ups": {
      "notification": {
        // ...其他push_channel参数略
      },
      "options": {
        "OP": {
          "/style": 3,
          "/big_picture_id": "接口返回的图标id"
        }
      }
    }
  }
}

iOS(apns)

离线apns通知大图消息,长按通知栏消息不要点进去会跳出大图

{
    "ios":{
        "type":"notify",
        "payload":"自定义消息",
        "aps":{
            "alert":{
                "title":"通知标题",
                "body":"通知内容"
            },
            "content-available":0,
            "sound":"com.gexin.ios.silence",
            "category":"ACTIONABLE"
        },
        "auto_badge":"+1",
        "multimedia": [{
            "url": "https://xxx,并且带有后缀格式(.jpg、mp3、mp4)的多媒体图片",
            "type": 1,
            "only_wifi": false
        }]
    }
}

个推消息推送角标设置

个推消息推送角标设置

一、需求背景

1.1 背景描述

应用badge角标,是手机桌面应用图标右上角圆点或者数字角标,常见的场景是伴随通知栏消息显示,提醒用户及时点阅新消息。iOS手机系统能够较好的支持角标,Android手机系统由于碎片化严重,品牌众多,版本各异,所以角标功能适配较难。个推后续会在Android角标功能适配继续努力,为开发者提供较好的角标功能体验。

1.2 各手机品牌角标支持情况

机型是否支持角标/红点显示适配说明
华为支持角标参考当前文档
小米支持角标遵从系统默认逻辑,感应通知栏通知数目,按 1 自动增减
OPPO支持红点圆点展示需由用户在通知设置中手动开启,遵从系统默认逻辑,有通知则展示,无则不展示;
数值展示只对指定应用开启,例如 QQ、微信,需向官方进行权限申请,暂无明确适配说明
VIVO支持角标高版本系统自带离线通知数字角标展示功能,默认+1处理,打开清零,低版本没有角标功能。
魅族支持红点遵从系统默认逻辑,仅支持红点展示,有通知则展示,无则不展示
iOS支持角标参考当前文档

二、功能实现

角标功能适用于 通知消息

2.1 iOS (APNs)

iOS 系统需要客户端和服务端配合实现角标功能

服务端

"push_channel":{
    "ios":{
        "type":"notify",
        "payload":"自定义消息",
        "aps":{
            "alert":{
                "title":"通知标题",
                "body":"通知内容"
            },
            "content-available":0
        },
        //离线走apns推送时,设置的iOS角标。
        "auto_badge":"+1" //可以实现显示数字的自动增减,如“+1”、 “-1”、 “1” 等,计算结果将覆盖badge
    }
}

客户端

客户端打开 app 可更改角标数或清空角标(设置角标数为 0):客户端设置iOS角标

示例:

设置角标减 1
1、在点击后的方法中,调用 application.applicationIconBadgeNumber 获取到角标数减 1
2、通过 [application setApplicationIconBadgeNumber:]设置当前的角标
3、然后通过个推的 [GeTuiSdk setBadge:] 将角标同步给个推服务器

2.2 华为

华为手机系统需要客户端和服务端配合实现角标功能。

服务端:

{
    "request_id": "fhfjkhwej478414",
    "settings": {
        "ttl": 259200000
    },
    "audience": {
        "cid": [
            "bae1fdd10477db63b17af9e76dd41863"
        ]
    },
    "push_message": {
        "notification": {
            "title": "个推在线标题",
            "body": "个推在线内容",
            "click_type": "url",
            "url": "https://www.getui.com/",
            //在线推送时,设置的华为角标,1表示在当前的角标数上+1。
            "badge_add_num": "1"
        }
    },
    "push_channel": {
        "android": {
            "ups": {
                "notification": {
                    "title": "厂商离线标题",
                    "body": "厂商离线内容",
                    "click_type": "url",
                    "url": "https://www.getui.com/"
                },
                "options": {
                    "HW": {
                        "/message/android/notification/badge/class": "应用入口Activity路径名称",
                        //add_num 为离线推送时,设置的华为角标,1表示在当前的角标数上+1
                        "/message/android/notification/badge/add_num": 1
                    }
                }
            }
        }
    }
}

客户端:

客户端打开 app 可更改角标数或清空角标(设置角标数为 0): 客户端设置华为角标

个推推送自定义通知图标

个推推送自定义通知图标

一、需求背景

1.1 背景描述

通知图标可做为一个应用的标识,方便在手机通知栏显示应用的通知推送消息,也便于用户在第一时间辨识是哪个应用都消息做出对应的消息处理。

如果需要根据不同推送场景进行推送,还可以设置多套图标区分应用场景。

比如:微信和QQ是通讯工具,通知栏收到微信或者QQ的消息后,通知中心会在消息文本前显示微信或者QQ的图标,方便第一时间处理通讯消息。

1.2 名称解释

名词解释
小图标push_small.png会展示在顶部状态栏和通知左上角位置,push_small 只能内置, 不能修改
通知图标push.png将会作为通知展示图标,会展示在通知内容右侧。

1.3 各渠道支持情况

渠道小图标(push_small.png)右侧通知图标(push.png)
个推支持支持
APNs支持支持
华为支持不支持
荣耀支持支持
小米支持不支持
魅族支持不支持
OPPO支持不支持
VIVO支持不支持

二、功能实现

  • Android 在线个推通道支持设置小图标push_small.png和右侧通知图标push.png;离线厂商通道小图标可客户端嵌入设置,通知图标暂不支持配置(通知图片内容可看下各厂商富文本处理)。
  • iOS在线需要走透传渠道,暂不支持动态设置小图标和通知图标;离线apns通道可通过多媒体设置通知图标。
  • 开发者可通过调用 个推服务端 api 或者直接从 个推开发者中心 页面推送。

2.1 Android

2.1.1 客户端

设置通知栏及通知栏顶部图标

2.1.2 服务端 API

小图标push_small.png

只支持客户端嵌入,服务端暂不支持动态推送时设置小图标。

通知图标push.png

如果您需要根据不同推送场景切换不同通知栏图标或者其他配置多套通知栏图标的场景

  • 先在资源目录的 res/drawable-ldpi/、res/drawable-mdpi/、res/drawable-hdpi/、res/drawable-xhdpi/、res/drawable-xxhdpi/ 等各分辨率目录下放置相应的多套通知图标,例如 push1.pngpush2.png等
  • 通过 服务端推送 API 参数指定通知栏图标名称,如:
名称类型是否必需默认值描述
titleString通知消息标题,长度 ≤ 50
bodyString通知消息内容,长度 ≤ 256
logoString通知的图标名称,包含后缀名(需要在客户端开发时嵌入),如“push.png”,长度 ≤ 64
{
    "push_message":{
        "notification":{
            "title":"请填写你的通知标题",
            "body":"请填写你的通知内容",
            "logo":"logo.png",
            "click_type":"intent",
            "intent":"intent:#Intent;action=;end"
        }
    }
}

2.1.3 个推开发者中心

2.2 iOS

2.2.1 客户端

支持版本:

iOS 10 及以上的系统

客户端设置

  • 在集成个推SDK时,可以添加 Notification Service Extension,实现 多媒体展示

涉及代码:

- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {

    self.contentHandler = contentHandler;
    self.bestAttemptContent = [request.content mutableCopy];

    NSLog(@"----将APNs信息交由个推处理----");

    [GeTuiExtSdk handelNotificationServiceRequest:request withAttachmentsComplete:^(NSArray *attachments, NSArray* errors) {

        //注意:是否修改下发后的title内容以项目实际需求而定
        //self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [需求而定]", self.bestAttemptContent.title];

        self.bestAttemptContent.attachments = attachments; //设置通知中的多媒体附件

        NSLog(@"个推处理APNs消息遇到错误:%@",errors); //如果APNs处理有错误,可以在这里查看相关错误详情

        self.contentHandler(self.bestAttemptContent); //展示推送的回调处理需要放到个推回执完成的回调中
    }];
}

2.2.2 服务端 API

multimedia说明

该字段为Array类型,最多可设置3个子项,每个参数定义如下所示:

名称类型是否必需默认值描述
urlString多媒体资源地址
typeNumber资源类型(1.图片,2.音频,3.视频)
only_wifiBooleanfalse是否只在wifi环境下加载,如果设置成true,但未使用wifi时,会展示成普通通知
{
    "ios":{
        "type":"notify",
        "payload":"自定义消息",
        "aps":{
            "alert":{
                "title":"通知标题",
                "body":"通知内容"
            },
            "content-available":0,
            "sound":"com.gexin.ios.silence",
            "category":"ACTIONABLE"
        },
        "auto_badge":"+1",
        "multimedia": [{
            "url": "https://xxx",
            "type": 1,
            "only_wifi": false
        }]
    }
}

2.2.3 个推开发者中心后台

个推消息推送消息分类

个推消息推送消息分类

一、需求背景

1.1 场景描述

在日常的消息推送中,app总有各种各样的需求,需要灵活使用消息的两种类型,来满足自己业务的需要。个推支持使用透传和通知两种类型进行推送,满足您的多样需求。

透传,即只发送数据给客户端,个推并不做任何处理,客户端可以自己解析字符串进行业务逻辑的实现,比如语音播报、或者创建自定义通知等。

通知,即为经sdk自动处理后,在通知栏以通知形式展示。一般的推送都可以使用该形式。

1.2 名词解释

名词解释
透传即自定义消息,消息体格式客户可以自己定义,如纯文本、json串等。透传消息个推只传递数据,不做任何处理,客户端接收到透传消息后需要自己去做后续动作处理,如通知栏展示、弹框等。
通知指定通知标题和内容后,由个推SDK自动处理后、在系统通知栏中以通知栏消息的形式展示,同时响铃或震动提醒用户(响铃和震动受手机系统的设置状态影响)。

1.3 各功能支持情况

功能支持情况
透传个推通道支持,客户端在线才能收到
通知个推通道/安卓厂商/IOS都支持(苹果不支持个推通道的通知)

二、功能实现

调用api时,根据业务需要设置不同的消息类型即可。

2.1 透传代码示例

调用rest v2 api 设置个推通道:

{
        "push_message": {
            "transmission": "自定义消息内容"
        }
}

对于IOS通道的消息:

{
        "ios":{
            "aps":{
                "content-avaliable":"1"
            },
            "payload":"自定义消息内容"
        }
}
对于苹果通道的透传 即静默通知需要注意:
  • 静默通知主要用于更新和同步数据,用户对其无感知,因此静默通知一般不设置通知内容、声音和角标
  • 静默通知唤醒后台App,最多有30秒的时间处理系统回调
  • 静默推送的优先级低,系统不能保证推送必达,大量的静默推送通知可能被系统将限制。苹果官方建议一个小时不超过2-3条静默推送
  • 不要利用静默通知对App进行保活,APNs若检测到较高频率的静默通知发送请求,可能会终止其发送(具体策略苹果未公开)
  • 具体可以参考相关的苹果官方文档

2.2 通知代码示例:

调用 服务端 RestAPI V2 设置个推通道:

{
    "push_message":{
            "notification":{
                "title":"标题",
                "body":"内容",
                "click_type":"startapp"
            }
        }
}

对于 Android 厂商通道:

{
    "android":{
        "ups":{
            "notification":{
            "title":"标题",
            "body":"内容",
            "click_type":"startapp"
            }
        }
    }
}

对于 iOS 通道:

{
        "ios":{
            "aps":{
                "alert":{
                    "title":"标题",
                    "body":"内容"
                }
            },
            "payload":"自定义消息内容"
        }
}

APP推送自定义通知铃声

APP推送自定义通知铃声

一、场景描述

1.1 场景描述

众所周知,消息推送是生活服务、金融理财、新闻资讯等各类 App 和用户之间交互的桥梁。App 通过通知栏消息,低成本、高效率地向用户告知产品功能更新、运营活动上线、日常新闻动态等重要消息。为了帮助用户不错过重要通知,使 App 和用户之间的交互更加顺畅,个推 SDK 还支持 App 开发者自定义通知铃声(区别于系统提示音),通过声音的方式,更加有效地提醒用户及时查阅关键消息。

1.2 名称解释

名词解释
通知铃声个推SDK自动处理在手机系统通知栏中展示通知栏消息时,响铃提醒用户。

1.3 各渠道支持情况

机型个推渠道厂商渠道
华为支持支持
荣耀支持不支持
小米支持支持
OPPO支持不支持
VIVO支持不支持
魅族支持不支持
IOS支持支持

二、技术实现方案

自定义铃声需要客户端和服务端配合使用。

2.1 客户端实现

android

在客户端 app/res/raw 目录下放置铃声文件(支持 mp3、wav、mpeg 等多种格式的音频文件),例如设置铃声文件名为:ringing.mp3

ios

在客户端把自制好的的铃声添加到项目的 main bundle 中后,在项目设置 Build Phases–>Copy Bundle Resources 中添加您的铃声文件(支持 aiff,wav,caf,mp3 格式音频文件)。

2.2 服务端实现

开发者可通过调用 个推服务端 api 或者登陆 个推开发者中心 从页面下发消息。针对这两种消息下发方式,开发者都可以通过简单配置,自定义消息下发时的通知栏铃声。

2.2.1 服务端 api 设置

由于默认的厂商策略是:在成功集成多厂商的前提下且 app 在线(即 app 在前台打开运行)时,下发 push_message 内的消息;app 离线( app 在后台、锁屏、进程关闭)时,下发 push_channel 内的消息。因此开发者在调用个推服务端 api 下发消息时,需要同时在 push_message 和 push_channel 内指定该铃声,

配置代码如下:

{
    "request_id": "请填写 10 到 32 位的 id",
    "settings": {
        "ttl": 3600000
    },
    "push_message": {
        //个推在线通知仅支持android,ios在线请使用透传消息
        "notification": {
            "title": "个推在线通知标题",
            "body": "个推在线通知内容",
            "click_type": "url",
            "url": "https://www.getui.com/",
            //从个推通道下发通知消息时的铃声文件名,此处不用填文件格式后缀名
            "ring_name": "ringing",
            //若有多个铃声文件,建议配套通知渠道使用,每个铃声指定不同的渠道id
            "channel_id": "请填写自定义渠道id",
            "channel_name": "请填写自定义渠道名",
            "channel_level": 4
        }
    },
    "push_channel": {
        "android": {
            "ups": {
                "notification": {
                    "title": "厂商离线通知标题",
                    "body": "厂商离线通知内容",
                    "click_type": "url",
                    "url": "https://www.getui.com/"
                },
                //options内为华为、小米的离线通知铃声设置
                "options": {
                    "HW": {
                        "/message/android/notification/default_sound": false,
                        "/message/android/notification/channel_id": "RingRing4",
                        "/message/android/notification/sound": "/raw/ringing",
                        "/message/android/notification/importance": "NORMAL",
                    },
                    "XM": {
                        "/extra.sound_uri": "小米后台申请的自定义sound_url地址",
                        "/extra.channel_id": "小米后台申请的"重要消息"通知类别id"
                    }
                }
            }
        },
        "ios": {
            "type": "notify",
            "aps": {
                "alert": {
                    "title": "ios离线通知标题",
                    "body": "ios离线通知内容"
                },
                "content-available": 0,
                //sound字段为ios通知铃声文件名(包含格式后缀名)。
                "sound": "ringing.mp3",
                "category": "ACTIONABLE"
            },
            "auto_badge": "+1"
        }
    }
}

注意事项

  1. 在使用自定义铃声前,必须完成个推消息推送 SDK 和个推消息推送多厂商版本 SDK 的集成,建议使用:个推官网最新版SDK 。
  2. options 内相关参数的生成,可参考个推文档中心:【华为】离线自定义铃声 、【小米】离线自定义铃声 。
  3. 目通过以上方式实现后,app 在线时:ios、android 都支持自定义铃声;app 离线时:ios 完全支持、android 暂时只有小米、华为机型支持自定义铃声。其它安卓机型,等待对应厂商平台开放相关功能后会进行适配。
  4. Android 12 由于系统限制,不支持在线自定义铃声。

2.2.2 个推开发者中心设置

1、 登陆 个推开发者中心,进入个推消息推送 dos 页面,点击【创建推送】后在 Android 配置模块中选择【通知渠道模板】。一般默认为响铃、震动、唤醒屏幕。

2、通过设置通知渠道模板,来设置通知的提醒方式。可以自主选择响铃、震动、浮动、唤醒屏幕等多种方式对用户进行消息弱提醒、强提醒。如果是重要的消息内容,还可以针对通知栏铃声进行自定义设置,提醒特定用户群体及时关注消息;如果没有进行自定义设置,则通知栏铃声则默认为系统声音。

3、自定义铃声设置:在渠道模板【提醒方式】中选择通知铃声,输入自定义文件名。

个推推送使用别名推送三方账号打通

个推推送使用别名推送三方账号打通

一、需求背景

1.1 背景描述

APP 在运营过程中,都拥有属于自己的账号体系,其账号运营体系不尽相同,例如银行类 APP 的账号体系为银行卡号、社交类 APP 体系为社交 ID 号、自定义昵称、手机号等等。因此第三方消息推送在基于账号体系场景下进行消息精准推送,例如银行类 APP 账户余额变动、订单状态更新等,则需要与账号体系进行打通、绑定、识别并进行单个用户精准推送消息。

因此个推消息推送推出基于不同体系账号下的 APP 提供了别名推送功能,可有效打通不同体系下的账号屏障,基于个推 CID 与各个 APP 绑定账号关系,实现用户的精准推送,以满足某些场景下的特定推送需求。

1.2 名称解释

名词解释
CID个推业务层中的对外用户标识,用于标识客户端身份,由第三方客户端获取并保存到第三方服务端,是个推 SDK 的唯一识别号,简称 cid。
别名别名是 APP 为用户定义的标识,可用于用户账号与个推 cid 关联,建议将邮箱、昵称、手机号等用户标识设为别名。为用户绑定别名后,可以通过别名圈选目标用户进行推送。

二、技术实现方案

2.1 前置准备

完成 android 集成指南 和 ios 集成指南 。

2.2 设置别名

开发者可在客户端或者服务端给 cid 设置别名,客户端需要区分 android 和 ios,开发者选择其中一个渠道(客户端或服务端)设置即可。

2.2.1 客户端设置别名

平台实现方式
android在成功获取 cid 的回调方法 onReceiveClientId 内,调用 绑定别名接口 将 APP 的用户标识设置为 cid 的别名。
ios在成功获取 cid 的回调方法 GeTuiSdkDidRegisterClient 内,调用 绑定别名接口 将 APP 的用户标识设置为 cid 的别名。

注意事项:

  1. 重复绑定别名以最后一次为准,同一个 cid 绑定接口调用的间隔需大于 1 s,客户端单个设备每天限制调用 100 次。
  2. 一个 cid 只支持绑定一个别名,,一个别名至多绑定 10 个 cid 。

2.2.1 服务端设置别名

开发者可通过调用 个推服务端 api 或者直接从 个推开发者中心 页面绑定别名。

2.2.1.1 服务端 api 设置别名

开发者需要自己存储 cid,在系统新增 cid 时,调用 绑定别名接口 将 APP 的用户标识设置为 cid 的别名。

2.2.1.2 开发者中心设置别名

登陆 个推开发者中心 ,进入下图页面可选择添加单个别名或者批量导入别名。

①添加单个别名:点击【添加别名】输入别名和 cid 即可绑定别名用户。

②批量导入别名:首先创建一个别名和对应 cid 的 TXT 文本,然后点击【批量导入】上传别名列表文本,最后点击【导入】即可批量添加别名以及对应的 cid 用户。

2.3 服务端推送

开发者可通过调用 个推服务端 api 或者直接从 个推开发者中心 页面推送消息。

2.3.1 服务端 api 推送

使用 执行别名单推 接口,给指定别名用户进行推送。

2.3.2 开发者中心推送

点击 创建通知/透传 消息,选择【别名用户】进行消息推送。例如绑定别名用户为 test ,输入 test 即可圈选测试别名下的所有用户进行推送。

OPPO厂商QPS限制说明

OPPO厂商QPS限制说明

OPPO平台限制

  • 限制规则 OPPO推送对QPS的分配主要依据应用的累计用户数,应用类别权重和平台推送系数三个值进行加权计算。具体请参考OPPO侧QPS说明
  • 累计用户数 在OPUSH平台上的查询路径是OPPO PUSH推送运营平台—我要推送消息—应用列表中的累计用户数。
  • 计算公式
    应用QPS = 推送QPS参考值 应用类别权重 平台推送系数
    例如:针对应用维度,30000 QPS表示1秒内本应用最多可推送给30000个用户(所有接口共享应用维度限速上限总值)。
    具体的QPS对应值如下:
累计用户数推送QPS参考值应用类别权重平台推送系数(默认 = 1)
≥10000万3000011
≥5000万且<10000万2000011
≥1000万且<5000万1000011
<1000万500011

备注:QPS(Quantity per second)表示1秒可调用OPPO PUSH的请求数。

  • 提升途径:暂不开放申请。

小米厂商QPS限制说明

小米厂商QPS限制说明

小米平台限制

  • 小米推送对推送速率(QPS)的分配主要依据 App 的 MIUI 日联网设备数进行分级计算。
  • QPS:表示1秒可调用的请求数。1个请求里最多可以携带1000个目标设备。例如:3000 QPS时,1秒内最多可推送300万设备。
  • 提升途径:暂不开放申请。
  • 不同量级的MIUI日联网设备数分配不同的QPS:
MIUI 日联网设备数QPS
≥1000万3000
≥500万且<1000万2500
≥100万且<500万2000
≥10万且<100万1000
<10万500

荣耀厂商QPS限制说明

荣耀厂商QPS限制说明

荣耀平台限制

  • 推送速率限制:单应用QPS统一限制为3000
  • 建议应用:1)降低并发请求量,将每秒请求数控制在QPS配额内。2)优化发送效率,在一次请求中携带更多token。
  • QPS(Quantity per second):每秒推送请求数。每次请求最多可携带1000个token。

华为厂商QPS限制说明

华为平台限制

  • 发送速率(QPS)= App 在华为渠道 MAU x 应用类别权重系数 x 0.00072 ;具体请参考 华为侧QPS说明
  • 如您的应用通过QPS公式计算所得的值不足6000,将执行默认6000的QPS;同时,全网流量较高时,也会出现系统级流控(流控对应的状态码为HTTP 503
  • 提升途径:可以联系华为官方进行调整 QPS,申请邮件:hwpush@huawei.com

名词解释

  • MAU:在华为渠道推送应用的每月最后一个自然日的值作为当月的 MAU。
  • 分类规则:依据在华为应用市场上架的应用分类。
分组说明应用分类权重系数
IM类社交通讯5
金融类金融理财5
新闻类新闻阅读;资讯生活4
内容类图书阅读、影音娱乐、拍摄美化、休闲娱乐3
电商类购物比价3
衣食住行类便捷生活、出行导航、旅游住宿、美食3
商务类商务、汽车3
游戏类网络游戏、休闲益智、经营策略、棋牌桌游、体育竞速、角色扮演、动作射击2
工具类实用工具1
运动健康类医疗健康;运动健康1
其他类儿童、教育、主题个性1
默认类Default1

华为消息推送限额华为平台限制条件

华为平台限制

  • 发送条数限制:每天向单个设备最多可发送3000条,超过后会被限流24小时,一天内向单个设备发送超过10万条会直接封禁推送权益,需要整改并申报整改方案重新向华为申请 push 权益。
  • 发送速率限制:华为推送对推送速度的分配,主要依据 App 在华为渠道的月活、App 在华为应用市场上架时的应用类型这两个要素进行计算分配。

魅族推送限额说明魅族平台限制条件

魅族推送限额说明魅族平台限制条件

魅族平台限制

限额说明

  • 单个应用每天的推送有次数限制,默认为1000次/天;不包含单推接口,单推接口不限制。
  • 单个应用订阅标签的个数不超过100个。
  • 单个设备单个应用推送消息 ≥ 4条会被折叠展示,消息多次不点击后有可能会被收纳于右上角消息收纳盒。

小米平台限制小米消息推送限额说明

小米平台限制小米消息推送限额说明

小米平台限制

限额说明

  • 普通消息适用于推送热点新闻、新品推广、平台公告、社区话题、有奖活动等,多为用户普适性的内容。当应用的MIUI日联网设备数小于10000时,每日推送限额数为50000;当应用的MIUI日联网设备数大于10000时,每日推送限额数根据应用类别而定,详情请参见 小米通知渠道介绍
  • 通知消息适用于推送聊天消息、个人订单变化、快递通知、交易提醒、IoT系统通知等与私人通知相关的内容。通知消息的每日推送数量不受限制,详情请参见 小米通知渠道介绍

额度查询指引

  • 管理台查询:在【小米开放平台】>【推送运营平台】>【推送统计】>【用户数据】>【数据详情】,可查询 MIUI 日联网设备数。
  • API 查询:请参见 小米推送消息限制说明 查询当日可下发总量和当日已送达数。