针对标签和别名的推送功能.


(逆风云) #1

别名和标签目前不能同时使用吗?
目前有这样的需求,需要同时满足标签和别名才对该消息进行发送.
场景如下:
手机端App语言分为日语和中文,英语三种,想使用三个标签来表示.
每台手机的登录用户使用一个别名,
发送的时候,服务器会根据条件赛选出一部分用户,查出对应的别名,然后针对这部分用户,语言类型为 英语,的客户发送推送消息,也就是同时满足标签和别名两个条件.才进行发送.

标签可以实现这个功能,但是最多一次性发送一百条数据,

仅使用别名那么服务端就要记录一个用户的两个别名,或者别名添加前缀标识,相对麻烦,有没有相对好的解决办法呢?

另外,别名发送数量限制为一次性发送1000条,这个数量可以增加吗?如果不可以,那么超过的条数是保存在极光服务器等待发送吗?等待的时间大概时多久.


#2

1、推送的时候,可以同时传别名和标签,二者取交集
目前是调 API 支持,官网还没有实现这个效果
https://docs.jiguang.cn/jpush/server/push/rest_api_v3_push/#audience

2、1000 的限制针对的是别名,也就是你只能最多一次性传 1000 个别名,而别名是可以被 N个设备设置的,并没有限制实际送达设备数,如果你们别名和设备是唯一对应,那就只能有 1000 个。没有办法增加,传参多于1000 ,该消息会报错,不会下发

这是什么意思


(逆风云) #3

请问这样写可以吗?官网上只有标签和标签一起发送,别名和别名一起发送,并没有标签和别名的示例,

     /**
	         * 设置别名和标签同时发送.
	         * @param days  有效期
	         * @param title 标题
	         * @param alias 别名
	         * @param content 消息体
	         * @param tag	标签
	         * @param alert 通知栏内容
	         * @return
	         */
	        public static PushPayload sendAliasAndTag(String days,String title,String alias,String content,String tag,String alert) {
	            Builder builder = PushPayload.newBuilder();
	            return builder.setPlatform(Platform.android())
	            		.setAudience(Audience.tag(tag))
	            		.setAudience(Audience.alias(alias))
	            		.setNotification(Notification.newBuilder().setAlert(alert).build())
	            		 .setMessage(Message.newBuilder()
                                 .setTitle(title)
                                 .setMsgContent(content)
                                 .build())
                 .setOptions(Options.newBuilder()
                         .setApnsProduction(false)
                         .setTimeToLive(Long.valueOf(Integer.valueOf(days)*86400))
                         .build())
                 .build();
	        }

标签可以实现这个功能,但是最多一次性发送一百条数据,

这是什么意思
–>原本想每个用户设置一个tag,但是,发送有限制,每次最多给100个tag发送消息,就只能通过别名+标签的方式来实现.

另外还有一个问题,就是,因为是通过别名进行发送的,那么统计数据是怎么计算呢,因为假如使用标签发送,那么可以直接统计这个标签送达率和打开率,但是通过别名,每个用户一个别名,那么统计数据是可以统计到这一批次发送的所有用户吗?还是只能统计单个别名是否发送成功,而不是整体的?


(逆风云) #4

关于别名限制最多传递1000个的数量,是厂商的限制还是极光内部的限制呢?

那假如想要实现,根据用户的消费情况,或者登陆情况,浏览情况实时查询出符合要求的用户,针对这些用户发送通知就只能通过标签来实现吗?如果是这样那么推送就比较繁琐了呀.
方法:
1.每次新装App设置标签.(不灵活)
2.App定时访问服务器请求最新的标签更新.(必须打开app登录后更新)
3.通过极光推送,推送空白通知,要求更新标签.(必须app在线,否则也没办法更新标签)
4.通过别名(别名限制最多1000).

有没有其他更好的办法呢?
目前看来只能每次根据用户ID进行排序,每次发送一千个,做定时任务发送了.

另外,限制发送1000个多久可以再次发送消息呢?


#5

1、示例不可能写完所有的情况,自行参考调用,Audience 参数是允许多个条件一起设置,结果默认取交集。

2、

发送有限制这个限制你在哪里看的。调一次 API 只能最多传 20 个 tag,一个 tag可以被N个用户设置

3、统计数据均是对这条消息的统计,你这个消息是发送给多少个别名,对应了多少个目标设备,这些用户送达和打开了多少,跟你这条消息是给标签推送的没什么区别

4、调一次 API ,Audience 传别名或者标签或者广播推送,参数要求一次不能超过 1000 个别名或 20 个 tag,你符合条件的 N 个用户都是可以设置同一个别名或者标签的!也就是你 N 个用户设置了 A 别名或标签,给 A 别名或者标签推送一条消息,N 个用户都能收到。

5、标签和别名实际上最大的差别就是一个设备只能设置一个别名,可以设置多个标签,而别名和标签都是可以被 N 个用户设置的,没有限制,不知道你这一点清楚吗??

6、服务端提供了 device API 给用户设置别名或者标签,如果你们上传保存了 registrationID,那么筛选出符合条件的用户的 ID,调 API 给他们统一设置一个别名或标签,然后调 API 推送消息给这个别名或标签就行了。
https://docs.jiguang.cn/jpush/server/push/rest_api_v3_device/

7、调 API 推送的频率限制是免费的 1 分钟 600 次
https://docs.jiguang.cn/jpush/server/push/server_overview/#api_1