本文就極光推送內建做了一個簡化,僅需三步就可以快速內建極光推送。不用去看繁瑣的極光推送的說明文檔,僅僅看本文的說明步驟,三步即可內建極光推送功能。
1 僅需三步內建
第一步:配置build.gradle
在項目的app的主工程的build.gradle檔案中添加如下内容:
android {
compileSdkVersion 28
defaultConfig {
applicationId "Your App Id"
...........
ndk {
abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64', 'mips', 'mips64'
}
manifestPlaceholders = [
JPUSH_PKGNAME : defaultConfig.applicationId,
JPUSH_APPKEY : "Your Key", //JPush 上注冊的包名對應的 Appkey.
JPUSH_CHANNEL : "developer-default", //暫時填寫預設值即可.
]
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
..........
implementation project(':jpushlib')
}
第二步:引入jpushlib子產品
引入jpushlib module即可
jpushlib module下載下傳位址:請點選這裡
第三步:添加兩行代碼
class JGApplication: Application() {
private val TAG = "JGApplication"
override fun onCreate() {
super.onCreate()
JPushHelper.setJPushListener(absJPushListener) //這一行代碼設定Jpush回調監聽
JPushHelper.init(this, BuildConfig.DEBUG) // 這一行代碼初始化Jpush
}
// 重寫抽象類AbstractJPushListener的相關方法即可,按需重載方法即可
private val absJPushListener = object : AbstractJPushListener() {
override fun onNotificationSettingsCheck(context: Context?, isOn: Boolean, i: Int) {
super.onNotificationSettingsCheck(context, isOn, i)
Log.i(TAG, "手機APP通知開關的回調-》 isOn:$isOn, i:$i")
}
override fun onConnected(context: Context?, b: Boolean) {
super.onConnected(context, b)
Log.i(TAG, "長連接配接狀态回調:$b")
}
}
}
這一步僅需在application類的onCreate方法中設定JPushHelper類的初始化工作。
以上兩行代碼即可。
這兩行代碼順序不要變動。先設定監聽回調接口,再初始化即可通過監聽擷取回調狀态通知。當然監聽回調非必須的,可不設定或設定為空。
通過以上三步即可完成極光推送的內建。
2 檢驗內建是否成功
經過上面三步內建指南之後,啟動APP,檢視日志:
如果日志顯示這樣的狀态,即表明JPush內建成功,并且長連接配接已經建立,可接收發送的推送通知
3 Demo效果
經過上面三步的操作之後,即可調用JPushHelper類的相關方法設定JPush推送相關的方法。
以上三步的內建效果,我做了一個Demo,具體位址: 請點選這裡
Demo效果如下:
UI界面中使用到的方法均是JPushHelper類提供的方法,直接使用即可。
點選按鈕,日志列印如下:
使用者别名API日志:
使用者标簽API日志:
4 jpushlib子產品JPushHelper類說明
該類是jpushlib子產品的核心,是app中使用極光推送庫的橋梁,通過該類即可設定極光推送的所有相關方法。
具體該類提供的方法接口如下:
//初始化
public static void init(Context context, boolean isDebug)
//清理
public static void cleanJPushListener()
// ===========================================極光推送API
//停止推送
public static void stopPush()
//恢複推送服務
public static void resumePush()
//用來檢查 Push Service 是否已經被停止
public static boolean isPushStoped()
// 擷取目前連接配接狀态
public static boolean getConnectionState()
//動态配置 channel,優先級比 AndroidManifest 裡配置的高
public static void setChannel(String channel)
//允許推送的開始時間與結束時間
public static void setPushTime(Set<Integer> weekDays, int startHour, int endHour)
//調用此 API 來設定靜音時段。如果在該時間段内收到消息,則:不會有鈴聲和震動
public static void setSilenceTime(int startHour, int startMinute,
int endHour, int endMinute)
//在 Android 6.0 及以上的系統上,需要去請求一些用到的權限,
//JPush SDK 用到的一些需要請求如下權限
public static void requestPermission(Activity activity)
//JPush SDK 開啟和關閉省電模式,預設為關閉
public static void setPowerSaveMode(Activity activity, boolean enable)
//調用此 API 設定手機号碼
public static void setMobileNumber(int sequence, String mobileNumber)
//調用此 API 來取得應用程式對應的 RegistrationID。
public static String getRegistrationID()
// ===========================================别名相關API
//調用此 API 來設定别名。
public static void setAlias(int sequence, String alias)
//調用此 API 來删除别名。
public static void deleteAlias(int sequence)
//調用此 API 來查詢别名
public static void getAlias(int sequence)
// ===========================================标簽相關API
//設定 tags 時,如果其中一個 tag 無效,則整個設定過程失敗,可過濾無效的tag
public static Set<String> filterValidTags(Set<String> tags)
//調用此 API 來設定标簽
//需要了解的是,這個接口是覆寫邏輯,而不是增量邏輯。即新的調用會覆寫之前的設定
public static void setTags(int sequence, Set<String> tags)
//調用此 API 來新增标簽
public static void addTags(int sequence, Set<String> tags)
//調用此 API 來删除指定标簽
public static void deleteTags(int sequence, Set<String> tags)
//調用此 API 來清除所有标簽
public static void cleanTags(int sequence)
//調用此 API 來查詢所有标簽
public static void getAllTags(int sequence)
//調用此 API 來查詢指定 tag 與目前使用者綁定的狀态
public static void checkTagBindState(int sequence, String tag)
// ===========================================通知相關API
//此 API 提供清除通知的功能,包括:清除所有 JPush 展現的通知(不包括非 JPush SDK 展現的)
public static void clearAllNotifications()
//清除指定某個通知
public static void clearNotificationById(int notificationId)
//當使用者需要定制預設的通知欄樣式時,則可調用此方法
public static void setDefaultPushNotificationBuilder(DefaultPushNotificationBuilder builder)
//當開發者需要為不同的通知,指定不同的通知欄樣式(行為)時,則需要調用此方法設定多個通知欄建構類
public static void setPushNotificationBuilder(Integer notificationBuilderId,
BasicPushNotificationBuilder builder)
//限制保留的通知條數。預設為保留最近 5 條通知
public static void setLatestNotificationNumber(int maxNum)
// ===========================================崩潰API
//關閉 CrashLog 上報
public static void stopCrashHandler()
//開啟 CrashLog 上報
public static void initCrashHandler()
// ===========================================本地通知API
//本地通知 API 不依賴于網絡,無網條件下依舊可以觸發
public static void addLocalNotification(JPushLocalNotification notification)
//移除指定的本地通知
public static void removeLocalNotification(long notificationId)
//移除所有的本地通知,注意notificationId為0或者負數時通知無法移除
public static void clearLocalNotifications()
// ===========================================地理圍欄功能API
//設定地理圍欄監控周期,最小3分鐘,最大1天。預設為15分鐘,
public static void setGeofenceInterval(long interval)
//設定最多允許儲存的地理圍欄數量,超過最大限制後,
//如果繼續建立先删除最早建立的地理圍欄。預設數量為10個,允許設定最小1個,最大100個。
public static void setMaxGeofenceNumber(int maxNumber)
//删除指定id的地理圍欄
public static void deleteGeofence(String geofenceid)
//設定角标數字(目前僅支援華為手機)
public static void setBadgeNumber(int num)
// ===========================================手機APP通知開關API
//檢查目前應用的通知開關是否開啟
//傳回結果:1表示開啟,0表示關閉,-1表示檢測失敗
public static int isNotificationEnabled()
//跳轉手機的應用通知設定頁,可由使用者操作開啟通知開關
public static void goToAppNotificationSettings()
// ===========================================統計分析API
public static void onResume(final Activity activity)
public static void onPause(final Activity activity)
// ===========================================設定監聽器
public static void setJPushListener(AbstractJPushListener listener)
public static void cleanJPushListener()
以上JPushHelper接口完全可以滿足開發者引入極光推送的全部功能。無需再去看Jpush極光推送的文檔,僅僅引入我這裡提供的jpushlib子產品即可。
5 jpushlib子產品AbstractJPushListener類回調監聽說明
public abstract class AbstractJPushListener {
public Notification getNotification(Context context,
NotificationMessage notificationMessage,
Notification notification) {
return notification;
}
/**
* 收到自定義消息回調
*
* @param context Context
* @param customMessage 接收自定義消息内容
*/
public void onMessage(Context context, CustomMessage customMessage) {
}
/**
* 點選通知回調
*
* @param context Context
* @param notificationMessage 點選的通知内容
*/
public void onNotifyMessageOpened(Context context,
NotificationMessage notificationMessage) {
}
/**
* 收到通知回調
*
* @param context Context
* @param notificationMessage 接收到的通知内容
*/
public void onNotifyMessageArrived(Context context,
NotificationMessage notificationMessage) {
}
/**
* 清除通知回調
*
* 說明:
*
* 1.同時删除多條通知,可能不會多次觸發清除通知的回調
*
* 2.隻有使用者手動清除才有回調,調接口清除不會有回調
*
* @param context Context
* @param notificationMessage 清除的通知内容
*/
public void onNotifyMessageDismiss(Context context,
NotificationMessage notificationMessage) {
}
/**
* 注冊成功回調
*
* @param context Context
* @param s 注冊id
*/
public void onRegister(Context context, String s) {
}
/**
* 長連接配接狀态回調
*
* @param context Context
* @param b 長連接配接狀态
*/
public void onConnected(Context context, boolean b) {
}
/**
* 注冊失敗回調
*
* @param context Context
* @param cmdMessage 錯誤資訊
*/
public void onCommandResult(Context context, CmdMessage cmdMessage) {
}
/**
* 通知的MultiAction回調
*
* @param context Context
* @param intent 點選後觸發的Intent
*
* 說明 注意這個方法裡面禁止再調super.onMultiActionClicked,因為會導緻邏輯混亂
*/
public void onMultiActionClicked(Context context, Intent intent) {
}
/**
* 通知開關的回調
*
* 該方法會在以下情況觸發時回調。
*
* 1.sdk每次啟動後都會檢查通知開關狀态并通過該方法回調給開發者。
*
* 2.當sdk檢查到通知狀态變更時會通過該方法回調給開發者。
*
* @param context Context
* @param isOn 通知開關狀态
* @param i 觸發場景,0為sdk啟動,1為檢測到通知開關狀态變更
*/
public void onNotificationSettingsCheck(Context context, boolean isOn, int i) {
}
/**
* tag 增删查改的操作會在此方法中回調結果
*
* @param context Context
* @param jPushMessage tag 相關操作傳回的消息結果體
*/
public void onTagOperatorResult(Context context, JPushMessage jPushMessage) {
}
/**
* 查詢某個 tag 與目前使用者的綁定狀态的操作會在此方法中回調結果
*
* @param context Context
* @param jPushMessage check tag 與目前使用者綁定狀态的操作傳回的消息結果體,
* 具體參考 JPushMessage 類的說明
*/
public void onCheckTagOperatorResult(Context context, JPushMessage jPushMessage) {
}
/**
* alias 相關的操作會在此方法中回調結果
*
* @param context Context
* @param jPushMessage alias 相關操作傳回的消息結果體
*/
public void onAliasOperatorResult(Context context, JPushMessage jPushMessage) {
}
/**
* 設定手機号碼會在此方法中回調結果
*
* @param context Context
* @param jPushMessage 設定手機号碼傳回的消息結果體
*/
public void onMobileNumberOperatorResult(Context context, JPushMessage jPushMessage) {
}
/**
* 應用被拉起時回調 onWake(Context context, int wakeType) 方法,
* context 是上下文,wakeType 是拉起的類型,其取值對應的拉起方式如下:
* wakeType值 拉起方式
* 1 START_SERVICE
* 2 BIND_SERVICE
* 4 CONTENTPROVIDER
*/
public void onWake(Context context, int wakeType) {
}
}
該類是一個抽象類,在文章開始位置,重寫了其部分方法,通過回調監聽部分方法,按需要重載其方法即可。
6 源碼下載下傳
源代碼位址,請點選這裡
歡迎關注公衆号:技術印象