美文网首页
极光推送快速集成

极光推送快速集成

作者: 周末不加班 | 来源:发表于2019-11-10 23:07 被阅读0次

    Gradle

    • 确认 android studio 的 Project 根目录的主 gradle 中配置了 jcenter 支持
    buildscript {
        repositories {
            jcenter()
        }
        ......
    }
    
    allprojects {
        repositories {
            jcenter()
        }
    }
    
    • 在 module 的 gradle 中添加依赖和 AndroidManifest 的替换变量
    android {
        ......
        defaultConfig {
            applicationId "com.xxx.xxx" //JPush 上注册的包名.
            ......
    
            ndk {
                //选择要添加的对应 cpu 类型的 .so 库。
                abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
                // 还可以添加 'x86', 'x86_64', 'mips', 'mips64'
            }
    
            manifestPlaceholders = [
                JPUSH_PKGNAME : applicationId,
                JPUSH_APPKEY : "你的 Appkey ", //JPush 上注册的包名对应的 Appkey.
                JPUSH_CHANNEL : "developer-default", //暂时填写默认值即可.
            ]
            ......
        }
        ......
    }
    
    dependencies {
        ......
        implementation 'cn.jiguang.sdk:jpush:3.3.4'  // 此处以JPush 3.3.4 版本为例。
        implementation 'cn.jiguang.sdk:jcore:2.1.0'  // 此处以JCore 2.1.0 版本为例。
        ......
    }
    

    Androidmanifest

    • 权限
    <!-- 必要 -->
    <uses-permission android:name="${applicationId}.permission.JPUSH_MESSAGE" />
    <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
    <!-- 可选 -->
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <!-- 用于开启 debug 版本的应用在6.0 系统上 层叠窗口权限 -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /><!-- Android Q后台定位权限-->
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    
    
    • 如果使用的 JCore 是 2.0.0 及以上的版本,需要额外在 Androidmanifest 中配置一个Service,以在更多手机平台上获得更稳定的支持,示例如下。(JCore1.x版本不需要)
    <!-- Since JCore2.0.0 Required SDK核心功能-->
    <!-- 可配置android:process参数将Service放在其他进程中;android:enabled属性不能是false -->
    <!-- 这个是自定义Service,要继承极光JCommonService,可以在更多手机平台上使得推送通道保持的更稳定 -->
    <service android:name=".receiver.PushService"
        android:enabled="true"
        android:exported="false"
        android:process=":pushcore">
        <intent-filter>
            <action android:name="cn.jiguang.user.service.action" />
        </intent-filter>
    </service>
    
    • 从JPush3.0.7开始,需要配置继承JPushMessageReceiver的广播,原来如果配了MyReceiver现在可以弃用
    <!-- Required since 3.0.7 -->
    <!-- 新的 tag/alias 接口结果返回需要开发者配置一个自定的广播 -->
    <!-- 3.3.0开始所有事件将通过该类回调 -->
    <!-- 该广播需要继承 JPush 提供的 JPushMessageReceiver 类, 并如下新增一个 Intent-Filter -->
    <receiver
        android:name=".receiver.PushMessageReceiver"
        android:enabled="true"
        android:exported="false" >
        <intent-filter>
            <action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" />
            <category android:name= "com.tinease.zhuanyouhui"/>
        </intent-filter>
    </receiver>
    

    Androidmanifest中配置的2个接收广播

    • PushService 为了更多手机平台上获得更稳定的支持
    package ......;
    
    import cn.jpush.android.service.JCommonService;
    
    public class PushService extends JCommonService 
    {
    }
    
    • PushMessageReceiver 接收自定义消息与用户点击通知
      收到消息调用:onMessage() processCustomMessage()
      用户点击通知:onNotifyMessageOpened()
    package ...... ;
    
    import android.content.Context;
    import cn.jpush.android.api.CustomMessage;
    import cn.jpush.android.api.NotificationMessage;
    import cn.jpush.android.service.JPushMessageReceiver;
    
    public class PushMessageReceiver extends JPushMessageReceiver
    {
        /**
         * 自定义消息
         * 收到自定义消息由 onMessage 调用 processCustomMessage
         * @param context
         * @param customMessage
         */
        @Override
        public void onMessage(Context context, CustomMessage customMessage) {
            processCustomMessage(context,customMessage);
        }
    
        /**
         * 自定义消息
         */
        private void processCustomMessage(Context context, CustomMessage customMessage) {
            System.out.println("极光 自定义消息"+customMessage.message);
            // 所有附加信息 customMessage.toString();
           // 其中 customMessage.extra; 是一个Json字符
        }
    
    
        /**
         * 收到通知 自动显示在通知栏
         * 用户点击后才调用此方法
         * @param context
         * @param message
         */
        @Override
        public void onNotifyMessageOpened(Context context, NotificationMessage message) {
            System.out.println("极光 通知栏 "+message);
           // 所有附加信息 message.toString();
           // 其中 message.notificationExtras; 是一个Json字符
          
            try{
                //打开自定义的Activity
                /*Intent i = new Intent(context, TestActivity.class);
                Bundle bundle = new Bundle();
                bundle.putString(JPushInterface.EXTRA_NOTIFICATION_TITLE,message.notificationTitle);
                bundle.putString(JPushInterface.EXTRA_ALERT,message.notificationContent);
                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);*/
            }catch (Throwable throwable){
    
            }
        }
    
    
    }
    

    初始化,设置别名、标签

    // Application中初始化
    JPushInterface.setDebugMode(true); //开启调试
    JPushInterface.init(this);
    
    //设置别名
    JPushInterface.setAlias(Context context, int sequence, String alias);
    
    //设置、删除、清空标签
    JPushInterface.setTags(Context context, int sequence,Set<String> tags);
    JPushInterface.deleteTags(Context context, int sequence,Set<String> tags);
    JPushInterface.cleanTags(Context context, int sequence);
    

    混淆

    -dontoptimize
    -dontpreverify
    
    -dontwarn cn.jpush.**
    -keep class cn.jpush.** { *; }
    -keep class * extends cn.jpush.android.helpers.JPushMessageReceiver { *; }
    
    -dontwarn cn.jiguang.**
    -keep class cn.jiguang.** { *; }
    

    相关文章

      网友评论

          本文标题:极光推送快速集成

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