全部產品
Search
文件中心

Mobile Platform as a Service:使用 SDK

更新時間:Jul 13, 2024

添加移動同步 SDK 後,在使用 SDK 前需要進行工程配置。

說明

自 2020 年 6 月 28 日起,mPaaS 停止維護 10.1.32 基準。請使用 10.1.6810.1.60 系列基準。可以參考 mPaaS 10.1.68 升級指南mPaaS 10.1.60 升級指南 進行基準版本升級。

前置條件

確認您所使用的 SDK 版本 ≥ 10.1.32。

說明

可以在 mpaas_sdk.config 檔案中查看到當前使用的 SDK 版本。

iOS查看SDK版本

配置工程

確保工程中添加了 meta.config 檔案,該檔案包含 Sync 服務地址、連接埠等配置資訊:

  • 若您使用最新版外掛程式添加了 Sync SDK,那麼該檔案會自動產生。

  • 如果您的工程中沒有 meta.config 檔案,

    您可以前往 控制台 > 代碼管理 > 代碼配置 下載 .config 設定檔,重新命名為 meta.config 後,添加到工程中。

    meta_config

舊版本升級注意事項

10.1.32 版本之後不再需要添加 DTSyncInterface 類的 Category 檔案,中介層會實現封裝從 meta.config 中讀取,升級版本後請檢查工程中是否存在舊版本配置,如果有請移除。下面為新版本應移除的 DTSyncInterface 類的 Category 檔案。

配置工程

程式碼範例

為實現監聽同步業務的邏輯,您需要建立一個類,最好是常駐記憶體的服務來一直監聽 Sync 訊息。在下面的樣本中,建立了一個 MySyncService 類來監聽同步業務的邏輯。

在監聽同步業務之前,需要先定義好具體的同步業務的業務標識名稱(對應資料同步控制台上的同步組態識別),該參數就是作為使用者的您和服務提供者聯絡的紐帶。在以下樣本中,業務標識名稱為 SYNC-TRADE-DATA

#import <MPMssAdapter/MPSyncInterface.h>
#define SYNC_BIZ_NAME @"SYNC-TRADE-DATA"

@implementation MySyncService
+ (instancetype)sharedInstance
{
    static MySyncService *bizService;

    static dispatch_once_t llSOnceToken;

    dispatch_once(&llSOnceToken, ^{

        bizService = [[self alloc] init];
    });
    return bizService;
}

-(instancetype)init
{
    self = [super init];
    if (self) {
        [MPSyncInterface initSync];
        BOOL registerSingleDeviceSync = [MPSyncInterface registerSyncBizWithName:SYNC_BIZ_NAME syncObserver:self selector:@selector(revSyncBizNotification:)];
        [MPSyncInterface bindUserWithSessionId:@"SESSION_DEMO"]; // 此處的 User 對應控制台下發命令時,所需要填寫的 userId, 需要和 MPaaSInterface 的 userId 函數中配置的值相對應;sessionId 是用戶端攜帶的授權 token,userId 和 sessionId 都是使用者登入系統返回的資料,當 userId 和 sessionId 變化時,需要重新調用此函數才能保證長串連的建立正確。
    }
    return self;
}

-(void)revSyncBizNotification:(NSNotification*)notify
{
    NSDictionary *userInfo = notify.userInfo;
    dispatch_async(dispatch_get_main_queue(), ^{
        //業務資料處理
        [MySyncService handleSyncData:userInfo];
        //回調 SyncSDK,表示業務資料已經處理
        [MPSyncInterface responseMessageNotify:userInfo];
    });
}

+(void)handleSyncData:(NSDictionary *)userInfo
{
    NSString * stringOp = userInfo[@"op"];
    NSArray *op = [NSJSONSerialization JSONObjectWithData:[stringOp dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:nil];
    if([op isKindOfClass:[NSArray class]]){
        [op enumerateObjectsUsingBlock:^(NSDictionary * item, NSUInteger idx, BOOL *stop) {
            if([item isKindOfClass:[NSDictionary class]]){
                NSString * plString = item[@"pl"];//業務資料 payload
                if(item[@"isB"]){
                    NSData *dataPl = [[NSData alloc] initWithBase64EncodedString:plString options:kNilOptions];
                    NSString *pl = [[NSString alloc] initWithData:dataPl encoding:NSUTF8StringEncoding];
                    NSLog(@"biz payload data:%@,string:%@",dataPl,pl);
                }else{
                     NSLog(@"biz payload:%@",plString);
                }
            }
        }];
    }
}

-(void)dealloc
{
    BOOL unRegisterSingleDeviceSync = [MPSyncInterface unRegisterSyncBizWithName:SYNC_BIZ_NAME syncObserver:[MySyncService sharedInstance]];
    [MPSyncInterface removeSyncNotificationObserver:self];
}
@end