全部產品
Search
文件中心

Mobile Platform as a Service:Java SDK 接入

更新時間:Jul 13, 2024

本文介紹如何以 Java SDK 的方式在服務端接入資料同步服務。

引入 Jar 包

完成 Maven 配置後,在主控 pom.xml 檔案中引入如下依賴:

說明

對於非金區(非金融區)使用者,訊息推送 SDK 最新版本為 3.0.10;對於金區(金融區)使用者,訊息推送 SDK 最新版本為 2.1.9。

<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>aliyun-java-sdk-mpaas</artifactId>
    <version>3.0.10</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
  <artifactId>aliyun-java-sdk-core</artifactId>
  <optional>true</optional>
  <version>[4.3.2,5.0.0)</version>
</dependency>

環境變數配置

配置環境變數 MPAAS_AK_ENV 和 MPAAS_SK_ENV。

  • Linux 和 macOS 系統配置方法執行以下命令:

    export MPAAS_AK_ENV=<access_key_id>
    export MPAAS_SK_ENV=<access_key_secret>
    說明

    access_key_id 替換為已準備好的 AccessKey ID,access_key_secret 替換為 AccessKey Secret。

  • Windows 系統配置方法

    1. 建立環境變數,添加環境變數 MPAAS_AK_ENV MPAAS_SK_ENV,並寫入已準備好的 AccessKey ID 和 AccessKey Secret。

    2. 重啟 Windows 系統。

介面說明

單資料同步介面

單資料同步介面是指同步資料到指定的使用者或者裝置。

參數說明

業務參數資訊如下:

名稱

類型

是否必須

樣本

描述

appId

String

ONEX570DA892117

從 mPaaS 控制台擷取的 App ID。

workspaceId

String

PROD

從 mPaaS 控制台擷取的 Workspace ID。

bizType

String

UCHAT

在 mPaaS 控制台配置的同步標識,參見 控制台簡介

linkToken

String

推送目標 ID,如果是基於使用者推送,填入使用者識別碼。如果同步配置是基於裝置推送,填入裝置識別碼。

payload

String

testtestatapalayd

實際業務訊息體,自訂格式,長度不超過 4096。

thirdMsgId

String

1760339273

一次資料同步請求 ID。同一個同步標識內唯一,ID 重複的請求將會被忽略。須小於 100 Byte。

osType

String

iOS/Android

按手機平台過濾進行推送。預設情況下不傳遞參數,即不過濾,iOS 與 Android 平台均會推送。

appMinVersion

String

0.0.0.0

推送資料過濾用戶端版本,僅向大於等於該版本號碼的用戶端發送推送。

appMaxVersion

String

100.100.100.100

推送資料過濾用戶端版本,僅向小於等於該版本號碼的用戶端發送推送。

validTimeStart

String

1584448493913

目前時間大於等於 validTimeStart 時才會推送。

validTimeEnd

String

1584452093913

目前時間小於等於 validTimeEnd 時才會推送。

單條資料同步結果碼

結果碼

描述

解決方案

SUCCESS

成功

成功

ARGS_IS_NULL

必要參數為空白

檢查是否已完整按照非空邏輯傳遞參數。

PAYLOAD_LONG

PAYLOAD 訊息體過長

檢查 playload 屬性參數長度是否超過限制。

THIRD_MSG_ID_LONG

三方業務 ID 過長

檢查三方業務 ID 長度是否超過限制。

BIZ_NOT_ONLINE

業務情境同步標識未提交上線

前往 mPaaS 控制台 > 移動同步 檢查 bizType 對應同步標識已配置並提交上線。

THIRD_MSG_ID_IS_NULL

三方業務 ID 為空白

檢查三方業務 ID 是否為空白。

SYSTEM_ERROR

系統異常

聯絡支援人員確認系統異常原因。

INVALID_TENANT_ID

無效租戶 ID

檢查 appId 是否正確,是否有許可權使用。

程式碼範例

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.mpaas.model.v20201028.CreateOpenSingleDataRequest;
import com.aliyuncs.mpaas.model.v20201028.CreateOpenSingleDataResponse;
import com.aliyuncs.profile.DefaultProfile;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

public class MsyncPopDemo {

    public static void main(String[] args) {
        //請求資訊,除 AccessKey ID  AccessKey Secret 外固定即可
        DefaultProfile.addEndpoint("cn-hangzhou", "mpaas", "mpaas.cn-hangzhou.aliyuncs.com");

        // 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
        // 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
        // 本樣本以將AccessKey ID和AccessKey Secret儲存在環境變數為例說明。您也可以根據業務需要,儲存到設定檔裡。
        String accessKeyId = System.getenv("MPAAS_AK_ENV");
        String accessKeySecret = System.getenv("MPAAS_SK_ENV");

        // 建立 DefaultAcsClient 執行個體並初始化
        DefaultProfile profile = DefaultProfile.getProfile(
                "cn-hangzhou", // 地區 ID
                accessKeyId,   // RAM 帳號的 AccessKey ID
                accessKeySecret);  // RAM 帳號的 AccessKey Secret
        IAcsClient client = new DefaultAcsClient(profile);

        CreateOpenSingleDataRequest singleRequest = constructSingleRequest();

        CreateOpenSingleDataResponse singleDataResponse;
        try {
            singleDataResponse = client.getAcsResponse(singleRequest);
            System.out.println("singleDataResponse:" +
                    ToStringBuilder
                            .reflectionToString(singleDataResponse, ToStringStyle.SHORT_PREFIX_STYLE));

        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
    }

    private static CreateOpenSingleDataRequest constructSingleRequest() {

        CreateOpenSingleDataRequest singleRequest
                = new CreateOpenSingleDataRequest();
        //*************必要屬性*************/

        //mPaaS 控制台擷取的 APPID
        singleRequest.setAppId("xxxxxxx");
        //mPaaS 控制台擷取的 WorkspaceId
        singleRequest.setWorkspaceId("xxxxxxxx");
        //mPaaS 控制台移動同步中配置的同步標識
        singleRequest.setBizType("TEST-SYNC");
        //需要推送的使用者識別碼 或者裝置識別碼(UTDID)
        singleRequest.setLinkToken("testUserId");
        //實際業務訊息體,自訂長度不超過 4096
        singleRequest.setPayload("testPayload");
        //業務 ID,保證唯一,長度不超過 100
        singleRequest.setThirdMsgId("test_third_msg_id_" + System.currentTimeMillis());

        //************非必要屬性*************/

        //推送目標裝置的作業系統 iOS 或 Android 為空白時不限制作業系統
        singleRequest.setOsType("IOS");
        //持的最小用戶端版本號碼,如:8.6.0.0.9999 ,可為空白,為空白將不限制最小版本號碼
        singleRequest.setAppMinVersion("0.0.0.0");
        //支援的最大用戶端版本號碼,如:9.0.0.0.9999,可為空白,為空白將不限制最大版本號碼
        singleRequest.setAppMaxVersion("100.100.100.100");
        //有效期間開始,可為空白,為空白時不限制有效起始時間
        singleRequest.setValidTimeStart(System.currentTimeMillis());
        //有效期間結束,可為空白,為空白時不限制有效結束時間 最長有效期間為 30 天
        singleRequest.setValidTimeEnd(System.currentTimeMillis() + (1000 * 3600));

        return singleRequest;

    }
重要

請確保您的 AccessKey 擁有 AliyunMPAASFullAccess 許可權,詳情請參考對 RAM 帳號進行應用層級的存取控制

全域(網)資料同步介面

全域(網)資料同步是指將資料同步到所有裝置。

參數說明

業務參數資訊如下:

名稱

類型

是否必須

樣本

描述

appId

String

ONEX570DA892117

從 mPaaS 控制台擷取的 App ID。

workspaceId

String

PROD

從 mPaaS 控制台擷取的 Workspace ID。

bizType

String

UCHAT

在 mPaaS 控制台配置的同步標識,參見 控制台簡介

payload

String

testtestatapalayd

實際業務訊息體,自訂格式,長度不超過 4096。

thirdMsgId

String

1760339273

一次資料同步請求 ID。同一個同步標識內唯一,ID 重複的請求將會被忽略。須小於 100 位元組。

osType

String

IOS/ANDROID

按手機平台進行推送。預設情況下不傳遞參數,即不過濾,iOS 和 Android 平台均會推送。

appMinVersion

String

0.0.0.0

推送資料過濾用戶端版本,僅向大於等於該版本號碼的用戶端發送推送。

appMaxVersion

String

100.100.100.100

推送資料過濾用戶端版本,僅向小於等於該版本號碼的用戶端發送推送。

validTimeStart

String

1584448493913

目前時間大於等於 validTimeStart 時才會推送。

validTimeEnd

String

1584452093913

目前時間小於等於 validTimeEnd 時才會推送。

maxUid

Long

99

同步範圍區間最大 Uid(使用者識別碼 或裝置識別碼 倒數第 2、3 位),如果非字母,需轉化為 ASCII 碼。

minUid

Long

00

同步範圍區間最小 Uid(使用者識別碼 或裝置識別碼 倒數第 2、3 位),如果非字母,需轉化為 ASCII 碼。

uids

String

01,02,99

優先順序高於 maxUid 及 minUid。離散的使用者識別碼 段(使用者識別碼 或裝置識別碼 倒數第 2、3 位),如果非字母,需轉化為 ASCII 碼。

全域(網)資料同步結果碼

結果碼

簡述

解決方案

SUCCESS

成功

成功

ARGS_IS_NULL

必要參數為空白

檢查是否已完整按照非空邏輯傳遞參數。

PAYLOAD_LONG

PAYLOAD 訊息體過長

檢查 playload 屬性參數長度是否超過限制。

THIRD_MSG_ID_LONG

三方業務 ID 過長

檢查三方業務 ID 長度是否超過限制。

BIZ_NOT_ONLINE

業務情境同步標識未提交上線

前往 mPaaS 控制台 > 資料同步 檢查 bizType 對應同步標識已配置並提交上線。

THIRD_MSG_ID_IS_NULL

三方業務 ID 為空白

檢查三方業務 ID 是否為空白。

SYSTEM_ERROR

系統異常

聯絡支援人員確認系統異常原因。

NOT_SUPPORT_GLOBAL

不支援全域業務同步標識調用

根據 BizType,前往 mPaaS 控制台 > 資料同步 檢查同步標識是否為指定使用者或者指定裝置推送類型。

INVALID_TENANT_ID

無效租戶 ID

檢查 appId 是否正確,是否有許可權使用。

程式碼範例

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.mpaas.model.v20201028.CreateOpenGlobalDataRequest;
import com.aliyuncs.mpaas.model.v20201028.CreateOpenGlobalDataResponse;
import com.aliyuncs.profile.DefaultProfile;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

public class MsyncPopDemo {

    public static void main(String[] args) {
        //請求資訊,除 AccessKey ID  AccessKey Secret 外固定即可
        DefaultProfile.addEndpoint("cn-hangzhou", "mpaas", "mpaas.cn-hangzhou.aliyuncs.com");

        // 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
        // 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
        // 本樣本以將AccessKey ID和AccessKey Secret儲存在環境變數為例說明。您也可以根據業務需要,儲存到設定檔裡。
        String accessKeyId = System.getenv("MPAAS_AK_ENV");
        String accessKeySecret = System.getenv("MPAAS_SK_ENV");

        // 建立 DefaultAcsClient 執行個體並初始化
        DefaultProfile profile = DefaultProfile.getProfile(
                "cn-hangzhou", // 地區 ID
                accessKeyId,   // RAM 帳號的 AccessKey ID
                accessKeySecret);  // RAM 帳號的 AccessKey Secret
        IAcsClient client = new DefaultAcsClient(profile);

        CreateOpenGlobalDataRequest globalDataRequest = constuctGlobelRequest();

        CreateOpenGlobalDataResponse globalDataResponse;
        try {
            globalDataResponse = client.getAcsResponse(globalDataRequest);
            System.out.println("globalDataResponse:" +
                    ToStringBuilder
                            .reflectionToString(globalDataResponse, ToStringStyle.SHORT_PREFIX_STYLE));

        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
    }

    private static CreateOpenGlobalDataRequest constuctGlobelRequest() {

        CreateOpenGlobalDataRequest globalRequest
                = new CreateOpenGlobalDataRequest();

        //************必要屬性*************/
        //mPaaS 控制台擷取的 APPID
        globalRequest.setAppId("BE9C457161429");
        //mPaaS 控制台擷取的 WorkspaceId
        globalRequest.setWorkspaceId("sit");
        //mPaaS 控制台移動同步中配置的同步標識
        globalRequest.setBizType("test-global");
        //實際業務訊息體,自訂長度不超過 4096
        globalRequest.setPayload("testtestata");
        //業務 ID,保證唯一,長度不超過 100
        globalRequest.setThirdMsgId("test_third_msg_id_" + System.currentTimeMillis());

        //************非必要屬性*************/

        //推送目標裝置的作業系統 iOS 或 Android 為空白時不限制作業系統
        globalRequest.setOsType("IOS");
        //持的最小用戶端版本號碼,如:8.6.0.0.9999 ,可為空白 為空白將不限制最小版本號碼
        globalRequest.setAppMinVersion("0.0.0.0");
        //支援的最大用戶端版本號碼,如:9.0.0.0.9999,可為空白 為空白將不限制最大版本號碼

        globalRequest.setAppMaxVersion("100.100.100.100");
        //最大 Uid
        globalRequest.setMaxUid(Long.valueOf(99));
        //最小 Uid
        globalRequest.setMinUid(Long.valueOf(1));
        //需要推送的灰階 Uid 00~99,字串數組
        globalRequest.setUids("01,02,99");

        globalRequest.setValidTimeStart(System.currentTimeMillis());
        globalRequest.setValidTimeEnd(System.currentTimeMillis() + (1000 * 3600));

        return globalRequest;

    }

}
重要

請確保您的 AccessKey 擁有 AliyunMPAASFullAccess 許可權,詳情請參考對 RAM 帳號進行應用層級的存取控制