8 极光推送

目录

  • 1.简介
  • 2.注册 登录
  • 3.创建应用
  • 4.下载demo 和SDK
  • 5.配置
    • 5.1 sdk 文件夹说明
    • 5.2 复制资源到自己项目
    • 5.3 module 的 gradle 配置
    • 5.4 配置 AndroidManifest.xml
    • 5.5 自定义Service
    • 5.6 自定义Receiver
    • 5.7 配置Application
  • 6 测试结果

1.简介

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

2.注册 登录

https://www.jiguang.cn/dev2/#/overview/appCardList

3.创建应用

进入开发者平台,创建应用。
https://www.jiguang.cn/dev2/#/overview/appCardList

8 极光推送_第1张图片
点击右上角–应用设置–获取Appkey :
8 极光推送_第2张图片
左上角纸飞机图标: 推送信息用的。当客户端配置完成,可以推送信息测试。

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

4.下载demo 和SDK

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

下载sdk:
https://docs.jiguang.cn/jpush/resources/
8 极光推送_第3张图片

5.配置

https://docs.jiguang.cn/jpush/client/Android/android_guide/

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

然后推送一条测试。

8 极光推送_第4张图片

你可能感兴趣的:(android-7)