极光新建应用
首先需要有极光账号,在后台新建应用
新建时会要求上传app图标和填写app名字,然后需要完成推送设置
点击推送设置后出现android 与iOS的按钮,点击android后填写包名就好,
然后点击下载Demo来下载需要集成的控件,下载完成后,点击集成指南来进行参照集成过程
集成
我一般习惯手动集成,把下载的Demo解压后大体是这个结构
首先复制文件,把libs里面的文件都拷贝到项目app目录下的libs包里面,把res文件夹下的资源拷贝到自己的资源文件夹下(注意values里面的strings与style,不要直接覆盖,把内容复制到自己的文件中去),然后打开AndroidManifest文件,把标注了Required的部分复制到自己的AndroidManifest中去,里面包名与极光的appKey都是配置好的。
然后,最最重要的一点 有好多人都是运行的时候出现了极光获取SDK版本失败的log
Get sdk version fail![获取sdk版本失败!]
,我用我集成了十几个app的经验告诉你,有百分之八十的概率是因为没有在app目录里的build.gradle中配置
sourceSets.main {
jniLibs.srcDirs = ['libs']
}
这句代码,它是用来引入libs里面的.so文件的。
到这配置文件就好了,接下来就需要集成推送代码了。
打开Demo里的src,把里面有ExampleApplication拷贝到项目,并且在AndroidManifest中引入,如果项目已经有了Application,那就把
JPushInterface.setDebugMode(true); // 设置开启日志,发布时请关闭日志
JPushInterface.init(this); // 初始化 JPush
这两句代码拷贝到自己的Application的onCreate方法上。
到此最基本的集成就完成了,项目跑一遍后log日志会出现Login succeed的提示,然后就可以在后台测试一下推送通知了,
注意,在极光推送的集成指南中,到此也就结束了,但真正在app使用中还是有些问题需要注意
以上的推送设置只会推送给所有用户
如果需要全部推送,不用看。
实际上大多app是需要登录的,推送在更多时候是需要分类推送,或者针对一个用户推送。
我来举个栗子,你的app是一个技术分享app。
用户注册后会选择自己的职业或者感兴趣的领域,如果他是android工程师,难道你要给他推送iOS的知识干货么?,所以需要分类推送,这就需要极光里的标签。
而你在app里面写了一篇很赞的文章,你有人给你点赞或者评论,你接收到推送的通知,xxx点赞了你的文章,xxx评论了你的文章,这就是针对一个用户推送,这就需要极光里的别名
暂且不说后台需要怎么做,我只说app 端,用户需要在登录后通过方法
JPushInterface.setAliasAndTags();
给自己打一个别名和标签,让后台知道你是哪一类,然后针对性推送
登录与注销
如果需要全部推送,不用看。
用户登录后能够接收到通知,但是注销后呢?如果仅仅使用了上面的过程,我可以很负责任的告诉你,你退出登录后仍然能接收到通知,因为你开启了推送,并没有在注销时停止推送。
注销后
JPushInterface.stopPush(getApplicationContext());
登录设置setAliasAndTags后判断如果推送停止的话恢复推送
if (JPushInterface.isPushStopped(mContext)) {
JPushInterface.resumePush(getApplicationContext());
}
点击通知栏上的通知后通知会消失
真正在app上会有要求,比如说你需要做成点击后跳转到某一个页面,打开Demo里的src中的MyReceiver文件,它就是来监听通知的,可以把它拷贝到项目,注意不要忘了在AndroidManifest中声明哦,
<receiver
android:name="包名.MyReceiver"
android:exported="false"
android:enabled="true">
<intent-filter>
<action android:name="cn.jpush.android.intent.REGISTRATION" /> <!--Required 用户注册SDK的intent-->
<action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" /> <!--Required 用户接收SDK消息的intent-->
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" /> <!--Required 用户接收SDK通知栏信息的intent-->
<action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" /> <!--Required 用户打开自定义通知栏的intent-->
<action android:name="cn.jpush.android.intent.CONNECTION" /><!-- 接收网络变化 连接/断开 since 1.6.3 -->
<category android:name="包名" />
</intent-filter>
</receiver>
然后再来修改一下MyReceiver,里面就有点击通知后的操作,修改里面的intent和传值