极光推送的简单实现方法


第一步

导入其jar包和so文件这点不再详解, 但是要注意的一点就是:
个人感觉极光的demo还是有些地方需要改进的, 不建议使用,但是里面的代码是需要我们自己拿的, 我这里主要就是拿到的服务器端发过来的消息推送。

第二步

设置清单文件,要注意的是官方已经明确的说了:

下面就是我的清单文件代码,以及所要修改的地方都做了一些批注

1.

代码:

          <permission
        android:name="包名.permission.JPUSH_MESSAGE"android:protectionLevel="signature" />//要注意的是, 使用自定义权限的时候:<uses-permission android:name="这里也要修改成包名.permission.JPUSH_MESSAGE" />

2.

  <!-- Required  . Enable it you can get statistics data with channel --><meta-data android:name="JPUSH_CHANNEL" android:value="developer-default"/><meta-data android:name="JPUSH_APPKEY" android:value="你的 ak" />

3.

  <!-- Required SDK核心功能--><receiver android:name="cn.jpush.android.service.AlarmReceiver" android:exported="false"/><!-- Required SDK核心功能--><receiver
            android:name="cn.jpush.android.service.PushReceiver"android:enabled="true"android:exported="false"><intent-filter android:priority="1000"><action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" />   <!--Required  显示通知栏 --><category android:name="应用包名" /></intent-filter><intent-filter><action android:name="android.intent.action.USER_PRESENT" /><action android:name="android.net.conn.CONNECTIVITY_CHANGE" /></intent-filter><!-- Optional --><intent-filter><action android:name="android.intent.action.PACKAGE_ADDED" /><action android:name="android.intent.action.PACKAGE_REMOVED" /><data android:scheme="package" /></intent-filter></receiver>

4.

 <!-- Required SDK 核心功能--><!-- 可配置android:process参数将PushService放在其他进程中 --><service
            android:name="cn.jpush.android.service.PushService"android:enabled="true"android:exported="false"><intent-filter><action android:name="cn.jpush.android.intent.REGISTER" /><action android:name="cn.jpush.android.intent.REPORT" /><action android:name="cn.jpush.android.intent.PushService" /><action android:name="cn.jpush.android.intent.PUSH_TIME" /></intent-filter></service><!-- Required  SDK核心功能--><service
            android:name="cn.jpush.android.service.DownloadService"android:enabled="true"android:exported="false" ></service><!-- Required SDK核心功能--><activity
            android:name="cn.jpush.android.ui.PushActivity"android:configChanges="orientation|keyboardHidden"android:theme="@android:style/Theme.NoTitleBar"android:exported="false"><intent-filter><action android:name="cn.jpush.android.ui.PushActivity" /><category android:name="android.intent.category.DEFAULT" /><category android:name="应用包名" /></intent-filter></activity>

清单布局代码都已经罗列在上方了,有需要的同学复制黏贴即可。

第三步

要在程序启动的入口去初始化极光推送

 /*** 初始化 推送*/private void InitJpush() {JPushInterface.setDebugMode(true);JPushInterface.init(this);JPushInterface.setAlias(this, "添加别名", new TagAliasCallback() {@Overridepublic void gotResult(int i, String s, Set<String> set) {if(0==i){Toast.makeText(MainActivity.this, "Jpush OK", Toast.LENGTH_SHORT).show();}}});}

//别名添加与否无所谓, 只是一般都要使用这个的, 而且当 0==i的时候表示的就是 设置别名成功。

至此就完成了简单的极光推送, 赶快去跟服务器哥们试一下吧!

注意: 如果要统计的话, 需要在程序的主入口设置如下方法:

 @Overrideprotected void onPause() {super.onPause();JPushInterface.onPause(mContext);}@Overrideprotected void onResume() {super.onResume();JPushInterface.onResume(mContext);}

极光推送接收不到原因分析

为什么会存在这样的 问题,刚开始的时候我也搞不清楚,之前用极光的时候杀死程序后也会收到推送,但最近重新再去集成时就完全不好使了,这我就纳闷了,虽然Google在高版本上的android上面不建议线程守护,所以将进程有关的Service都杀掉了,但旧版本还是有这个功能的啊 !真尼玛,后来猜测估计是因为要适配6.0所以低版本的一些代码就删除了,造成低版本的也不行了,接下来分析一下这个问题。

首先我们把Android分为两类机型,一种是原生态的Android系统,比如Nexus,三星等机型,一种是深度定制的(当然不是所有定制机型都存在你说的问题),比如小米,魅族。 我们分开来讨论:

  1. 原生态系统:
    App不打开,可以收到消息。 这个不管是老版SDK,还是新版本SDK,都是这样的,在三星部分手机上可以。

  2. 深度定制系统(目前有MIUI,魅族):
    仍然分两种情况来说明这个问题:
    2.1 .1 友盟上来说设备上有集成友盟消息推送的其它App已经打开(要求SDK版本是2.2.0以上),你的App不打开,也能收到消息。 你可以尝试在你的设备上安装我们的Demo,以及你们的App,打开友盟demo,不打开你们的App,给你们的App发通知,是能收到的。
    2.1.2 设备上所有集成友盟推送SDK的App都没有打开,那么就收不到消息。

2.2.1 极光的原理也大概是通过服务保持和服务器端的长连接,进行心跳检测,进行消息数据的传递的

  1. 解决方案
    仍然分两种情况来说明这个问题:
    3.1 目前来说友盟及极光等都没有解决这样的问题,确实在用户不给权限的情况下,很难处理。

3.2 在集成友盟/极光的基础上集成小米推送、华为推送。
3.3 在小米、华为、oppo等手机上如果想让APP杀死后还收到推送的话,只能让用户手动操作,以下是在极光看到的一些步骤:

由于第三方 ROM 的管理软件需要用户手动操作

小米【MIUI】

自启动管理:需要把应用加到【自启动管理】列表,否则杀进程或重新开机后进程无法开启
通知栏设置:应用默认都是显示通知栏通知,如果关闭,则收到通知也不会提示
网络助手:可以手动禁止已安装的第三方程序访问2G/3G和WIFI的网络和设置以后新安装程序是否允许访问2G/3G和WIFI的网络
MIUI 7 神隐模式: 允许应用进行自定义配置模式,应用在后台保持联网可用,否则应用进入后台时,应用无法正常接收消息。【设置】下电量和性能中【神隐模式】
华为【Emotion】

自启动管理:需要把应用加到【自启动管理】列表,否则杀进程或重新开机后进程不会开启,只能手动开启应用
后台应用保护:需要手动把应用加到此列表,否则设备进入睡眠后会自动杀掉应用进程,只有手动开启应用才能恢复运行
通知管理:应用状态有三种:提示、允许、禁止。禁止应用则通知栏不会有任何提醒
魅族【Flyme】

自启动管理:需要把应用加到【自启动管理】列表,否则杀进程或重新开机后进程无法开启
通知栏推送:关闭应用通知则收到消息不会有任何展示
省电管理: 安全中心里设置省电模式,在【待机耗电管理】中允许应用待机时,保持允许,否则手机休眠或者应用闲置一段时间,无法正常接收消息。
VIVO【Funtouch OS】

内存一键清理:需要将应用加入【白名单】列表,否则系统自带的“一键加速”,会杀掉进程
自启动管理:需要将应用加入“i管家”中的【自启动管理】列表,否则重启手机后进程不会自启。但强制手动杀进程,即使加了这个列表中,后续进程也无法自启动。
OPPO【ColorOS】

冻结应用管理:需要将应用加入纯净后台,否则锁屏状态下无法及时收到消息
自启动管理:将应用加入【自启动管理】列表的同时,还需要到设置-应用程序-正在运行里锁定应用进程,否则杀进程或者开机后进程不会开启,只能手动开启应用

原创文章, 转载请注明出处: QQ 7641436

极光推送的简单实现方法相关推荐

  1. Android之集成极光推送

    安卓端集成极光推送是很常见的,极光推送的简单高效性适合很多想要集成推送的APP,如果你要自己装逼,也可以自己写推送,只要想做都是可以的. 第一步.Gradle配置(Module的build.gradl ...

  2. Andriod之使用极光推送自定义消息打造个性的消息推送效果

    没必要重复造轮子,吸收别人的精华,站在巨人的肩膀上,才能走得更远,如果技术不能带来利润,狗屁都不如,好了,介绍下极光推送吧,我们项目里面用的是个推,先把这个极光推送的转载好,再来写个推的推送,原理差不 ...

  3. 极光推送JPush---自定义提示音

    极光推送提供三种方法实现Notification通知 三方开发平台发送普通消息,客户端设置PushNotificationBuilder,实现基础的Notification通知 三方开放平台发送普通消 ...

  4. 极光推送jpush(简单易懂,分分钟教你搞定)

    先注册账户: 然后点击开发者服务:点击打开链接 创建应用: 随便起个名字,但是最好和你的应用名字一样 然后点击下一步推送设置 把你的工程应用名字输入: 应用包名就是build.gradle文件里的ap ...

  5. 极光推送简单介绍与简单使用

    Android极光推送 极光推送 极光推送 步骤: 1,注册,登录成为开发者. 官方网站:https://www.jiguang.cn 2,在控制台创建应用: 参考链接:https://www.jig ...

  6. 极光推送 - 关于一个项目多个key的方法

    "深入浅出,人人都是程序员" 用过极光推送api的都知道,极光规定一个key对应一个包,如图所示 分别申请了2个key 这是线上版本的key 这是用于测试的key 申请完之后,我们 ...

  7. 看了极光推送技术原理的几点思考

    看了极光推送技术原理的几点思考 分类: android2012-11-26 20:50 16586人阅读 评论(18) 收藏 举报 目录(?)[+] 移动互联网应用现状 因为手机平台本身.电量.网络流 ...

  8. 使用极光推送实现分组发送和服务端集成

    推送功能在手机应用开发中越来越重要,几乎成为所有App必备的功能,由于Android本身没有消息推送机制,通常采用的是基于XMPP协议的推送,但这种开发很麻烦,因此在市场上应运而生了提供消息推送服务的 ...

  9. Android开发之第三方推送JPush极光推送知识点详解 学会集成第三方SDK推送

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 下面是一些知识点介绍,后期将会带领大家进行代码实战: 一.Android实现推送方式解决方案: 1.推 ...

最新文章

  1. oracle添加语句 commit,Oracle COMMIT语句
  2. 哈工大、清华、CSDN、嵌入式视觉联盟合办的 AIoT 盛会,你怎么舍得错过?!
  3. git下载指定分支代码到本地
  4. 网页中返回顶部代码(多种方法)另附注释说明
  5. linux上常用工具集
  6. Cpp 对象模型探索 / 虚继承带虚函数的基类的子类的内存布局
  7. 爬虫笔记8实例淘宝商品比价爬虫
  8. Linux安装ImageMagick与JMagick完成过程及配置
  9. python脚本:向表中插入新数据,删除表中最旧的数据
  10. jdk中java_怎样使用JavaJDK中Java?
  11. [Deepin - Pycharm] PyQT5安装配置
  12. xshell 软件的窗口一直是置顶 调整为不置顶
  13. 思路与好题记录与小技巧
  14. python必背代码-Python高手必修课:如何让 Python 代码更易读,推荐收藏
  15. 结构体内存对齐的原则及原理
  16. 凤凰刷机找不到手机设备的解决方法
  17. opencv摄像头异常处理
  18. Scratch互动编程手柄兼容mblock网易卡搭慧编程猫Mind+ 编程键盘手柄20210223
  19. php写超级简单的登陆注册页面(适用期末作业至少要求带有数据库的)
  20. android listview viewgroup,Android View及ViewGroup事件分发机制总结

热门文章

  1. ip地址计算器php源码,php版 子网掩码计算器
  2. matalb读取txt文件以及将数据写入txt文件
  3. STM32 ADC 单次模式、连续模式、扫描模式
  4. utf-8的中文是一个汉字占三个字节长度吗?
  5. Oracle递归查询的原理
  6. 2007年中国邮政贺年(有奖)明信片开奖了~~
  7. 什么是异构数据源和分布式数据库
  8. 如何彻底卸载2345全家桶?
  9. linux下scala脚本运行报错error: expected class or object definition 解决方案
  10. 波卡的盔甲与弱肋 |链捕手