android studio集成極光推送

1,android studio如何加載極光推送的jar包和.so庫文件.

2,如何獲取附加字段裏的鍵對應的值.

3,如何點擊通知欄通知進入webView加載頁面.

4,如何把推送過來的消息進行存儲,並以listView顯示,便於查看推送歷史.

5,如何點擊listView的item,進行網頁跳轉,再次進入webView加載頁面.

6,如何爲推送設置免打擾時段.(copy官方demo).

7,屬性動畫效果.

我能寫出這篇文章,也是被極光推送虐了很多遍,就在我要放棄的時候,終於發現了問題所在,這個問題說白了還是我是粗心導致的.至於什麼問題,一會再說.

這篇文章結尾有我自己寫的一個demo,大家可以去下載看看,就是下載積分有點多,絕對不是官方自動生成的demo,要說唯一的相同點,就是設置免打擾時段是直接複製過來的,之前被極光折磨時,也找了很多demo子看看,但是那些demo要麼是官方原版,要麼是稍微改動一下,依然換湯不換藥.還花了我很多積分,並且標題還說是自己寫的demo,我就呵呵了
,我的這個demo不能說多好,但至少不是官方demo並且界面做的還算可以,至少我自己這樣認爲.再說一點,我的demo或者這篇文章,差不多適合想用極光推送但不知從何下手的新手,或者像我這樣被虐了很多遍的人,如果你想問服務器端怎麼寫,那這篇文章和demo不適合你,估計你的水平已超過了我,這篇文章主要說利用普通推送,廢話說完,進入正題.

首先明確一下,想要接收到極光的推送,至少做到什麼程度才能接收到或者不報錯.有人說官方給的demo裏的類我需要完全拷貝嗎,或者說我需要拷貝幾個才行?那現在我告訴你,官方demo裏的類其實1個都不拷貝也能接收到,但前提在於把manifest.xml清單文件配置好才行.下面進入第一點:

1,android studio如何加載極光推送的jar包和.so庫文件.

到極光推送的官網上把關於android版本的推送sdk下載並解壓,如下圖:

Center

liibs目錄裏存放的是推送的jar包和支持手機架構的後綴爲.so的庫文件,res目錄裏存放的是一些xml文件,和一些圖片,這些文件時爲了接收富媒體消息用的,res目錄裏的文件直接拷貝到相應目錄即可,libs目錄裏的文件就是要主要講的.

Center

這裏面默認的包含了arm架構的各種版本,如果你的手機或者模擬器的系統架構是x86或者mip的,可以去極光官網下載對應版本,還有一個極光推送sdk 的jar包,android studio如何集成jar文件我之前有篇博客已經說了,可以翻翻我之前的博客,現在只剩下.so庫文件怎麼加載了,我之前也找了好多種方法,但是最後還是隻有1種有用,那就是極光官網提供的那個方法,:如下圖:

Center

Center

完成以上兩步就配置好了jar包和.so庫文件,本人親測可用.

2,如何獲取附加字段裏的鍵對應的值.打開極光推送官方文檔.如下圖:
Center


Center

Center

以上2個action和3個常量就能完成客戶端接收推送部分百分之80的部分,而我的demo就是根據這2個action和3個常量做出來的,下面是具體怎麼使用這些action和常量的截圖:

Center

Center

3,3,如何點擊通知欄通知進入webView加載頁面.

實現點擊通知欄通知進入webView加載頁面,首先得監聽點擊了通知這個action,並且你得有一個webView界面,如下圖.

Center

4,如何把推送過來的消息進行存儲,並以listView顯示,便於查看推送歷史.

Center

Center

最終listView顯示的item是這種樣式:

Center

5,如何點擊listView的item,進行網頁跳轉,再次進入webView加載頁面.

這個就簡單了,直接監聽onItemClick事件即可:如下圖:

Center

6,如何爲推送設置免打擾時段.

直接copy官方demo,沒啥可說的,參見官方demo

7,屬性動畫效果.

這個也是我上篇博客說過的,可以翻翻看,我直接把上篇博文的例子當做我這次demo的主界面,看起來還是不錯的.

之前說到我被虐,其實都是粗心大意引起的,我在配置manifest.xml文件時,少配置一個包名,一直給我報空指針錯誤,後來發現之後,改了,就一切ok了,關鍵還是得細心.,這裏展示一下自己已修復好的完整清單文件.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.administrator.jiguangpush"
          android:versionCode="181"
          android:versionName="1.8.1">
    <!--總共有7個地方需要配置包名,一定不要配置少了!!!!!!!!!!!!!!!!!!!!!-->
    <!-- Required 自定義用來收發消息的相關權限 -->
    <permission
        android:name="com.example.administrator.jiguangpush.permission.JPUSH_MESSAGE"
        android:protectionLevel="signature"/>
    <!-- Required  一些系統要求的權限,如訪問網絡等 -->
    <uses-permission android:name="com.example.administrator.jiguangpush.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.WAKE_LOCK"/>
    <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.WRITE_SETTINGS"/>
    <uses-permission android:name="android.permission.VIBRATE"/>
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

    <!-- Optional for location -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <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"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>

        <!-- Required SDK核心功能  直接拷貝 -->
        <activity
            android:name="cn.jpush.android.ui.PushActivity"
            android:configChanges="orientation|keyboardHidden"
            android:exported="false">
            <intent-filter>
                <action android:name="cn.jpush.android.ui.PushActivity"/>

                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="com.example.administrator.jiguangpush"/>
            </intent-filter>
        </activity>
        <!-- Required  SDK核心功能   直接拷貝 -->
        <service
            android:name="cn.jpush.android.service.DownloadService"
            android:enabled="true"
            android:exported="false">
        </service>

        <!-- Required SDK 核心功能  直接拷貝 -->
        <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 1.8.0 option 可選項。用於同一設備中不同應用的JPush服務相互拉起的功能。 -->
        <!-- 若不啓用該功能可刪除該組件,將不拉起其他應用也不能被其他應用拉起 -->
        <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="com.example.administrator.jiguangpush"/>
            </intent-filter>
        </service>

        <!-- Required SDK核心功能    直接拷貝 -->
        <receiver
            android:name="cn.jpush.android.service.PushReceiver"
            android:enabled="true"
            android:exported="false">
            <intent-filter android:priority="1000">
                <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY"/>
                <!-- Required  顯示通知欄 -->
                <category android:name="com.example.administrator.jiguangpush"/>
            </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核心功能   直接拷貝 -->
        <receiver android:name="cn.jpush.android.service.AlarmReceiver"/>
        <receiver
            android:name=".MyReceiver"
            android:enabled="true"
            android:exported="false">
            <intent-filter>
                <action android:name="cn.jpush.android.intent.REGISTRATION"/>
                <!-- Required  用戶註冊SDK的intent -->
                <action android:name="cn.jpush.android.intent.UNREGISTRATION"/>
                <action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED"/>
                <!-- Required  用戶接收SDK消息的intent -->
                <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED"/>
                <!-- Required  用戶接收SDK通知欄信息的intent -->
                <action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED"/>
                <!-- Required  用戶打開自定義通知欄的intent -->
                <action android:name="cn.jpush.android.intent.ACTION_RICHPUSH_CALLBACK"/>
                <!-- Optional 用戶接受Rich Push Javascript 回調函數的intent -->
                <action android:name="cn.jpush.android.intent.CONNECTION"/>
                <!-- 接收網絡變化 連接/斷開 since 1.6.3 -->
                <category android:name="com.example.administrator.jiguangpush"/>
            </intent-filter>
        </receiver>

        <!-- Required  . Enable it you can get statistics data with channel  要求填寫appKey再拷貝 -->
        <meta-data
            android:name="JPUSH_CHANNEL"
            android:value="developer-default"/>
        <meta-data
            android:name="JPUSH_APPKEY"
            android:value="649d75504a154477a4aaeb32"/>
        <!-- </>值來自開發者平臺取得的AppKey -->
        <activity
            android:name=".NotificationListActivity"
            android:label="@string/title_activity_second">
        </activity>
        <activity
            android:name=".PushTextActivity"
            android:label="@string/title_activity_push_text">
        </activity>
        <activity
            android:name=".SetFreeTimeActivity"
            android:label="@string/title_activity_set_free_time">
        </activity>
        <activity
            android:name=".WebViewActivity"
            android:label="@string/title_activity_web_view">
        </activity>
    </application>

</manifest>

再說一下,服務器界面我只用到普通消息進行發送,自定義消息和富媒體消息都沒用,最後在上一張服務器發送普通消息的圖:

Center

Center

好了,差不多都說完了.下面上我的demo的下載地址,demo裏的註釋超級詳細,絕對沒有看不懂這一說,下載之後直接更換一下包名和appKey即可.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章