app集成极光推送笔记(angular js)
出处:极光推送官方文档以及github上的文档
1.安装
一般使用cordova安装(其他安装方式详见文档),命令行输入:
cordova plugin add jpush-phonegap-plugin --variable APP_KEY=your_jpush_appkey
安装之后就可以直接使用,不需要window.JPush.init(),并且以下操作一般放在app启动时进行,并且需要在cordova的ondeviceready事件中。
2.获取RegistrationID
window.JPush.getRegistrationID(function (data) { $rootScope.registrationID = data; $log.debug("JPushPlugin:registration ID:"+$rootScope.registrationID); });
获取到的设备id用来进行设备绑定,可以用$rootScope上的一个变量来存储,项目中发现android设备第一次获取RegistrationID是空的第二次就好了,ios正常,不知道什么原因。
3.设置别名(alias)与标签(tags)
别名和标签也是用来进行设备绑定的,一般别名选用例如用户名,标签就例如Student或者teacher等等,可为每个用户打多个标签,所以标签是一个数组,设置了别名和标签后可以通过jpush.setTagsWithAlias事件来监听设置是否成功,其中的resultCode可以参考github文档中的错误定义。
var tags = new Array(); tags[0] = "student"; window.JPush.setTagsWithAlias(tags, username); //设置别名与标签 document.addEventListener("jpush.setTagsWithAlias", function (event) { //设置别名标签的监听事件 $log.debug("result code:" + event.resultCode + "tags:" + event.tags + "alias:" + event.alias); }, false);
4.设备与服务器的绑定
上面所获取到的RegistrationID、别名、标签都是用来进行设备绑定的必须字段,具体项目中需要什么就需要与后台进行沟通了,接着调用后台提供的绑定接口进行设备绑定,以便于可以收到推送消息。
5.获取点击通知内容
下一步就是收到推送消息,点击消息获取相应数据,点击事件如下:
document.addEventListener("jpush.openNotification", function (event) {}, false);
不同平台有不同的获取数据方式,例如:
Android
$scope.jpushToDetailData={ "messageId":event.extras.push_page_url, "openMessageType":event.extras.push_type };
IOS
$scope.jpushToDetailData={ "messageId":event.push_page_url, "openMessageType":event.push_type };
可以看出Android在获取数据时多了一层extras。要注意的是这个事件也是放在cordova的ondeviceready事件中,并且一定要放在整个项目最开始的位置,例如rootController中。拿到了数据,接下来想做什么就依具体情况而定。
6.设备解绑
绑定了设备当然也就有解绑设备,例如在用户退出登录时,解绑设备一般只需要提供RegistrationID,调用后台提供的解绑接口传入RegistrationID就可以了。
7.关于IOS中的badge角标的注意点
这里只说一下关于如何清除角标(具体在哪里清除依项目而定,例如打开app或者读取消息之后),这时需要先调用window.JPush.resetBadge();清除服务器端的角标数,再调用window.JPush.setApplicationIconBadgeNumber(0);清除本地的角标数,具体参考github文档IOS部分,一般需要在cordova的ondeviceready和onresume事件中。并且前提是要进行平台判断,例如:
document.addEventListener("resume", function () { if ($window.isMobile.IOS() !== undefined && $window.isMobile.IOS() !== null) {//清空IOS中应用角标,服务器和本地 window.JPush.resetBadge(); window.JPush.setApplicationIconBadgeNumber(0); } }, false);
需要注意的是如果只使用了window.JPush.setApplicationIconBadgeNumber(0);虽然每次可以清除角标,但是下次收到推送时角标数就会在上次基础上累加。所以必须先使用window.JPush.resetBadge();清除掉服务器端的角标数,这一点从极光的官方文档就显而易见。