极光推送

作者: 夜沐下的星雨 | 来源:发表于2020-06-16 23:05 被阅读0次

    1.简介

    极光推送是一家主营推送功能,及IM、短信、分享、统计、魔链、认证功能的服务商。

    2.注册 登录

    极光 注册 登录

    3.创建应用

    进入开发者平台,创建应用。
    创建应用

    点击右上角–应用设置–获取Appkey :


    左上角纸飞机图标: 推送信息用的。当客户端配置完成,可以推送信息测试。

    点击下面的推送设置里—去设置

    4.下载demo 和SDK

    下载当前demo。这个demo是根据你的appkey,自动配置好的功能型的demo.很多东西都可以从中拷贝。
    集成文档:右上角,是整个项目的集成说明。

    下载sdk:
    下载Android sdk

    5.配置

    极光文档配置

    5.1 sdk 文件夹说明

    jpush-android-3.x.x-release.zip SDK

    AndroidManifest.xml
    客户端嵌入 SDK 参考的配置文件
    libs/jcore-android.x.x.x.jar
    极光开发者服务的核心包。
    libs/jpush-android-3.x.y.jar
    JPush SDK 开发包。
    libs/(cpu-type)/libjcore1xx.so
    各种 CPU 类型的 native 开发包。
    res
    集成 SDK 必须添加的资源文件
    example
    是一个完整的 Android 项目,通过这个演示了 JPush SDK 的基本用法,可以用来做参考。

    5.2 复制资源到自己项目

    在本地创建好自己的项目,记录你的包名,一会要使用。

    解压缩 jpush-android–3.x.x-release.zip 集成压缩包。
    复制 libs/jcore-android-x.x.x.jar 到工程 libs/ 目录下。
    复制 libs/jpush-android-3.x.x.jar 到工程 libs/ 目录下。
    复制 libs/(cpu-type)/libjcore1xy.so 到你的工程中存放对应 cpu 类型的目录下。
    复制 res/ 中 drawable-hdpi, layout, values 文件夹中的资源文件到你的工程中 res/ 对应同名的目录下。

    5.3 module 的 gradle 配置

    复制如下内容 到 build.gradle文件的android 下

        sourceSets {
            main {
                jniLibs.srcDirs = ['libs']
            }
        }
    
    5.4 配置 AndroidManifest.xml

    复制一下文档内容,此文档是优化过的。
    文档内所有“您应用的包名” 替换成自己项目的包名。
    文档底部 更换appkey

     <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="您应用的包名"
        android:versionCode="316"
        android:versionName="3.1.6"
        >
        
        <!-- Required -->
        <permission
            android:name="您应用的包名.permission.JPUSH_MESSAGE"
            android:protectionLevel="signature" />
    
        <!-- Required -->
        <uses-permission android:name="您应用的包名.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" />
    
        <!-- Optional. Required for location feature -->
        <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
        <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_LOCATION_EXTRA_COMMANDS" />
        <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
        <uses-permission android:name="android.permission.GET_TASKS" />
        <uses-permission android:name="android.permission.VIBRATE" />
    
    
     <application
           
            android:label="@string/app_name"
            android:name="Your Application Name" 
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
    
            <!-- 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>
    
    
        <!-- since 3.0.9 Required SDK 核心功能-->
            <provider
                android:authorities="您应用的包名.DataProvider"
                android:name="cn.jpush.android.service.DataProvider"
                android:exported="true"
            />
    
            <!-- since 1.8.0 option 可选项。用于同一设备中不同应用的 JPush 服务相互拉起的功能。 -->
            <!-- 若不启用该功能可删除该组件,或把 enabled 设置成 false ;App 不会被其他 App 拉起,但会拉起其他的 App。 -->
             <service
                 android:name="cn.jpush.android.service.DaemonService"
                 android:enabled="true"
                 android:exported="true">
                 <intent-filter >
                     <action android:name="cn.jpush.android.intent.DaemonService" />
                     <category android:name="您应用的包名"/>
                 </intent-filter>
             </service>
    
             <!-- since 3.1.0 Required SDK 核心功能-->
              <provider
                   android:authorities="您应用的包名.DownloadProvider"
                   android:name="cn.jpush.android.service.DownloadProvider"
                   android:exported="true"
               />
    
            <!-- Required SDK 核心功能-->
            <receiver
                android:name="cn.jpush.android.service.PushReceiver"
                android:enabled="true" >
              <intent-filter android:priority="1000">
                    <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" />
                    <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>
    
            <!-- Required SDK 核心功能-->
            <!-- 若您的业务中有使用极光富媒体功能,或者极光早上好功能,需要把此 Activity 的 exported 设置成 true。 -->
            <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>
            <!-- SDK 核心功能-->
            <!-- 若您的业务中有使用极光富媒体功能,或者极光早上好功能,需要把此 Activity 的 exported 设置成 true。 -->
            <activity
                android:name="cn.jpush.android.ui.PopWinActivity"
                android:configChanges="orientation|keyboardHidden"
                android:exported="false"
                android:theme="@style/MyDialogStyle">
                <intent-filter>
                    <category android:name="android.intent.category.DEFAULT" />
                    <category android:name="您应用的包名" />
                </intent-filter>
            </activity>
    
            <!-- since 3.6.0 -->
            <activity android:name="cn.jpush.android.service.DActivity"
                android:enabled="true"
                android:exported="true"
                android:theme="@android:style/Theme.Translucent.NoTitleBar"
                android:taskAffinity="jpush.custom">
                <intent-filter>
                    <action android:name="cn.jpush.android.intent.DActivity"/>
                    <category android:name="${applicationId}" />
                </intent-filter>
            </activity>
    
      
    
            <!-- Since JCore2.0.0 Required SDK核心功能-->
            <!-- 可配置android:process参数将Service放在其他进程中;android:enabled属性不能是false -->
            <!-- 这个是自定义Service,要继承极光JCommonService,可以在更多手机平台上使得推送通道保持的更稳定 -->
             <service android:name="xx.xx.XService"
                     android:enabled="true"
                     android:exported="false"
                     android:process=":pushcore">
                     <intent-filter>
                         <action android:name="cn.jiguang.user.service.action" />
                     </intent-filter>
             </service>
    
            <!-- Required SDK 核心功能-->
            <receiver android:name="cn.jpush.android.service.AlarmReceiver" />
    
            <!-- Required since 3.0.7 -->
            <!-- 新的 tag/alias 接口结果返回需要开发者配置一个自定的广播 -->
            <!-- 3.3.0开始所有事件将通过该类回调 -->
            <!-- 该广播需要继承 JPush 提供的 JPushMessageReceiver 类, 并如下新增一个 Intent-Filter -->
            <receiver
                android:name="自定义 Receiver"
                android:enabled="true" 
                android:exported="false" >
                <intent-filter>
                    <action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" />
                    <category android:name="您应用的包名" />
                </intent-filter>
            </receiver>
    
            <!-- User defined. 用户自定义的广播接收器-->
            <!-- 这是3.3.0之前版本的接收方式,3.3.0开始是通过继承 JPushMessageReceiver并配置来接收所有事件回调。>
            <!-- 如果仍然需要在这个Receiver里接收,需要在JPushMessageReceiver 的子类里不重写对应的回调方法,或者重写方法且调用super-->
             <receiver
                 android:name="您自己定义的 Receiver"
                 android:enabled="true"
                 android:exported="false">
                 <intent-filter>
                     <!--Required 用户注册 SDK 的 intent-->
                     <action android:name="cn.jpush.android.intent.REGISTRATION" />
                     <!--Required 用户接收 SDK 消息的 intent-->
                     <action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" />
                     <!--Required 用户接收 SDK 通知栏信息的 intent-->
                     <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" />
                     <!--Required 用户打开自定义通知栏的 intent-->
                     <action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" />
                     <!-- 接收网络变化 连接/断开 since 1.6.3 -->
                     <action android:name="cn.jpush.android.intent.CONNECTION" />
                     <category android:name="您应用的包名" />
                 </intent-filter>
             </receiver>
    
            <!-- User defined. 用户自定义 Receiver 接收被拉起回调-->
            <!-- 自定义 Receiver 组件,继承cn.jpush.android.service.WakedResultReceiver类,复写onWake(int wakeType)或 onWake(Context context, int wakeType)方法以监听被拉起 -->
             <receiver android:name="xx.xx.xx.MyWakedResultReceiver">
                <intent-filter>
                    <action android:name="cn.jpush.android.intent.WakedReceiver" />
                    <category android:name="${applicationId}" />
                </intent-filter>
            </receiver>
    
            <!-- 3.5.0新增,用于定时展示功能 -->
            <receiver android:name="cn.jpush.android.service.SchedulerReceiver" android:exported="false"/>
    
            <!--Required SDK核心功能 since 3.3.0-->
            <activity
                android:name="cn.jpush.android.service.JNotifyActivity"
                android:exported="true"
                android:taskAffinity="jpush.custom"
                android:theme="@android:style/Theme.Translucent.NoTitleBar">
                <intent-filter>
                    <action android:name="cn.jpush.android.intent.JNotifyActivity" />
                    <category android:name="您应用的包名" />
                </intent-filter>
            </activity>
    
            <!-- Required. For publish channel feature -->
            <!-- JPUSH_CHANNEL 是为了方便开发者统计 APK 分发渠道。-->
            <!-- 例如: -->
            <!-- 发到 Google Play 的 APK 可以设置为 google-play; -->
            <!-- 发到其他市场的 APK 可以设置为 xxx-market。 -->
            <meta-data android:name="JPUSH_CHANNEL" android:value="developer-default"/>
            <!-- Required. AppKey copied from Portal -->
            <meta-data android:name="JPUSH_APPKEY" android:value="您应用的 Appkey"/>
        </application>
    </manifest>
    
    且确保有启动页面:
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    
    5.5 自定义Service

    其中上述清单文件里有段,要配置自己的service 且继承JCommonService。

        <!-- Since JCore2.0.0 Required SDK核心功能-->
            <!-- 可配置android:process参数将Service放在其他进程中;android:enabled属性不能是false -->
            <!-- 这个是自定义Service,要继承极光JCommonService,可以在更多手机平台上使得推送通道保持的更稳定 -->
             <service android:name="xx.xx.XService"
                     android:enabled="true"
                     android:exported="false"
                     android:process=":pushcore">
                     <intent-filter>
                         <action android:name="cn.jiguang.user.service.action" />
                     </intent-filter>
             </service>
    

    更改后代码:

    public class PushService extends JCommonService {
    }
    
    5.6 自定义Receiver

    其中上述清单文件里有段让实现自己的广播接收器,要配置自己的Receiver 且继承JPushMessageReceiver 。

     <!-- Required since 3.0.7 -->
            <!-- 新的 tag/alias 接口结果返回需要开发者配置一个自定的广播 -->
            <!-- 3.3.0开始所有事件将通过该类回调 -->
            <!-- 该广播需要继承 JPush 提供的 JPushMessageReceiver 类, 并如下新增一个 Intent-Filter -->
            <receiver
                android:name="自定义 Receiver"
                android:enabled="true" 
                android:exported="false" >
                <intent-filter>
                    <action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" />
                    <category android:name="您应用的包名" />
                </intent-filter>
            </receiver>
    

    更改后代码:

    public class PushReceiver extends JPushMessageReceiver {
    
        private static final String TAG = "PushReceiver";
        @Override
        public void onMessage(Context context, CustomMessage customMessage) {
            super.onMessage(context, customMessage);
    
            Log.d(TAG, "onMessage: "+customMessage.message);
        }
    }
    
    5.7 配置Application

    配置Application 到清单文件里

    public class App extends Application {
        @Override
        public void onCreate() {
            super.onCreate();
             // 设置开启日志,发布时请关闭日志
            JPushInterface.setDebugMode(true);  
            // 初始化 JPush
            JPushInterface.init(this);   
        }
    }
    

    6 测试结果

    运行自己的项目,查看log

    [JPushInterface] action:init
    .......
    [ConnectingHelper] Login succeed

    然后推送一条测试。


    相关文章

      网友评论

        本文标题:极光推送

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