本文介紹如何以 Java SDK 的方式在服務端接入資料同步服務。
引入 Jar 包
完成 Maven 配置後,在主控 pom.xml 檔案中引入如下依賴:
對於非金融區使用者,訊息推送 V2.0 SDK 最新版本為 5.0.2;對於金融區使用者,訊息推送 V2.0 SDK 最新版本為 2.1.11。
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>mpaas20201028</artifactId>
<version>5.0.1</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>tea-openapi</artifactId>
<version>0.3.6</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 系統配置方法
建立環境變數,添加環境變數 MPAAS_AK_ENV 和 MPAAS_SK_ENV,並寫入已準備好的 AccessKey ID 和 AccessKey Secret。
重啟 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 訊息體過長 | 檢查 payload 屬性參數長度是否超過限制。 |
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.alibaba.fastjson.JSON;
import com.aliyun.mpaas20201028.Client;
import com.aliyun.mpaas20201028.models.CreateOpenSingleDataRequest;
import com.aliyun.mpaas20201028.models.CreateOpenSingleDataResponse;
import com.aliyun.teaopenapi.models.Config;
public static void main(String[] args) throws Exception {
// 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
// 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
// 本樣本以將AccessKey ID和AccessKey Secret儲存在環境變數為例說明。您也可以根據業務需要,儲存到設定檔裡。
Config config = new Config();
// 必填,您的 AccessKey ID
config.setAccessKeyId(System.getenv("MPAAS_AK_ENV"));
// 必填,您的 AccessKey Secret
config.setAccessKeySecret(System.getenv("MPAAS_SK_ENV"));
// mPaaS 的 REGION_ID 和 Endpoint,以杭州非金為例
config.setRegionId("cn-hangzhou");
config.setEndpoint("mpaas.cn-hangzhou.aliyuncs.com");
Client client = new Client(config);
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));
CreateOpenSingleDataResponse openSingleData = client.createOpenSingleData(singleRequest);
System.out.println("response==>"+JSON.toJSONString(openSingleData));
}請確保您的 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 訊息體過長 | 檢查 payload 屬性參數長度是否超過限制。 |
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.alibaba.fastjson.JSON;
import com.aliyun.mpaas20201028.Client;
import com.aliyun.mpaas20201028.models.CreateOpenGlobalDataRequest;
import com.aliyun.mpaas20201028.models.CreateOpenGlobalDataResponse;
import com.aliyun.teaopenapi.models.Config;
public static void main(String[] args) throws Exception {
// 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
// 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
// 本樣本以將AccessKey ID和AccessKey Secret儲存在環境變數為例說明。您也可以根據業務需要,儲存到設定檔裡。
Config config = new Config();
// 必填,您的 AccessKey ID
config.setAccessKeyId(System.getenv("MPAAS_AK_ENV"));
// 必填,您的 AccessKey Secret
config.setAccessKeySecret(System.getenv("MPAAS_SK_ENV"));
// mPaaS 的 REGION_ID 和 Endpoint,以杭州非金為例
config.setRegionId("cn-hangzhou");
config.setEndpoint("mpaas.cn-hangzhou.aliyuncs.com");
Client client = new Client(config);
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));
CreateOpenGlobalDataResponse openGlobalData = client.createOpenGlobalData(globalRequest);
System.out.println("response==>"+JSON.toJSONString(openGlobalData));
}請確保您的 AccessKey 擁有 AliyunMPAASFullAccess 許可權,詳情請參考對 RAM 帳號進行應用層級的存取控制。