第一次用极光推送避免不了各种坑。总结一下。

关于架包引入
请先参考官方文档,
Android SDK 集成指南

这里文档说的是最新版架包在AndroidStudio中引入的方法,
直接可以在build中使用compile引入,并进行相关配置。

如果全部配置完成检查app中是否生成有.so文件,

注意:
包名必须是jniLibs,如果没有的话,或者目录下文件是空,可以在libs下
找到极光的jar包,把里面的这些文件全拷贝到jinLibs下,

如果是eclipse,则在libs目录下

如果遇到getRegistrationID为空等异常可以参考之前写的博客
《极光推送getRegistrationID为空,UnsatisfiedLinkError异常》

关于使用
因为是采用广播的方式完成推送,所以要写一个MyReceiver 继承BroadcastReceiver ,在这里面处理收到的系统通知,和自定义通知。

public class MyReceiver extends BroadcastReceiver {private static final String TAG = "MyReceiver";private NotificationManager nm;@Overridepublic void onReceive(Context context, Intent intent) {Bundle bundle = intent.getExtras();if (null == nm) {nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);}Bundle bundle = intent.getExtras();Logger.d(TAG, "onReceive - " + intent.getAction() + ", extras: " + AndroidUtil.printBundle(bundle));if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {Logger.d(TAG, "JPush用户注册成功");} else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {Logger.d(TAG, "接受到推送下来的自定义消息");} else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {Logger.d(TAG, "接受到推送下来的通知");receivingNotification(context,bundle);} else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {Logger.d(TAG, "用户点击打开了通知");openNotification(context,bundle);} else {Logger.d(TAG, "Unhandled intent - " + intent.getAction());}}private void receivingNotification(Context context, Bundle bundle){String title = bundle.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE);Logger.d(TAG, " title : " + title);String message = bundle.getString(JPushInterface.EXTRA_ALERT);Logger.d(TAG, "message : " + message);String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);Logger.d(TAG, "extras : " + extras);}private void openNotification(Context context, Bundle bundle){String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);String myValue = "";try {JSONObject extrasJson = new JSONObject(extras);myValue = extrasJson.optString("myKey");} catch (Exception e) {Logger.w(TAG, "Unexpected: extras is not a valid json", e);return;}if (TYPE_THIS.equals(myValue)) {Intent mIntent = new Intent(context, ThisActivity.class);mIntent.putExtras(bundle);mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(mIntent);} else if (TYPE_ANOTHER.equals(myValue)){Intent mIntent = new Intent(context, AnotherActivity.class);mIntent.putExtras(bundle);mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(mIntent);}

这里有两个是常用的

自定义通知:
JPushInterface.ACTION_MESSAGE_RECEIVED
在这里可以进行一些ui上的实现,可以弹窗推送,比如有些系统提示维护的弹窗,或者一些不常用的但是又非常重要需要实时提示的可以自定义。

对系统通知的操作:
JPushInterface.ACTION_NOTIFICATION_OPENED
也就是处理系统栏的推送,

代码示例:

cn.jpush.android.intent.MESSAGE_RECEIVED, extras: key:cn.jpush.android.EXTRA, value:{"pushinfo":{"money":0,"bid":"89510","btype":0,"bbid":"89510","messageid":"14768","pbid":0},"pushtype":"bills"}key:cn.jpush.android.TITLE, value:您有新的奖金入帐key:cn.jpush.android.MESSAGE, value:您有新的奖金入帐,奖金帐单流水号:89510!key:cn.jpush.android.CONTENT_TYPE, value:typekey:cn.jpush.android.APPKEY, value:**********************key:cn.jpush.android.MSG_ID, value:************......cn.jpush.android.intent.NOTIFICATION_RECEIVED, extras:                                    key:cn.jpush.android.NOTIFICATION_DEVELOPER_ARG0, value:developerArg0key:cn.jpush.android.ALERT, value:您有新的奖金入帐key:cn.jpush.android.EXTRA, value:{}key:cn.jpush.android.NOTIFICATION_ID, value:*********key:cn.jpush.android.NOTIFICATION_CONTENT_TITLE, value:顺道嘉key:cn.jpush.android.MSG_ID, value:**********

这里是后台返回的数据,我们要做的就是判断消息类型。

String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);model = getEntityByJsonObject(extras);

获取我们所有的消息,然后解析存放到我们的model中。
需要用的时候直接调用

利用model判断消息类型。

这里的页面就是一个自定义的系统提示弹窗,在MESSAGE_RECEIVED中处理,收到推送后会弹出提示窗。

            //极光自定义推送message消息类型,打开弹窗页面
if (model.pushtype.equals("message")){if (AppManager.isAction(context)){JPushModel.JPushMessage jpmsg = (JPushModel.JPushMessage) model.t;Log.e("jpmsg----------------",jpmsg.toString());mp1 = MediaPlayer.create(context,getSystemDefultRingtoneUri());mp1.start();Intent i2 = new Intent(context, SMRZActivity.class);i2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);i2.putExtra("TITLE",bundle.getString(JPushInterface.EXTRA_TITLE));i2.putExtra("CONTENT",bundle.getString(JPushInterface.EXTRA_MESSAGE));i2.putExtra("isOk", jpmsg.isOk);context.startActivity(i2);}

同时,在NOTIFICATION_RECEIVED中设置系统通知的状态操作,
点击系统栏跳转到消息列表。

if (model.pushtype.equals("message")) {JPushModel.JPushMessage jm = (JPushModel.JPushMessage) model.t;if (jm.url.equals("")) {Intent i = new Intent(context, MessageListActivity.class);context.startActivity(i);}else {WebViewActivity.start(context, "活动", jm.url);}

设置开关

设置开启/关闭推送
JPush已经为我们设置好了,直接调用就行了。

//关闭
JPushInterface.stopPush(getApplicationContext());
//开启
JPushInterface.resumePush(getApplicationContext());

极光后台
在极光管理后台,我们可以进行点对点,和一些自定义的推送。
RegistrationID可以使用JPushInterface.getRegistrationID(this);获取。


能力有限,如果想详细了解极光可以去看官方文档
当然极光的功能也不仅仅局限于这些消息推送,后面还有即时通讯、短信验证码等。

附github:https://github.com/jpush

关于JPsh极光推送的基本用法和通知介绍相关推荐

  1. Android 关于极光推送退出APP时清空通知的问题

    当我们的APP集成完成极光推送之后,我们要求在APP双击退出的同时清除所有的发送过来的通知,极光API 中提供了几种方法: 1.clearAllNotifications 这种方法的作用是清除所有JP ...

  2. iOS推送(利用极光推送)

    本文主要是基于极光推送的SDK封装的一个快速集成极光推送的类的封装(不喜勿喷) (1)首先说一下推送的一些原理: Push的原理: Push 的工作机制可以简单的概括为下图 图中,Provider是指 ...

  3. android极光推送】—从客户端到后台,一文通吃

    http://blog.csdn.net http://blog.csdn.net/w8897282/article/details/52690379 版权声明:本文为博主原创文章,未经博主允许不得转 ...

  4. 【android极光推送】—从客户端到后台,一文通吃

    前记 推送原理浅析 平台说明 概念解释 推送的三种实现方式 客户端直接向推送服务方发送Http请求 项目服务器通过Http转发推送请求至推送服务方 项目服务端使用SDK进行功能集成 关于推送的种类概述 ...

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

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

  6. 用JPUSH极光推送实现服务端向安装了APP应用的手机推送消息(C#服务端接口)

    这次公司要我们做一个功能,就是当用户成功注册以后,他登录以后要收到消息,当然这个消息是安装了我们的手机APP应用的手机咯. 极光推送的网站的网址是:https://www.jpush.cn/ 极光推送 ...

  7. 极光推送后台php接口,极光推送Jpush(v2)接口 服务端PHP版本的REST API推送类

    在许多的手机App开发中推送是一个必须的应用.高大上的企业都会自己投入成本搭建自己的推送服务器,而小微企业则会选择一些服务商,使用他们的服务,减轻自己的运营和维护的成本.Jpush(极光推送)是目前比 ...

  8. **极光推送PHP服务器端推送移动设备消息(Jpush V2 api)

    jpush.php  这是推送方法  用到curl发送请求 <?php /*** 极光推送php 服务器端* @author yalong sun* @Email <syl_ad@163. ...

  9. Laravel 集成 JPush 极光推送指北

    2019独角兽企业重金招聘Python工程师标准>>> 我是一个 Laravel 小白,我是一个 Laravel 小白,我是一个 Laravel 小白(默念三遍再往下读,如果非小白就 ...

最新文章

  1. Python的Xpath介绍和语法详解
  2. guid linux 识别的分区表_Linux系统MBR和GPT分区的区别介绍
  3. 算符优先文法,中缀式求值,栈的典型应用
  4. python概述_Python-概述
  5. boost::partial_sort相关的测试程序
  6. python实现背景抠除_利用Python代码实现一键抠背景功能
  7. 用adb 启动camera
  8. WebService、RMI、RPC、XML-RPC、JSON-RPC、SOAP、REST(rest-api、restful)等web服务实现方案概念...
  9. matlab线性代数命令大全,线性代数 - MATLAB 系统中文帮助手册
  10. burpsuite的基本操作_burpsuite安装与基本使用
  11. 国人魔改后的中文优化版资源管理器,终于解决我多年的难题
  12. 思科模拟器基础实验完整流程-初级
  13. php图片不存在输出默认图片,JS图片加载失败显示默认图片
  14. 关于正则表达式的补充(贪婪和懒惰)
  15. 工厂方法模式应用场景
  16. 证券交易系统搭建的架构方案
  17. 【前端】Vue+Element UI案例:通用后台管理系统-用户管理:Table表格增删查改、Pagination分页、搜索框
  18. vue报错Navigating to current location (/login) is not allowed
  19. Pepper停产之后,家庭服务机器人的未来产品形态,会是四足机器人吗
  20. NAM: Normalization-based Attention Module,一种新的注意力计算方式,无需额外的参数...

热门文章

  1. linux lzma命令,Ubuntu: 压缩与解压缩LZMA文件
  2. ps保存图片logo背景透明
  3. 简明Jieba中文分词教程(分词、关键词提取、词性标注、计算位置)
  4. 安卓平板隐藏虚拟按键_实现安卓设备虚拟按键隐藏和显示的方法和系统的制作方法...
  5. 微信小程序 - excel通过云函数导入云数据库
  6. 单条件求和和多条件求和以及条件求平均
  7. HDOJ 题目1217 Arbitrage(最短路径,Floyd)
  8. 程序员上班摸鱼,这么玩才高端!
  9. Usage of API documented as @since 1.8+ less... (Ctrl+F1) Inspection info: This inspection finds all
  10. A study finds nearly half of jobs are vulnerable to automation