【安卓學習之第三方庫】 消息推送之極光推送

█ 【安卓學習之第三方庫】 消息推送之極光推送

█ 相關文章:

- 
 ● 【安卓學習之第三方庫】庫的使用2-jar類庫的使用(以dom4j爲例)和升級(以極光推送爲例)

█ 讀前說明:

- 
 ● 本文通過學習別人寫demo,學習一些課件,參考一些博客,’學習相關知識,如果涉及侵權請告知
 ● 本文只簡單羅列相關的代碼實現過程
 ● 涉及到的邏輯以及說明也只是簡單介紹,主要當做筆記,瞭解過程而已

█ 極光後臺:

- 
 ● 兩年沒有進極光後臺,發現界面發生了很大變化,功能也有些變化,這邊就整理下,重新學習下
 ● 後臺創建應用,【推送設置】裏面設置應用包名,獲取AppKey和Master Secret:

AppKey 爲極光平臺應用的唯一標識。
Master Secret 用於服務器端 API 調用時與 AppKey 配合使用達到鑑權的目的,請保管好 Master Secret 防止外泄。

在這裏插入圖片描述
 ● 推送設置,主要設置應用包名,只能設置一次,同時可以下載demo以及進入集成開發文檔的快捷入口:(可以說,極光還是挺人性化的,讓大家集成方便,找資料也方便,當然還提供了論壇、qq羣等方式供大家去討論)

應用包名 :Android應用程序的包名(Package Name)。在 AndroidManifest.xml 裏配置使用的。
該包名推送業務和 IM 共同使用,一旦指定,不可更改。

快速集成(Android):這裏下載已經配置好了當前應用包名與 AppKey 的示例應用,導入到 Eclipse 裏馬上就可以運行起來並接收推送。
也可以直接複製這些配置到你自己的應用裏去。

在這裏插入圖片描述
 ● 推送測試,下載demo或者集成sdk後,在沒有後臺配合的情況下,就可以直接通過該界面進行推送測試,正常主要都是用【自定義消息】(一般都是json字符串,再轉換成對象),當然也可以用【發送通知】。
在這裏插入圖片描述
在這裏插入圖片描述
 ● 推送歷史查看,因爲我們直接通過後臺網頁發送推送消息,所以要選擇web:
在這裏插入圖片描述

● app測試,下載demo,界面如下:
在這裏插入圖片描述
 ● app測試,收到消息推送,含【發送通知】和【自定義消息】:
在這裏插入圖片描述

█ demo結構:

- 
 ● demo下載後,工程名爲:JPushExample(1630873),打開工程,代碼目錄如下:
 在這裏插入圖片描述
 ● build.gradle文件如下:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "com.xxx.xxxx"// 值來自開發者平臺設置的【應用包名】
        minSdkVersion 9
        targetSdkVersion 26
        versionCode 360
        versionName "3.6.0"

        manifestPlaceholders = [
                JPUSH_APPKEY : "012345678901234567890123",//值來自開發者平臺取得的【AppKey】
                JPUSH_CHANNEL: "default_developer",
        ]
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
}

● AndroidManifest.xml文件如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.jpushdemo"// 注意,這個包名可以和平臺設置的【應用包名】不一樣,是假包名
    >
  
    <application
        android:icon="@drawable/ic_launcher"
        android:allowBackup="false"
        android:label="@string/app_name"
        android:name="com.example.jpushdemo.ExampleApplication"
        tools:ignore="GoogleAppIndexingWarning">
        
        <!-- User defined.  For test only  用戶自定義的廣播接收器-->
        <receiver
            android:name="com.example.jpushdemo.MyReceiver"
            android:enabled="true">
            <intent-filter>
                <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  用戶接收SDK通知欄信息的intent-->
                <action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" /> <!--Required  用戶打開自定義通知欄的intent-->
                <action android:name="cn.jpush.android.intent.CONNECTION" /><!-- 接收網絡變化 連接/斷開 since 1.6.3 -->
                <category android:name="${applicationId}" />
            </intent-filter>
        </receiver>

        <!-- User defined.  For test only  用戶自定義接收消息器,3.0.7開始支持,目前新tag/alias接口設置結果會在該廣播接收器對應的方法中回調-->
        <!--since 3.3.0 接收JPush相關事件-->
        
		<!-- Required since 3.0.7 -->
		<!-- 新的 tag/alias 接口結果返回需要開發者配置一個自定的廣播 -->
		<!-- 3.3.0開始所有事件將通過該類回調 -->
		<!-- 該廣播需要繼承 JPush 提供的 JPushMessageReceiver 類, 並如下新增一個 Intent-Filter -->
        <receiver android:name="com.example.jpushdemo.PushMessageReceiver">
            <intent-filter>
                <action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" />
                <category android:name="${applicationId}"></category>
            </intent-filter>
        </receiver>
        
    </application>
</manifest>

█ demo解析:

- 
 ● 首頁需要在Application中進行初始化JPush(如果已經初始化JPush,但沒有登錄成功,則執行重新登錄):

	JPushInterface.setDebugMode(true); 	// 設置開啓日誌,發佈時請關閉日誌
    JPushInterface.init(this);     		// 初始化 JPush

● 初始化後,就可以開始接收推送消息,這邊我們注意到兩個文件:

MyReceiver:用戶自定義的廣播接收器
PushMessageReceiver:用戶自定義接收消息器,3.0.7開始支持,

注 : **從JPush3.0.7開始,需要配置繼承JPushMessageReceiver的廣播,原來如果配了MyReceiver現在可以棄用

● 觀察可以發現這兩個文件其實是一樣的,MyReceiver是將所有的消息處理都在同一個方法中,想要知道是什麼事件,需要自己取值判斷,而PushMessageReceiver是將不同的消息處理放在不同的方法中,提前給你分類了:

這邊重點關注4個地方:【自定義消息】推送處理、【發送通知】推送處理、【發送通知】通知打開處理、和極光服務器的連接狀態。

public class MyReceiver extends BroadcastReceiver {
	private static final String TAG = "JIGUANG-Example";

	@Override
	public void onReceive(Context context, Intent intent) {
		try {
			Bundle bundle = intent.getExtras();
			Logger.d(TAG, "[MyReceiver] onReceive - " + intent.getAction() + ", extras: " + printBundle(bundle));

			if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
				String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID);
				Logger.d(TAG, "[MyReceiver] 接收Registration Id : " + regId);
				//send the Registration Id to your server...

			} else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {
				Logger.d(TAG, "[MyReceiver] 接收到推送下來的自定義消息: " + bundle.getString(JPushInterface.EXTRA_MESSAGE));
			   // ######################【自定義消息】推送處理######################

			} else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {
				Logger.d(TAG, "[MyReceiver] 接收到推送下來的通知");
				int notifactionId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID);
				Logger.d(TAG, "[MyReceiver] 接收到推送下來的通知的ID: " + notifactionId);
				// ######################【發送通知】推送處理######################
			} else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {
				Logger.d(TAG, "[MyReceiver] 用戶點擊打開了通知");
				// ######################【發送通知】通知打開處理######################
			} else if(JPushInterface.ACTION_CONNECTION_CHANGE.equals(intent.getAction())) {
				boolean connected = intent.getBooleanExtra(JPushInterface.EXTRA_CONNECTION_CHANGE, false);
				Logger.w(TAG, "[MyReceiver]" + intent.getAction() +" connected state change to "+connected);
				// ######################和極光服務器的連接狀態######################
			} else {
				Logger.d(TAG, "[MyReceiver] Unhandled intent - " + intent.getAction());
			}
		} catch (Exception e){

		}

	}
}

public class PushMessageReceiver extends JPushMessageReceiver{
    private static final String TAG = "PushMessageReceiver";

    // ######################【自定義消息】推送處理######################
    @Override
    public void onMessage(Context context, CustomMessage customMessage) {
        Log.e(TAG,"[onMessage] "+customMessage);
        processCustomMessage(context,customMessage);
    }
    // ######################【發送通知】通知打開處理######################
    @Override
    public void onNotifyMessageOpened(Context context, NotificationMessage message) {
        Log.e(TAG,"[onNotifyMessageOpened] "+message);
    }
	// ######################【發送通知】按鈕處理######################
    @Override
    public void onMultiActionClicked(Context context, Intent intent) {
        Log.e(TAG, "[onMultiActionClicked] 用戶點擊了通知欄按鈕");
     
    }
    // ######################【發送通知】推送處理######################
    @Override
    public void onNotifyMessageArrived(Context context, NotificationMessage message) {
        Log.e(TAG,"[onNotifyMessageArrived] "+message);
    }

    // ######################和極光服務器的連接狀態######################
    @Override
    public void onConnected(Context context, boolean isConnected) {
        Log.e(TAG,"[onConnected] "+isConnected);
    }
}

█ 相關資料:

- 
 ● 1.極光推送 - Android SDK 集成指南 - 極光文檔
 ● 2.2018-04-03 Android極光推送使用方法大全(升級JCore爲2.0版本) - Wang_Mr - 簡書
 ● 3.2019-06-25 極光推送第二篇:消息接收 - Small_Cake -
簡書

轉載請註明出處:
https://blog.csdn.net/ljb568838953/article/details/106296245

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