您的位置:首页 > 移动开发 > Android开发

JPush(极光)推送那些事儿

2017-08-15 21:00 162 查看
最近项目中有用到极光推送,其实以前也有用过,只是当时就是实现了功能,没有去研究更深一些的东西。刚好,借着这次的机会,去研究了一下原理性的东西,包括后台 和 客户端。这里就来记录一下,免得忘记。

先说一下原理:

三个角色:JPush服务器,我们自己的后台,android客户端。

它们之间的关系:



第一步

拿着自己app的包名去JPush开发者平台注册,得到我们需要的appkey 和 sercet。(具体方法不再赘述)

第二步

服务端:

前期工作:

需要依赖Jpush提供的.jar,并且需要将在Jpush平台注册得到的appkey 和 secret配置到对应的文件中。当然了,现在服务端多使用maven pom.xml来配置所需依赖,如下:

<dependency>

<groupId>cn.jpush.api</groupId>

<artifactId>jpush-client</artifactId>

<version>3.3.0</version>

</dependency>


::::::::::::::::::::::

具体推送逻辑(拿后台的一个实例方法):

/**推送分配线索的消息到客户端*/
private void saveImportListOtherWork (LshDaoRuMingDanModel lshDaoRuMingDanModel) {

//省略...

//推送消息给sc,也就是推送给手机app
String msg = MessageContext.getDCCDistributionClueMessage(lshDaoRuMingDanModel.getCustomerName());

//这个是静态方法,用于执行将此消息插入到数据库的操作-----我们app端的消息列表就是从数据库中拿到消息数据的                                LshMsgUtils.getLshMsg(lshDaoRuMingDanModel.getPermit(), lshDaoRuMingDanModel.getBelongCDO(), lshDaoRuMingDanModel.getPermit(),
lshDaoRuMingDanModel.getBelongSC(),"线索", msg, lshDaoRuMingDanModel.getBelongCDO(), lshDaoRuMingDanModel.getCustomerPhone());
//极光推送
JsonObject jsonObject = JsonObjectUtils.getJsonObject("线索", null, null, lshDaoRuMingDanModel.getCustomerPhone(), null, lshDaoRuMingDanModel.getBelongSC());

List list = new ArrayList();
list.add(lshDaoRuMingDanModel.getBelongSC());
//调用工具类中的推送方法实现推送                           JPush.sendPushForAndroidAndIos(msg, msg, jsonObject, list, JPush.Platforms.iTask);
}

/**
*  静态方法-------用于将消息体插入数据库
*/
public static LshMessageModel getLshMsg(String sendPermit, String sendUser, String recPermit, String recUser, String msgType, String content,String updateUser, String mobile) {
Timestamp ts = DateFormatUtils.getFormatTimestamp("yyyy-MM-dd HH:mm:ss", new Date());
LshMessageModel l = new LshMessageModel();
l.setSendUser
4000
(sendUser);
l.setSendPermit(sendPermit);
l.setreceivePermit(recPermit);
l.setReceiver(recUser);
l.setMsgType(msgType);
l.setMsgContent(content);
l.setIsDelete("否");
l.setUpdateUser(updateUser);
l.setMsgCreateTime(ts);
l.setUpdateTime(ts);
l.setMobile(mobile);
l.setRead(false);
return lshMsgUtils.lshMsgRepository.save(l);
}


附带推送工具类。

JPush.java

第三步

客户端:

前期工作:

需要依赖Jpush提供的.jar,.so文件,并且需要在清单文件中配置appkey,appkey是在在Jpush平台申请到的。

当然了,还需要在清单中配置所需权限:

<!-- 极光推送需要的权限-->
<permission                     android:name="com.iris.dch.itask.permission.JPUSH_MESSAGE"
android:protectionLevel="signature" />

<!-- 极光推送需要的权限    Required  一些系统要求的权限,如访问网络等-->
<uses-permission     android:name="com.iris.dch.itask.permission.JPUSH_MESSAGE" />
<uses-permission   android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission
android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.WAKE_LOCK" />
<uses-permission
android:name="android.permission.READ_PHONE_STATE" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission
android:name="android.permission.WRITE_SETTINGS" />
<uses-permission
android:name="android.permission.VIBRATE" />
<uses-permission
android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission
android:name="android.permission.ACCESS_WIFI_STATE" />


除了以上两点,客户端还需要重写广播接收者,以接收推送过来的消息。

备注:在这个接收者中,还使用了有关消息列表的获取,也就是实时更新消息列表。

这里的逻辑就是,服务端推送一条消息的同时,把这条消息插入数据库,app接收到通知消息的同时,会发请求,请求得到的就是数据库中的消息。所以说,Jpush只是推送了通知消息而已。准确来说,是我们自己的后台,调用Jpush的推送方法推送消息给app。在Jpush后台,可以看到我们的推送记录。

附件:JPushReceiver.java

好了,关于JPush到此结束。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息