添加移動同步 SDK 后,在使用 SDK 前需要進行工程配置。
說明 自 2020 年 6 月 28 日起,mPaaS 停止維護 10.1.32 基線。請使用 10.1.68 或 10.1.60 系列基線??梢詤⒖?mPaaS 10.1.68 升級指南 或 mPaaS 10.1.60 升級指南 進行基線版本升級。 |
前置條件
確認您所使用的 SDK 版本 ≥ 10.1.32。
可以在 mpaas_sdk.config
文件中查看到當前使用的 SDK 版本。
配置工程
確保工程中添加了 meta.config
文件,該文件包含 Sync 服務地址、端口等配置信息:
若您使用最新版插件添加了 Sync SDK,那么該文件會自動生成。
如果您的工程中沒有
meta.config
文件,您可以前往 控制臺 > 代碼管理 > 代碼配置 下載
.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