已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
烟台杰瑞教育科技有限公司 使用极光推送实现分组发送和服务端集成推送功能在手机应用开发中越来越重要,几乎成为App必备的功能,由于Android本身没有消息推送机制,通常采用的是基于XMPP协议的推送,但这种开发很麻烦,因此在市场上应运而生了提供消息推送服务的诸多产品,例如:百度云、个推、极光等。极光推送正是一个整合了Android推送、iOS推送的统一推送服务平台。下面讲解一下如何使用极光实现消息推送应用,并重点讲解一下如何实现向分组发送消息及推送服务端和自身应用集成,具体实现过程如下:一、注册应用1.进入官网首先进入官网首页/,注册账号2.注册应用登录到用户平台,点击创建应用如图所示:包名:创建应用项目的基础包,单击创建,产生应用信息如图所示:产生AppKey和API主密码,每个客户端应用使用唯一一个AppKey二、环境搭建1.SDK下载官网资源地址:/downloads/sdk/android/ 下载 JPUSH Android SDK。2.导入SDK开发包 复制 libs/jpush-sdk-release1.x.y.jar 到工程 libs/ 目录下 复制 libs/armeabi/libjpush.so 到工程 libs/armeabi 目录下3.配置AndroidManifest.xml详细请参照官网http:/docs.jpush.io/guideline/android_guide/#sdk文档中说明进行配置4.测试是否成功集成完成后,JPush 提供的推送服务是默认就已经开启,这时客户端就可以接收到来自服务的消息了,可通过登录到JPush用户平台,发送通知测试集成是否成功如图所示:三、Android端开发,实现向指定人群推送消息集成成功之后,服务端发送消息会被所有的安装应用的客户端所接收,我们再继续看看如何在应用中向指定的人群进行消息推送?要指定向某一个特定的人,或者某一群特定的人,则相对复杂。因为对于 JPush 来说,某一个人就是一个注册ID,这个注册ID与开发者App没有任何关系,或者说对开发者App是没有意义的。如果要对开发者App有意义的某个特定的用户推送消息,则需要:把 JPush 注册用户与开发者App 用户绑定起来。我们可以使用别名与标签的功能1.设置别名(alias)为安装了应用程序的用户,取个别名来标识。以后给该用户 Push 消息时,就可以用此别名来指定。每个用户只能指定一个别名。同一个应用中,尽可能为每个客户端用户标识唯一名称,以便服务端能通过该名称来唯一确定用户。调用JPushInterface方法:public static void setAlias(Context context, String alias, TagAliasCallback callback)如下所示:new TagAliasCallback() Override public void gotResult(int responseCode, String alias, Set tags) switch (code) case 0: logs = Set tag and alias success; Log.i(TAG, logs); break; case 6002: logs = Failed to set alias and tags due to timeout. Try again after 60s.; Log.i(TAG, logs); break; default: logs = Failed with errorCode = + code; Log.e(TAG, logs); 2.设置标签(tag)标签实质就是将应用客户根据应用的需要按类别进行分组,服务端可以组为单位来批量下发 Push 消息,这样组内客户端所有用户都可以收到该消息。一个用户可以打多个标签,标签没有唯一性要求。调用JPushInterface方法:public static void setTags(Context context, Set tags,TagAliasCallback callback)3.同时设置组和标签也可调用JPushInterface的setAliasAndTags方法同时设置别名和标签,方法如下: public static void setAliasAndTags(Context context, String alias, Set tags, TagAliasCallback callback)下面代码实现为登录的学生设置别名和标签,别名为其学号,每个用户有两个标签分别是所属班级和所属专业,user是用户登录成功后的信息if(user!=null) / TODO Set tags=new HashSet();if(user.getClassName()!=null&!user.getClassName().equals() tags.add(user.getClassName();/记录学生所属班级if(user.getMajorName()!=null&!user.getMajorName().equals() tags.add(user.getMajorName();/记录学生所属专业/将学生设置到班级和专业组,并设置别名为学生的学号JPushInterface.setAliasAndTags(getApplicationContext(), user.getUserNo(),tags, new TagAliasCallback() Override public void gotResult(int responseCode, String alias, Set tags) / TODO if(responseCode=0) Log.i(tags, tags.toString(); ); 这样服务端可以以专业和班级为单位实现批量发送消息,也可以按学号向指定学生发消息四、开发消息推送服务端一、环境搭建1.下载服务端SDK下载地址:/download/attachments/2228302/jpush-client-3.2.3.zip?version=2&modificationDate=14151664910002.在项目中加入jar包二服务端实现步骤1.创建JPushClientJPushClient jpushClient = new JPushClient(masterSecret, appKey, 3);参数说明: masterSecret:注册应用的主密码,即API主密码 appKey:注册应用的应用Key maxRetryTime:最大的尝试次数,设为3表示:跟服务器进行建立连接若失败会尝试再进行两次尝试2. 构建一个PushPayload对象(推送对象)确定推送消息的目标,包括推送的平台(Android、IOS)、消息内容和目标(所有人、别名、标签),构建简单的推送对象:向所有平台,所有人,推送内容为 content 的通知。 public static PushPayload buildPushObject_all_all_alert(String content) return PushPayload.alertAll(content); 构建推送对象:所有平台,推送目标是别名为alias,通知内容为 content。public static PushPayload buildPushObject_all_alias_alert(String alias,String content) return PushPayload.newBuilder() .setPlatform(Platform.all()/所有平台 .setAudience(Audience.alias(alias)/向选定的人推送 .setNotification(Notification.alert(content)/消息内容 .build();构建推送对象:向android平台,向目标标签tag,通知标题title,内容为 content。public static PushPayload buildPushObject_android_tag_alertWithTitle (String alias,String title,String content) return PushPayload.newBuilder().setPlatform(Platform.android() .setAudience(Audience.tag(tag)/向指定的组推送 .setNotification(Notification.android(message, title, null).build(); 3.推送消息PushResult result=jpushClient.sendPush(payload);应用客户推送消息参数:payload 即第二步创建的推送对象返回值:PushResult 表示服务端推送结果包含下列数据: msg_id:返回推送消息的id三服务端代码实现1.编写MessagePush组件封装消息推送方法public class MessagePush private static final String appKey = d1c241706d82996e1fcdc2b2; private static final String masterSecret = 7ee1df1a631aee5a6a5a1129; private JPushClient jpushClient ; private String title; private String content;public MessagePush(String message) this.message = message; jpushClient = new JPushClient(masterSecret, appKey,3); public MessagePush(String message,String title) this(message); this.title=title; /* * 向所有人发送消息 * return 消息id */public long sendPushAll() PushPayload payload=buildPushObject_all_all_alert(); long msgId=0; try PushResult result=jpushClient.sendPush(payload); msgId=result.msg_id; catch (APIConnectionException e) / TODO Auto-generated catch block LOG.error(Connection error. Should retry later. , e); catch (APIRequestException e) LOG.info(HTTP Status: + e.getStatus(); msgId=e.getMsgId(); return msgId; /* * 向指定别名的客户端发送消息 * param alias 所有别名信息集合,这里表示发送所有学生编号 * return 消息id */ public long sendPushAlias(Set alias) PushPayload payloadAlias=buildPushObject_android_alias_alertWithTitle(alias); long msgId=0; try PushResult result=jpushClient.sendPush(payloadAlias); msgId=result.msg_id; catch (APIConnectionException e) LOG.error(Connection error. Should retry later. , e); catch (APIRequestException e) LOG.info(HTTP Status: + e.getStatus(); LOG.info(Error Code: + e.getErrorCode(); LOG.info(Error Message: + e.getErrorMessage(); LOG.info(Msg ID: + e.getMsgId(); msgId=e.getMsgId(); return msgId; /* * 向指定组发送消息 * param tag 组名称* return 消息id */public long sendPushTag(String tag) PushPayload payloadtag = buildPushObject_android_tag_alertWithTitle(tag); long msgId=0; try PushResult result = jpushClient.sendPush(payloadtag); msgId=result.msg_id; LOG.info(Got result - + result); catch (APIConnectionException e) LOG.error(Connection error. Should retry later. , e); catch (APIRequestException e) LOG.info(HTTP Status: + e.getStatus(); LOG.info(Error Code: + e.getErrorCode(); LOG.info(Error Message: + e.getErrorMessage(); LOG.info(Msg ID: + e.getMsgId(); msgId=e.getMsgId(); return msgId; /* 下列封装了三种获得消息推送对象(PushPayload)的方法* buildPushObject_android_alias_alertWithTitle、* buildPushObject_android_tag_alertWithTitle、* buildPushObject_all_all_alert*/public PushPayload buildPushObject_android_alias_alertWithTitle(Set alias) return PushPayload.newBuilder().setPlatform(Platform.android() .setAudience(Audience.alias(alias) .setNotification(Notification.android(message,title,null).build();public PushPayload buildPushObject_android_tag_alertWithTitle(String tag) return PushPayload.newBuilder().setPlatform(Platform.android() .setAudience(Audience.tag(tag) .setNotification(Notification.android(message, title, null).build(); public PushPayload buildPushObject_all_all_alert() return PushPayload.alertAll(message); 2.JSP页面主要是设计表单将数据提交给MessagePushServlet,这里页面代码就不附加了3.编写Servletpublic class MessagePushServlet extends HttpServlet public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException int ret=0; requ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025水发集团有限公司招聘笔试历年常考点试题专练附带答案详解试卷3套
- 2025安徽港口集团芜湖物流有限公司社会招聘2人笔试历年常考点试题专练附带答案详解试卷3套
- 2025四川资阳高新产业促进服务有限公司招聘3笔试历年备考题库附带答案详解试卷3套
- 2025北京空港航空地面服务有限公司招聘50人笔试历年常考点试题专练附带答案详解试卷3套
- 科研实训综合楼项目风险评估报告
- 2025中建交通建设集团有限公司招聘笔试历年备考题库附带答案详解试卷3套
- 2025东北证券研究咨询分公司秋季校园招聘笔试历年备考题库附带答案详解试卷3套
- 城市道路互通改造工程施工方案
- 2025年及未来5年中国阿托伐他汀市场竞争态势及行业投资潜力预测报告
- 从国企上岸公务员考试试题及答案
- 社交礼仪知识互动试题及答案
- 2025贵阳市城市建设投资集团有限公司第二批招聘笔试考试参考试题附答案解析
- 承装修安全生产管理制度
- 2025物流师考试试题及答案物流师考试真题及答案
- 2025-2026学年天一大联考高二物理第一学期期末质量跟踪监视模拟试题含解析
- 配电室安全检查要点和监管培训
- 市政府办公文材料审核办法
- 2026年中国食品检验检测市场调查与市场前景预测报告
- 职业生涯规划计划书(34篇)
- 2025-2030中国眼视光行业现状态势与未来前景预测报告
- 撬装加油站管理制度
评论
0/150
提交评论