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

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

关于架包引入
请先参考官方文档,
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;
     
    @Override
    public 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:type
                                                             key: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:developerArg0
                                                             key: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

关于推送的其它用法:

极光征文 | 如何实现Emoji表情的推送😆
在BroadcastReceiver中利用推送设置全局弹窗,并将消息保存至本地
Android利用极光推送获取到消息并缓存至本地

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容