添加移动同步 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