廠商通道 SDK 集成指南
本文旨在指導客戶使用自動集成的方式集成各個廠商通道的 SDK,實現離線推送。
前提條件
- 已經集成Engagelab通道
- 集成廠商通道 SDK 需要先申請廠商通道相關參數,詳情參考 廠商通道參數申請指南 。
資源文件
- 在res/drawable/下放好命名為
mtpush_notification_icon.png
的通知小圖標。如果沒配置,sdk會取應用圖標,android高版本會出現顯示異常問題
小米通道集成指南
配置 mavenCentral 支持
在 Project 根目錄的主 gradle 中配置 mavenCentral 支持。(新建 project 默認配置就支持)
buildscript {
repositories {
mavenCentral()
}
}
allprojects {
repositories {
mavenCentral()
}
}
配置依賴
在應用 module 的 gradle 中 dependencies 節點添加如下代碼:
dependencies {
//廠商版本和 Engagelab SDK 版本保持一致
implementation 'com.engagelab.plugin:mi:5.x.x'
}
配置參數
在應用 module 的 gradle 中 defaultConfig 節點添加如下代碼:
manifestPlaceholders = [
// 設置manifest.xml中的變量
XIAOMI_APPKEY : "MI-您的應用對應的小米的APPID", // 小米平台注册的appkey
XIAOMI_APPID : "MI-您的應用對應的小米的APPKEY",// 小米平台注册的appid
]
配置代碼混淆
如果使用了 proguard,為了防止誤報的 warning 導致無法成功編譯,需要在配置文件中加入以下內容:
-dontwarn com.xiaomi.push.**
-keep class com.xiaomi.push.** { *; }
集成結果判斷
若集成成功,日誌顯示如下:
D [MTMiBusiness] support xiaomi push
D [MTMiBusiness] onTokenSuccess:get token is Tv3KBknVcnEaXnLe89MGEH3SWVgUYdLDYzJaST30IoIGATl2tv5eu6iuT/PTO0Mj
D [MTPlatformBusiness] onPlatformTokenSuccess, rid:5, platformToken:
{
platform=1,
token=Tv3KBknVcnEaXnLe89MGEH3SWVgUYdLDYzJaST30IoIGATl2tv5eu6iuT/PTO0Mj
region=NULL
isUserSettings=false
}
小米通道測試方法
1.進入【EngageLab控制台】-【AppPush】-【基礎設置】-【集成設置】頁面,填寫參數:AppKey、AppID、AppSecret、並點擊“保存”。
2.殺死 App 進程後進行推送,如果能夠收到推送,則表明廠商通道集成成功。
小米 Android 13 及其以上系統特殊說明
根據小米官方說明,其 Android 13 及其以上版本,要求應用啟動方式按照谷歌要求:顯示調用必須精確匹配 Intent 過濾器,以確保應用在小米設備上的正常使用體驗。
具體請查閱谷歌官方文檔以了解更多關於 Android 13 及以上版本的 Intent 過濾器要求:Google 官方文檔 - Intent 過濾器
開發者調測建議:
開發者可以在小米設備,開發者選項中,查找“應用兼容性變更”下的 ENFORCE_INTENTS_TO_MATCH_INTENT_FILTERS 開關,並在測試期間,考慮開啟該選項,以確保應用在各種情況下都能正常運行。
華為通道集成指南
配置 mavenCentral 支持
在 Project 根目錄的主 gradle 中配置 mavenCentral 支持和 agconnect 依賴。
buildscript {
repositories {
google()
mavenCentral()
maven {url 'https://developer.huawei.com/repo/'}
}
}
buildscript {
dependencies {
classpath 'com.huawei.agconnect:agcp:1.6.0.300'
}
}
allprojects {
repositories {
google()
mavenCentral()
maven {url 'https://developer.huawei.com/repo/'}
}
}
(可選)如果使用gradle 8.0版本,需要在項目級“gradle.properties”文件添加如下命令:
說明: 集成低於1.9.1.300版本的AGC插件,不支持兼容gradle 8.0版本,則需要執行此步驟。
apmsInstrumentationEnabled=false
添加華為插件
在應用 module 的 build.gradle 文件底部添加 apply plugin 代碼行,以啟用 gradle 插件:
apply plugin: 'com.huawei.agconnect'
配置依賴
在應用 module 的 gradle 中 dependencies 節點添加如下代碼,可根據華為發布的版本更新選擇最新版本:
dependencies {
implementation 'com.huawei.hms:push:6.11.0.300'
//廠商版本和 AppPush SDK 版本保持一致
implementation 'com.engagelab.plugin:huawei:5.x.x'
}
配置 agconnect-services.json 文件
參考 廠商通道參數申請指南 獲取 agconnect-services.json 文件,並配置到 app 目錄下。
配置簽名證書
在 build.gradle 中配置在華為後台添加的指紋證書對應的簽名。
HMS 服務必須要求 app 簽名才能註冊成功,可以在終端采用keytool -list -v -keystore keystorefileName 獲取對應的指紋證書。
signingConfigs {
release {
storeFile file("release.keystore")//簽名文件的path
storePassword "123456"
keyAlias "android.keystore"
keyPassword "123456"
}
}
buildTypes {
release {
minifyEnabled true
proguardFiles 'proguard-rules.pro'
signingConfig signingConfigs.release
}
debug{
minifyEnabled false
signingConfig signingConfigs.release
}
}
配置代碼混淆
如果使用了 proguard,為了防止誤報的 warning 導致無法成功編譯,需要在配置文件中加入以下內容:
-ignorewarnings
-keepattributes *Annotation*
-keepattributes Exceptions
-keepattributes InnerClasses
-keepattributes Signature
-keepattributes SourceFile,LineNumberTable
-keep class com.hianalytics.android.**{*;}
-keep class com.huawei.updatesdk.**{*;}
-keep class com.huawei.hms.**{*;}
如果開發者使用了 AndResGuard,需要在混淆配置文件中加入 AndResGuard 白名單。
"R.string.hms*",
"R.string.connect_server_fail_prompt_toast",
"R.string.getting_message_fail_prompt_toast",
"R.string.no_available_network_prompt_toast",
"R.string.third_app_*",
"R.string.upsdk_*",
"R.layout.hms*",
"R.layout.upsdk_*",
"R.drawable.upsdk*",
"R.color.upsdk*",
"R.dimen.upsdk*",
"R.style.upsdk*",
"R.string.agc*"
集成結果判斷
若集成成功,日誌顯示如下:
D [MTHuaweiBusiness] support huawei push
D [MTHuaweiBusiness] onTokenSuccess:get token is IQAAAACy0aL1AABEZ3l2C7jluCGX5XriooCvoOwK9TrjG1MTpH0CD47WPXFcAbtt3DdOeOPvX6d7xfAVctoyaOCGKRllRa-0RBP7WQrYI6SxnOp1GA
D [MTPlatformBusiness] onPlatformTokenSuccess, rid:5, platformToken:
{
platform=2,
token=IQAAAACy0aL1AABEZ3l2C7jluCGX5XriooCvoOwK9TrjG1MTpH0CD47WPXFcAbtt3DdOeOPvX6d7xfAVctoyaOCGKRllRa-0RBP7WQrYI6SxnOp1GA
region=NULL
isUserSettings=false
}
華為通道測試方法
1.進入【EngageLab控制台】-【AppPush】-【基礎設置】-【集成設置】頁面,填寫參數:AppID、AppSecret、並點擊“保存”。
2.殺死 App 進程後進行推送,如果能夠收到推送,則表明廠商通道集成成功。
魅族通道集成指南
配置 mavenCentral 支持
在 Project 根目錄的主 gradle 中配置 mavenCentral 支持。(新建 project 默認配置就支持)
buildscript {
repositories {
mavenCentral()
}
}
allprojects {
repositories {
mavenCentral()
}
}
配置依賴
在應用 module 的 gradle 中 dependencies 節點添加如下代碼:
dependencies {
//廠商版本和AppPush SDK版本保持一致
implementation 'com.engagelab.plugin:meizu:5.x.x'
}
配置參數
在應用 module 的 gradle 中 defaultConfig 節點添加如下代碼:
魅族的參數需要添加前綴 “MZ-”。
manifestPlaceholders = [
// 設置manifest.xml中的變量
MEIZU_APPKEY : "MZ-您的應用對應的魅族的APPKEY", // 魅族平台注册的appkey
MEIZU_APPID : "MZ-您的應用對應的魅族的APPID", // 魅族平台注册的appid
]
配置代碼混淆
如果使用了 proguard,為了防止誤報的 warning 導致無法成功編譯,需要在配置文件中加入以下內容:
-dontwarn com.meizu.cloud.**
-keep class com.meizu.cloud.** { *; }
集成結果判斷
若集成成功,日誌顯示如下:
D [MTMeizuBusiness] support meizu push
D [MTPlatformBusiness] onPlatformTokenSuccess, rid:5, platformToken:
{
platform=3,
token=DDI5c060475064d447b40670206756d73605705037205
region=NULL
isUserSettings=false
}
魅族通道獲取不到token,嘗試在 gradle.properties 中添加 android.enableR8 = false 進行關閉 R8
魅族廠商測試方法
1.進入【EngageLab控制台】-【AppPush】-【基礎設置】-【集成設置】頁面,填寫參數:AppKey、AppID、AppSecret,並點擊“保存”。
2.殺死 App 進程後進行推送,如果能夠收到推送,則表明廠商通道集成成功。
vivo 通道集成指南
配置 mavenCentral 支持
在 Project 根目錄的主 gradle 中配置 mavenCentral 支持。(新建 project 默認配置就支持)
buildscript {
repositories {
mavenCentral()
}
}
allprojects {
repositories {
mavenCentral()
}
}
配置依賴
在應用 module 的 gradle 中 dependencies 節點添加如下代碼:
dependencies{
//廠商版本和 AppPush SDK 版本保持一致
implementation 'com.engagelab.plugin:vivo:5.x.x'
}
配置參數
在應用 module 的 gradle 中 defaultConfig 節點添加如下代碼:
manifestPlaceholders=[
VIVO_APPKEY : "您的應用對應的VIVO的APPKEY", // VIVO平台注册的appkey
VIVO_APPID : "您的應用對應的VIVO的APPID", // VIVO平台注册的appid
]
集成結果判斷
若集成成功,日誌顯示如下:
D [MTVivoBusiness] support vivo push
D [MTVivoBusiness] getRegId onTokenSuccess:get token is v2-CRrhwCeK9eY77H6m_EeUqz3zGqmbh0LJPnhvsF0V-ia9OmMHQP9FGCjZ
D [MTPlatformBusiness] onPlatformTokenSuccess, rid:5, platformToken:
{
platform=5,
token=v2-CRrhwCeK9eY77H6m_EeUqz3zGqmbh0LJPnhvsF0V-ia9OmMHQP9FGCjZ
region=NULL
isUserSettings=false
}
配置代碼混淆
如果使用了 proguard,為了防止誤報的 warning 導致無法成功編譯,需要在配置文件中加入以下內容:
-dontwarn com.vivo.push.**
-keep class com.vivo.push.**{*; }
-keep class com.vivo.vms.**{*; }
vivo 通道測試方法
1.進入【EngageLab控制台】-【AppPush】-【基礎設置】-【集成設置】頁面,填寫參數:AppKey、AppID、AppSecret,並點擊“保存”。
2.殺死 App 進程後進行推送,如果能夠收到推送,則表明廠商通道集成成功。
若 vivo 未上架,推送測試時需要在 vivo 推送平台添加測試設備,並且只能通過 API 指定推送參數 push_mode 進行下發。
"options": {
"classification": 1,
"third_party_channel": {
"vivo": {
"pushMode": 1, //可選,2020/09/21 新增,對應 vivo 的 pushMode 字段,值為int 類型,值分別是:“0”表示正式推送;“1”表示測試推送,不填默認為0
"distribution_new": "pns_mtpush"
}
}
}
OPPO 通道集成指南
配置 mavenCentral 支持
在 Project 根目錄的主 gradle 中配置 mavenCentral 支持。(新建 project 默認配置就支持)
buildscript {
repositories {
mavenCentral()
}
}
allprojects {
repositories {
mavenCentral()
}
}
配置依賴
在應用 module 的 gradle 中 dependencies 節點添加如下代碼:
dependencies{
//廠商版本和 AppPush SDK 版本保持一致
implementation 'com.engagelab.plugin:oppo:5.x.x'
implementation 'com.engagelab.plugin:oppo_th_push:5.x.x'
//OPPO需要以下依賴都需要添加
implementation 'com.google.code.gson:gson:2.8.9'
implementation 'commons-codec:commons-codec:1.13'
implementation 'androidx.annotation:annotation:1.1.0'
}
配置參數
在應用 module 的 gradle 中 defaultConfig 節點添加如下代碼:
OPPO 的參數需要添加前綴 “OP-”。
manifestPlaceholders=[
OPPO_APPKEY : "OP-您的应用对应的OPPO的APPKEY", // OPPO平台注册的appkey
OPPO_APPID : "OP-您的应用对应的OPPO的APPID", // OPPO平台注册的appid
OPPO_APPSECRET: "OP-您的应用对应的OPPO的APPSECRET"//OPPO平台注册的appsecret
]
配置代碼混淆
如果使用了 proguard,為了防止誤報的 warning 導致無法成功編譯,需要在配置文件中加入以下內容:
-dontwarn com.coloros.mcsdk.**
-keep class com.coloros.mcsdk.** { *; }
-dontwarn com.heytap.**
-keep class com.heytap.** { *; }
-dontwarn com.mcs.**
-keep class com.mcs.** { *; }
集成結果判斷
若集成成功,日誌顯示如下:
D [MTOppoBusiness] support oppo push
D [MTOppoBusiness] onTokenSuccess:get token is OnePlus_CN_0e3c2f966c9d01d4e2423cbc9e7598b6
D [MTPlatformBusiness] onPlatformTokenSuccess, rid:5, platformToken:
{
platform=4,
token=OnePlus_CN_0e3c2f966c9d01d4e2423cbc9e7598b6
region=NULL
isUserSettings=false
}
OPPO 通道測試方法
1.進入【EngageLab控制台】-【AppPush】-【基礎設置】-【集成設置】頁面,填寫參數:AppKey、AppID、AppSecret、MasterSecret,並點擊“保存”。
2.殺死 App 進程後進行推送,如果能夠收到推送,則表明廠商通道集成成功。
若應用未上架,需要在 OPPO 開放平台申請推送測試權限,每個應用每天可以推送1000條公信通道消息。
FCM 通道集成指南
配置 mavenCentral 支持
在 Project 根目錄的主 gradle 中配置 mavenCentral 支持和 google-services 依賴。
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.google.gms:google-services:4.3.15'
}
}
allprojects {
repositories {
mavenCentral()
maven { url "https://maven.google.com" }
}
}
添加 FCM 插件
在應用 module 的 build.gradle 文件底部添加 apply plugin 代碼行,以啟用 gradle 插件:
apply plugin: 'com.google.gms.google-services'
配置依賴
在應用 module 的 gradle 中 dependencies 節點添加如下代碼:
dependencies {
//廠商版本和 AppPush SDK 版本保持一致
implementation 'com.engagelab.plugin:google:5.x.x'
implementation 'com.google.firebase:firebase-messaging:23.2.0'
}
在應用 module 的 gradle 中 android 節點添加如下代碼:
android {
// google push need java 1.8
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
配置 google-services.json文件
參考 廠商通道參數申請指南 獲取 google-services.json 文件,並配置到 app 目錄下。
配置 FCM 通知圖標
在 AndroidManifest.xml 中增加如下配置來設置 FCM 通知圖標。
<meta-data android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/您要配置的通知圖標" />
集成結果判斷
若集成成功,日誌顯示如下:
D [MTGoogleBusiness] support google push
D [MTPlatformBusiness] onPlatformTokenSuccess, rid:5, platformToken:
{
platform=8,
token=dj793yH_RO6FqNyKImQJYV:APA91bExj3PSVv50pwtl83LXVeB_HKOCSkyB6qCE12TIwIRl-RKiqCfXjvCshcqVrqn_8htlNBa8_A_8ixq7YIxfrloxig2BryZPCkunyx_z2drz0L-C2K8R7J8Yrojs61WCsF-BZj8h
region=NULL
isUserSettings=false
}
FCM 通道測試方法
1.測試前置條件
- 手機系統有 GooglePlay 服務且版本不低於17.3.4。
- 測試需要掛海外節點的VPN,手機網絡可以正常訪問谷歌。
- 若使用國內手機測試,只能退到後台測試,不能關閉後台,國內廠商對系統做了調整,關後台會殺進程。
2.進入【EngageLab控制台】-【AppPush】-【基礎設置】-【集成設置】頁面,填寫參數:App Secret,並點擊“保存”。
3.若在國內測試,需要在初始化之後設置國家碼。
public class ExampleApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
MTCorePrivatesApi.configDebugMode(this, true);
// 設置國家碼 -- 正式環境請不要設置
MTGlobal.setCountryCode("US");
// 初始化
MTPushPrivatesApi.init(this);
}
}
4.在AppPush後台查看推送的記錄是 FCM 通道還是Engagelab通道。
榮耀通道集成指南
配置 mavenCentral 支持
在 Project 根目錄的主 gradle 中配置 mavenCentral 支持。(新建 project 默認配置就支持)
buildscript {
repositories {
...
mavenCentral()
...
}
}
allprojets {
repositories {
...
mavenCentral()
...
}
}
配置參數和依賴
在項目 module 的 build.gradle 中添加如下代碼:
defaultConfig {
...
manifestPlaceholders = [
...
HONOR_APPID : "您的應用對應的Honor的APP ID", // Honor平台注册的APP ID
...
]
...
}
dependencies {
...
//廠商版本和 AppPush SDK 版本保持一致
implementation 'com.engagelab.plugin:honor:5.x.x'
implementation 'com.engagelab.plugin:honor_th_push:5.x.x'
...
}
配置簽名證書
在 build.gradle 中配置在榮耀後台添加的指紋證書對應的簽名。
- 榮耀服務必須要求 app 簽名才能註冊成功。
- 可以在終端采用 keytool -list -v -keystore <簽名文件的絕對路徑> 獲取對應的指紋證書。
- 如果沒有簽名文件或密鑰口令,也可以在終端采用 keytool -list -printcert -jarfile < Apk 文件的絕對路徑> 獲取對應的指紋證書。
集成結果判斷
若集成成功,日誌顯示如下:
D [MTHonorBusiness] support honor push
D [MTHonorBusiness] onTokenSuccess:get token is s18069ps301291893q1ssro2o40s1630-n262n542r9669q62o83s390306179rro-775875632-654-6105326555582-PA-0052993947080949113-5
D [MTPlatformBusiness] onPlatformTokenSuccess, rid:5, platformToken:
{
platform=7,
token=s18069ps301291893q1ssro2o40s1630-n262n542r9669q62o83s390306179rro-775875632-654-6105326555582-PA-0052993947080949113-5
region=NULL
isUserSettings=false
}
配置代碼混淆
如果使用了 proguard,為了防止誤報的 warning 導致無法成功編譯,需要在配置文件中加入以下內容:
-ignorewarnings
-keepattributes *Annotation*
-keepattributes Exceptions
-keepattributes InnerClasses
-keepattributes Signature
-keepattributes SourceFile,LineNumberTable
-keep class com.hihonor.push.**{*;}
榮耀通道測試方法
1.進入【EngageLab控制台】-【AppPush】-【基礎設置】-【集成設置】頁面,填寫參數:App ID、Client ID、Client Secrect、App Secret,並點擊“保存”。
2.殺死 App 進程後進行推送,如果能夠收到推送,則表明廠商通道集成成功。
如何不集成廠商SDK,但仍使用Engagelab推送廠商消息
/**
* 上報廠商通道通知到達
*
* 走http/https上報
*
* @param context 不為空
* @param messageId Engagelab消息id,不為空
* @param platform 廠商,取值範圍(1:mi、2:huawei、3:meizu、4:oppo、5:vivo、8:google)
* @param platformMessageId 廠商消息id,可為空
*/
public static void reportNotificationArrived(Context context, String messageId, byte platform, String platformMessageId)
/**
* 上報廠商通道通知點擊
*
* 走http/https上報
*
* @param context 不為空
* @param messageId Engagelab消息id,不為空
* @param platform 廠商,取值範圍(1:mi、2:huawei、3:meizu、4:oppo、5:vivo、7:honor、8:google)
* @param platformMessageId 廠商消息id,可為空
*/
public static void reportNotificationClicked(Context context, String messageId, byte platform, String platformMessageId)
/**
* 上報廠商通道通知刪除
*
* 走http/https上報
*
* @param context 不為空
* @param messageId Engagelab消息id,不為空
* @param platform 廠商,取值範圍(1:mi、2:huawei、3:meizu、4:oppo、5:vivo、7:honor、8:google)
* @param platformMessageId 廠商消息id,可為空
*/
public static void reportNotificationDeleted(Context context, String messageId, byte platform, String platformMessageId)
/**
* 上報廠商通道通知打開
*
* 走http/https上報
*
* @param context 不為空
* @param messageId Engagelab消息id,不為空
* @param platform 廠商,取值範圍(1:mi、2:huawei、3:meizu、4:oppo、5:vivo、7:honor、8:google)
* @param platformMessageId 廠商消息id,可為空
*/
public static void reportNotificationOpened(Context context, String messageId, byte platform, String platformMessageId)
/**
* 上傳廠商token
*
* 需要在Engagelab長連接建立成功後再調用,否則無效。MTCommonReceiver.onConnectStatus回調結果為true時為長連接建立成功。
*
* 走tcp上傳
*
* @param context 不為空
* @param platform 廠商,取值範圍(1:mi、2:huawei、3:meizu、4:oppo、5:vivo、7:honor、8:google)
* @param token 廠商返回的token,不為空
*/
public static void uploadPlatformToken(Context context, byte platform, String token)