Skip to content

Commit 1ac626b

Browse files
committed
Merge pull request #66 from KenChoi1992/dev
Android平台Notification+Message长度限制修改
2 parents 41a4c78 + 430576a commit 1ac626b

File tree

2 files changed

+70
-7
lines changed

2 files changed

+70
-7
lines changed

src/main/java/cn/jpush/api/push/model/PushPayload.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ public class PushPayload implements PushModel {
2929
private static final String OPTIONS = "options";
3030
private static final String SMS = "sms_message";
3131

32-
private static final int MAX_GLOBAL_ENTITY_LENGTH = 1200; // Definition acording to JPush Docs
33-
private static final int MAX_IOS_PAYLOAD_LENGTH = 220; // Definition acording to JPush Docs
32+
private static final int MAX_GLOBAL_ENTITY_LENGTH = 4000; // Definition acording to JPush Docs
33+
private static final int MAX_IOS_PAYLOAD_LENGTH = 2000; // Definition acording to JPush Docs
3434

3535
private static Gson _gson = new Gson();
3636

src/test/java/cn/jpush/api/push/model/PushPayloadTest.java

Lines changed: 68 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,22 @@ public void testGlobalExceed() {
110110
.setMessage(Message.content(LONG_TEXT_2))
111111
.build();
112112
System.out.println("Size: " + LONG_TEXT_2.getBytes().length);
113-
Assert.assertTrue("Should exceed - " + LONG_TEXT_2.getBytes().length,
113+
Assert.assertFalse("Shouldn't exceed - " + LONG_TEXT_2.getBytes().length,
114114
payload.isGlobalExceedLength());
115115
}
116116

117+
@Test
118+
public void testGlobalExeed2() {
119+
PushPayload payload = PushPayload.newBuilder()
120+
.setPlatform(Platform.all())
121+
.setAudience(Audience.all())
122+
.setMessage(Message.content(LONG_TEXT_3))
123+
.build();
124+
System.out.println("Size: " + LONG_TEXT_3.getBytes().length);
125+
Assert.assertTrue("Should exeed - " + LONG_TEXT_3.getBytes().length,
126+
payload.isGlobalExceedLength());
127+
}
128+
117129
@Test
118130
public void testIosExceed() {
119131
PushPayload payload = PushPayload.newBuilder()
@@ -122,7 +134,7 @@ public void testIosExceed() {
122134
.setNotification(Notification.alert(LONG_TEXT_1))
123135
.build();
124136
System.out.println("Size: " + LONG_TEXT_1.getBytes().length);
125-
Assert.assertTrue("Should exceed - " + LONG_TEXT_1.getBytes().length,
137+
Assert.assertFalse("Shouldn't exceed - " + LONG_TEXT_1.getBytes().length,
126138
payload.isIosExceedLength());
127139
}
128140

@@ -132,10 +144,10 @@ public void testIosExceed2() {
132144
.setPlatform(Platform.all())
133145
.setAudience(Audience.all())
134146
.setNotification(Notification.newBuilder().addPlatformNotification(
135-
IosNotification.alert(LONG_TEXT_1)).build())
147+
IosNotification.alert(LONG_TEXT_3)).build())
136148
.build();
137-
System.out.println("Size: " + LONG_TEXT_1.getBytes().length);
138-
Assert.assertTrue("Should exceed - " + LONG_TEXT_1.getBytes().length,
149+
System.out.println("Size: " + LONG_TEXT_3.getBytes().length);
150+
Assert.assertTrue("Should exceed - " + LONG_TEXT_3.getBytes().length,
139151
payload.isIosExceedLength());
140152
}
141153

@@ -159,6 +171,57 @@ public void testIosExceed2() {
159171
+ "本 Wiki 是极光推送 (JPush) 产品的开发者文档网站。"
160172
+ "极光推送所有技术文档都在本 Wiki 里,没有别的提供渠道。同时,我们也在不断地补充、完善文档。"
161173
+ "这些文档包括这样几种类型:常见问题、入门指南、API定义、教程等。";
174+
private static final String LONG_TEXT_3 = ""
175+
+ "这是 Push API 最近的版本。"
176+
+ "相比于 API v2 版本,v3 版本的改进为:"
177+
+ "完全基于 https,不再提供 http 访问;"
178+
+ "使用 HTTP Basic Authentication 的方式做访问授权。这样整个 API 请求可以使用常见的 HTTP 工具来完成,比如:curl,浏览器插件等;"
179+
+ "推送内容完全使用 JSON 的格式;"
180+
+ "支持的功能有所改进:支持多 tag 的与或操作;可单独发送通知或者自定义消息,也可同时推送通知与自定义消息;windows phone 目前只有通知。"
181+
+ "向某单个设备或者某设备列表推送一条通知、或者消息。"
182+
+ "推送的内容只能是 JSON 表示的一个推送对象。"
183+
+ "调用地址:POST https://api.jpush.cn/v3/push"
184+
+ "别名与标签使用教程 为什么需要别名与标签"
185+
+ "推送消息时,要指定推送的对象:全部,某一个人,或者某一群人。"
186+
+ "全部很好办,针对某应用“群发”就好了。Portal与API都支持向指定的 appKey 群发消息。"
187+
+ "要指定向某一个特定的人,或者某一群特定的人,则相对复杂。"
188+
+ "因为对于 JPush 来说,某一个人就是一个注册ID,这个注册ID与开发者App没有任何关系,或者说对开发者App是没有意义的。"
189+
+ "如果要对开发者App有意义的某个特定的用户推送消息,则需要:把 JPush 注册用户与开发者App 用户绑定起来。"
190+
+ "这个绑定有两个基本思路:"
191+
+ "把绑定关系保存到 JPush 服务器端"
192+
+ "把绑定关系保存到开发者应用服务器中"
193+
+ "前者,就是这里要说到的:别名与标签的功能。这个机制简单易用,适用于大多数开发者。"
194+
+ "后者,则是 JPush 提供的另外一套 RegistrationID 机制。这套机制开发者需要有应用服务器来维护绑定关系,不适用于普通开发者。"
195+
+ "Android SDK r1.6.0 版本开始支持。"
196+
+ "别名与标签的机制,其工作方式是:"
197+
+ "客户端开发者App调用 setAliasAndTags API 来设置关系"
198+
+ "JPush SDK 把该关系设置保存到 JPush Server 上"
199+
+ "在服务器端推送消息时,指定向之前设置过的别名或者标签推送"
200+
+ "SDK 支持的 setAliasAndTags 请参考相应的文档:别名与标签 API"
201+
+ "使用过程中有几个点做特别说明:"
202+
+ "App 调用 SDK setAliasAndTags API 时,r1.5.0 版本提供了 Callback 来返回设置状态。如果返回 6002 (超时)则建议重试"
203+
+ "老版本没有提供 Callback 无设置状态返回,从而没有机制确定一定成功。建议升级到新版本"
204+
+ "Portal 上推送或者 API 调用向别名或者标签推送时,可能会报错:不存在推送目标用户。"
205+
+ "该报错表明,JPush Server 上还没有针对你所推送的别名或者标签的用户绑定关系,所以没有推送目标。"
206+
+ "这时请开发者检查确认,开发者App是否正确地调用了 setAliasAndTags API,以及调用时是否网络不好,JPush SDK 暂时未能保存成功。"
207+
+ "使用别名 用于给某特定用户推送消息。别名,可以近似地被认为,是用户帐号里的昵称。"
208+
+ "使用标签 用于给某一群人推送消息。"
209+
+ "标签类似于博客里为文章打上 tag ,即为某资源分类。"
210+
+ "动态标签 JPush 提供的设置标签的 API 是在客户端的。"
211+
+ "开发者如何做到在自己的服务器端动态去设置分组呢? 比如一个企业OA系统,经常需要去变更部门人员分组。以下是大概的思路:"
212+
+ "设计一种自定义消息格式(业务协议),App解析后可以调用 JPush SDK setAliasAndTags API 来重新设置标签(分组)"
213+
+ "例:{\"action\":\"resetTags\", \"newTags\":[\"dep_level_1\":\"A公司\", \"dep_level_2\":\"技术部\", \"dep_level_3\""
214+
+ ":\"Android开发组\", \"address\":\"深圳\", \"lang\":\"zh\"]}"
215+
+ "要动态设置分组时,推送这条自定义消息给指定的用户"
216+
+ "使用别名的机制,推送到指定的用户。"
217+
+ "客户端App 调用 JPush SDK API 来设置新的标签"
218+
+ "通过极光推送服务,主动、及时地向您的用户发起交互,向其推送聊天消息、日程提醒、活动预告、进度提示、动态更新等。"
219+
+ "精准的目标用户和有价值的推送内容可以提升用户忠诚度,提高留存率与收入。"
220+
+ "客户端 SDK 采用自定义的协议保持长连接,电量、流量消耗都很少。 "
221+
+ "服务端先进技术架构,高并发可扩展性的云服务,经受过几亿用户的考验,"
222+
+ "完全省去应用开发者自己维护长连接的设备和人力的成本投入。"
223+
+ "简单的SDK集成方式,使开发商可以快速部署,更专注主营业务。灵活的推送入接入,"
224+
+ "同时支持网站上直接推送,也提供 消息推送和送达统计的 API调用。 ";
162225
}
163226

164227

0 commit comments

Comments
 (0)