美文网首页
记一次极光推送的集成需求

记一次极光推送的集成需求

作者: Natchi | 来源:发表于2018-10-17 10:34 被阅读15次

应用场景

1.app在前台状态时,在app内推送
2.app在后台状态时,在消息栏推送

集成Jpush

极光推送集成Android 看看文档,先把sdk集成到项目内

逻辑分析

  1. 我们需要自定义Receiver 去接受jpush发送过来的消息
  2. 在接受到的消息中判断app在前台状态还是后台状态
  3. 根据前后台状态做出对应的业务需求
 @Override
    public void onReceive(Context context, Intent intent) {
        try {
            Bundle bundle = intent.getExtras();
            MyLogUtils.INSTANCE.d(TAG, "[MyReceiver] onReceive - " + intent.getAction() + ", extras: " + printBundle(bundle));
            //判断当前app的状态是(前台,activity可见为前台)还是(后台,activity不可见为后台)
            if (AppUtils.isAppOnForeground(context) &&MainApplication.getInstance().getForeground()) {
                //前台状态
                JPushInterface.clearAllNotifications(context);
                MyLogUtils.INSTANCE.d(TAG,"在前台。。。。");
                if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {
                    MyLogUtils.INSTANCE.d(TAG, "[MyReceiver] 接收到推送下来的通知");
                    int notifactionId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID);
                    MyLogUtils.INSTANCE.d(TAG, "[MyReceiver] 接收到推送下来的通知的ID: " + notifactionId);
                    Activity activity = ApplicationUtils.currentActivity();
                    shouDialog(activity)
            } else {
                //后台状态
                MyLogUtils.INSTANCE.d(TAG,"在后台。。。。");
                if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
                    String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID);
                    MyLogUtils.INSTANCE.d(TAG, "[MyReceiver] 接收Registration Id : " + regId);
                    //send the Registration Id to your server...

                } else {
                    if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {
                        MyLogUtils.INSTANCE.d(TAG, "[MyReceiver] 接收到推送下来的自定义消息: " + bundle.getString(JPushInterface.EXTRA_MESSAGE));
                        processCustomMessage(context, bundle);

                    } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {
                        MyLogUtils.INSTANCE.d(TAG, "[MyReceiver] 接收到推送下来的通知");
                        int notifactionId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID);
                        MyLogUtils.INSTANCE.d(TAG, "[MyReceiver] 接收到推送下来的通知的ID: " + notifactionId);

                    } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {
                        MyLogUtils.INSTANCE.d(TAG, "[MyReceiver] 用户点击打开了通知");

                        //打开自定义的Activity
                        Intent i = new Intent(context, TaskDetailActivity.class);
                        i.putExtras(bundle);
                        //i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        context.startActivity(i);

                    } else if (JPushInterface.ACTION_RICHPUSH_CALLBACK.equals(intent.getAction())) {
                        MyLogUtils.INSTANCE.d(TAG, "[MyReceiver] 用户收到到RICH PUSH CALLBACK: " + bundle.getString(JPushInterface.EXTRA_EXTRA));
                        //在这里根据 JPushInterface.EXTRA_EXTRA 的内容处理代码,比如打开新的Activity, 打开一个网页等..

                    } else if (JPushInterface.ACTION_CONNECTION_CHANGE.equals(intent.getAction())) {
                        boolean connected = intent.getBooleanExtra(JPushInterface.EXTRA_CONNECTION_CHANGE, false);
                        MyLogUtils.INSTANCE.d(TAG, "[MyReceiver]" + intent.getAction() + " connected state change to " + connected);
                    } else {
                        MyLogUtils.INSTANCE.d(TAG, "[MyReceiver] Unhandled intent - " + intent.getAction());
                    }
                }
            }

        } catch (Exception e) {

        }

设置消息栏的属性

BasicPushNotificationBuilder builder = new BasicPushNotificationBuilder(this);
        builder.statusBarDrawable = R.drawable.jpush_notification_icon;

        builder.notificationFlags = Notification.FLAG_AUTO_CANCEL;  //设置为点击后自动消失
        builder.notificationDefaults = Notification.DEFAULT_SOUND;  //设置为铃声( Notification.DEFAULT_SOUND)或者震动( Notification.DEFAULT_VIBRATE)

        JPushInterface.setPushNotificationBuilder(100, builder);//100 这个属性看文档

这里有个细节,当你设置了这段代码,你有可能发现消息栏上的logo没有改变,这个时候你重启下手机就好了

结语

记一次需求,方便以后万一开发相同的需求用到,也说不定哪个小伙伴有类似的需求可以参考一下呢,好记性不如烂笔头,下次见咯。

相关文章

  • 记一次极光推送的集成需求

    应用场景 1.app在前台状态时,在app内推送2.app在后台状态时,在消息栏推送 集成Jpush 极光推送集成...

  • 实现iOS收到推送消息后跳到指定的页面

    ########这里离线推送用的极光推送,集成推送这里就不做说明了,根据极光官方文档集成基本没有什么问题。 ###...

  • 最近因公司项目需求集成了最新的极光推送,个人感觉比苹果官方的推送快、及时,集成起来也比较方便所以推荐使用。废话不多...

  • 极光推送集成开发

    1.极光推送集成与设置 极光推送地址①注册极光推送账号。②在应用管理内按照步骤创建APP。③找到“文档——iOS—...

  • iOS 集成阿里云推送步骤详解(UTDID冲突的解决)

    昨天收到领导提出的需求,要集成阿里云推送(原因是收费便宜<小声BB>), 以前都是用的极光,感觉推送很简...

  • "_OBJC_CLASS_$_JPUSHService

    在集成极光推送的时候运行报错:

  • iOS-iOS10极光推送的使用

    1、首先先配置好推送证书,传到极光。极光推送->iOS证书设置指南极光推送->iOS SDK集成指南(XCode8...

  • iOS-极光推送的使用

    1、首先先配置好推送证书,传到极光。极光推送->iOS证书设置指南极光推送->iOS SDK集成指南(XCode8...

  • 极光后台推送响铃

    前言: 本教程不讨论极光推送的集成,请自行百度如何集成极光推送本教程适用于需要支持ios10以下的后台推送响铃对于...

  • 极光推送集成总结

    最近项目上集成了极光推送,这里做一下集成过程中的步骤及出现的问题(集成框架借鉴极光官方文档).具体推送的原理就不说...

网友评论

      本文标题:记一次极光推送的集成需求

      本文链接:https://www.haomeiwen.com/subject/feyhzftx.html