廠商通道集成指南

最新更新:2022-11-29

前提是已經集成 Engagelab 通道。

libs 導包和資源文件

  • 將 mt-sdk-platform-x.x.x.aar 導入 libs 目錄。
  • 在 res/drawable/ 下放好命名為 mtpush_notification_icon.png 的通知小圖標。如果沒配置,sdk 會取應用程式圖標,android 高版本會出現顯示異常問題。
  • 廠商通道參數申請及廠商文件獲取參考文檔 廠商通道參數申請指南
    • huawei 通道需要 agconnect-services.json 文件,配置在應用程式的 module 目錄下。
    • google 通道需要 google-services.json 文件,配置在應用程式的 module 目錄下。
  • meizu 通道獲取不到 token,嘗試在 gradle.properties 中添加 android.enableR8 = false 進行關閉 R8。

配置 build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories {google() mavenCentral() // huawei push need,不需要 huawei 通道,則删除 maven {url 'https://developer.huawei.com/repo/'} // oppo push need,不需要 oppo 通道,則删除 maven { url 'https://maven.columbus.heytapmobi.com/repository/releases/' credentials { username 'nexus' password 'c0b08da17e3ec36c3870fed674a0bcb36abc2e23' } } maven {url 'http://nexus.os.adc.com/nexus/content/groups/public'} } dependencies { classpath 'com.android.tools.build:gradle:4.1.0' // google push need,and google push need AndroidX,不需要 google 通道,則删除 // 請在 gradle.properties 中加入 android.useAndroidX=true classpath 'com.google.gms:google-services:4.3.8' // huawei push need,不需要 huawei 通道,則删除 classpath 'com.huawei.agconnect:agcp:1.6.0.300' } } allprojects { repositories {google() mavenCentral() // huawei push need,不需要 huawei 通道,則删除 maven {url 'https://developer.huawei.com/repo/'} // oppo push need,不需要 oppo 通道,則删除 maven { url 'https://maven.columbus.heytapmobi.com/repository/releases/' credentials { username 'nexus' password 'c0b08da17e3ec36c3870fed674a0bcb36abc2e23' } } maven {url 'http://nexus.os.adc.com/nexus/content/groups/public'} } }
          // Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
  repositories {google()
    mavenCentral()
    // huawei push need,不需要 huawei 通道,則删除
    maven {url 'https://developer.huawei.com/repo/'}
    // oppo push need,不需要 oppo 通道,則删除
    maven {
        url 'https://maven.columbus.heytapmobi.com/repository/releases/'
        credentials {
            username 'nexus'
            password 'c0b08da17e3ec36c3870fed674a0bcb36abc2e23'
        }
    }
      maven {url 'http://nexus.os.adc.com/nexus/content/groups/public'}
  }
  dependencies {
    classpath 'com.android.tools.build:gradle:4.1.0'
    // google push need,and google push need AndroidX,不需要 google 通道,則删除
    // 請在 gradle.properties 中加入 android.useAndroidX=true
    classpath 'com.google.gms:google-services:4.3.8'
    // huawei push need,不需要 huawei 通道,則删除
    classpath 'com.huawei.agconnect:agcp:1.6.0.300'
  }
}

allprojects {
  repositories {google()
    mavenCentral()
    // huawei push need,不需要 huawei 通道,則删除
    maven {url 'https://developer.huawei.com/repo/'}
    // oppo push need,不需要 oppo 通道,則删除
    maven {
        url 'https://maven.columbus.heytapmobi.com/repository/releases/'
        credentials {
            username 'nexus'
            password 'c0b08da17e3ec36c3870fed674a0bcb36abc2e23'
        }
    }
    maven {url 'http://nexus.os.adc.com/nexus/content/groups/public'}
  }
}

        
此代碼塊在浮窗中顯示
plugins { id 'com.android.application' // google push need,不需要 google 通道,則删除 id 'com.google.gms.google-services' // huawei push need,不需要 huawei 通道,則删除 id 'com.huawei.agconnect' } android { ...... // google/huawei push need,it needs to be the same as the one on google/huawei console. signingConfigs { debug {storeFile file("android.keystore") storePassword "123456" keyAlias "keyAlias" keyPassword "123456" } release {storeFile file("android.keystore") storePassword "123456" keyAlias "keyAlias" keyPassword "123456" } } defaultConfig { // app packageName,需要與 Engagelab 控制台上的一樣 applicationId "com.engagelab.app" ...... manifestPlaceholders = [ // Engagelab appKey,需要與 Engagelab 控制台上的一樣,與 packageName 是一對一關係 ENGAGELAB_PRIVATES_APPKEY : "1c4b749a17f6aca33960a560", // Engagelab appChannel,用於渠道統計 ENGAGELAB_PRIVATES_CHANNEL: "developer", // Engagelab process,Engagelabsdk 工作所在的進程,注意: 開頭 ENGAGELAB_PRIVATES_PROCESS: ":remote", // mi client 配置,需要與小米控制台上的一樣,還需要在 Engagelab 控制台配置 server 配置 XIAOMI_APPID : "MI-2882303761519903247", XIAOMI_APPKEY : "MI-5511990317247", // mi global client 配置,需要與小米控制台上的一樣,還需要在 Engagelab 控制台配置 server 配置 XIAOMI_GLOBAL_APPID : "MI-2882303761520426107", XIAOMI_GLOBAL_APPKEY : "MI-5152042627107", // mz client 配置,需要與魅族控制台上的一樣,還需要在 Engagelab 控制台配置 server 配置 MEIZU_APPID : "MZ-141044", MEIZU_APPKEY : "MZ-db66ddbf3caa49f5a3d61281b62f9172", // oppo client 配置,需要與 oppo 控制台上的一樣,還需要在 Engagelab 控制台配置 server 配置 OPPO_APPID : "OP-30527975", OPPO_APPKEY : "OP-ccaa93f426af4b05b529bb4e2a3b368b", OPPO_APPSECRET : "OP-6da40dca7fd64279a6837ec899f2151d", // vivo client 配置,需要與 vivo 控制台上的一樣,還需要在 Engagelab 控制台配置 server 配置 VIVO_APPID : "105481245", VIVO_APPKEY : "8ce86005c2bc8a4db5178210b51eeb8a" ] } // google push need java 1.8,不需要 google 通道,則删除 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { // 引用 libs/aar 包 implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs') // google push need,不需要 google 通道,則刪除 // implementation 'com.google.firebase:firebase-messaging:23.0.8' // huawei push need,不需要 huawei 通道,則刪除 //implementation 'com.huawei.hms:push:6.5.0.300' //oppo 以下依賴都需要添加,不需要 oppo 通道,則刪除 // implementation 'com.google.code.gson:gson:2.6.2' // implementation 'commons-codec:commons-codec:1.6' // implementation 'androidx.annotation:annotation:1.1.0' }
          plugins {
    id 'com.android.application'
    // google push need,不需要 google 通道,則删除
    id 'com.google.gms.google-services'
    // huawei push need,不需要 huawei 通道,則删除
    id 'com.huawei.agconnect'
}

android {
    ......
        
    // google/huawei push need,it needs to be the same as the one on google/huawei console.
    signingConfigs {
        debug {storeFile file("android.keystore")
            storePassword "123456"
            keyAlias "keyAlias"
            keyPassword "123456"
        }
        release {storeFile file("android.keystore")
            storePassword "123456"
            keyAlias "keyAlias"
            keyPassword "123456"
        }
    }
        
defaultConfig {
        // app packageName,需要與 Engagelab 控制台上的一樣
        applicationId "com.engagelab.app"
                ......

        manifestPlaceholders = [
                // Engagelab appKey,需要與 Engagelab 控制台上的一樣,與 packageName 是一對一關係
                ENGAGELAB_PRIVATES_APPKEY : "1c4b749a17f6aca33960a560",
                // Engagelab appChannel,用於渠道統計
                ENGAGELAB_PRIVATES_CHANNEL: "developer",
                // Engagelab process,Engagelabsdk 工作所在的進程,注意: 開頭
                ENGAGELAB_PRIVATES_PROCESS: ":remote",
                // mi client 配置,需要與小米控制台上的一樣,還需要在 Engagelab 控制台配置 server 配置
                XIAOMI_APPID            : "MI-2882303761519903247",
                XIAOMI_APPKEY           : "MI-5511990317247",
                // mi global client 配置,需要與小米控制台上的一樣,還需要在 Engagelab 控制台配置 server 配置
                XIAOMI_GLOBAL_APPID            : "MI-2882303761520426107",
                XIAOMI_GLOBAL_APPKEY           : "MI-5152042627107",
                // mz client 配置,需要與魅族控制台上的一樣,還需要在 Engagelab 控制台配置 server 配置
                MEIZU_APPID             : "MZ-141044",
                MEIZU_APPKEY            : "MZ-db66ddbf3caa49f5a3d61281b62f9172",
                // oppo client 配置,需要與 oppo 控制台上的一樣,還需要在 Engagelab 控制台配置 server 配置
                OPPO_APPID              : "OP-30527975",
                OPPO_APPKEY             : "OP-ccaa93f426af4b05b529bb4e2a3b368b",
                OPPO_APPSECRET          : "OP-6da40dca7fd64279a6837ec899f2151d",
                // vivo client 配置,需要與 vivo 控制台上的一樣,還需要在 Engagelab 控制台配置 server 配置
                VIVO_APPID              : "105481245",
                VIVO_APPKEY             : "8ce86005c2bc8a4db5178210b51eeb8a"
        ]
    }
        
    // google push need java 1.8,不需要 google 通道,則删除
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

}

dependencies {
    // 引用 libs/aar 包
    implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')

    // google push need,不需要 google 通道,則刪除
    // implementation 'com.google.firebase:firebase-messaging:23.0.8'

    // huawei push need,不需要 huawei 通道,則刪除
    //implementation 'com.huawei.hms:push:6.5.0.300'
    
    
    //oppo 以下依賴都需要添加,不需要 oppo 通道,則刪除
    //    implementation 'com.google.code.gson:gson:2.6.2'
    //    implementation 'commons-codec:commons-codec:1.6'
    //    implementation 'androidx.annotation:annotation:1.1.0'

}

        
此代碼塊在浮窗中顯示

不導入 Engagelab 廠商 SDK

應用程式之前已經接入廠商的官方 SDK,不導入 mt-sdk-platform-x.x.x.aar,完成以下上報仍可以使用 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、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、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、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、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、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、8:google) * @param platformMessageId 廠商訊息 id,可為空 */ public static void reportNotificationOpened(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、8:google)
     * @param platformMessageId 廠商訊息 id,可為空
     */
    public static void reportNotificationOpened(Context context, String messageId, byte platform, String platformMessageId)

        
此代碼塊在浮窗中顯示

上傳廠商 token

/** * 上傳廠商 token * * 需要在 Engagelab 長連接建立成功後再調用,否則無效。 MTCommonReceiver.onConnectStatus 回調結果為 true 時為長連接建立成功。 * * 走 tcp 上傳 * * @param context 不為空 * @param platform 廠商,取值範圍(1:mi、2:huawei、3:meizu、4:oppo、5:vivo、8:google) * @param token 廠商返回的 token,不為空 * @param region 海外版小米和 oppo 需要設置region,根據使用地區等填如:“US” 等,非海外版的填 null */ public static void uploadPlatformToken(Context context, byte platform, String token, String region)
              /**
     * 上傳廠商 token
     *
     * 需要在 Engagelab 長連接建立成功後再調用,否則無效。 MTCommonReceiver.onConnectStatus 回調結果為 true 時為長連接建立成功。
     * 
     * 走 tcp 上傳
     *
     * @param context  不為空
     * @param platform 廠商,取值範圍(1:mi、2:huawei、3:meizu、4:oppo、5:vivo、8:google)
     * @param token    廠商返回的 token,不為空
     * @param region    海外版小米和 oppo 需要設置region,根據使用地區等填如:“US” 等,非海外版的填 null
     */
    public static void uploadPlatformToken(Context context, byte platform, String token, String region)

        
此代碼塊在浮窗中顯示
在文档中心打开