统一存储常见问题

本文将 iOS 常见问题及解决方法整理如下:

如何设置统一存储用户态?

解答:接入 mPaaS 的应用会使用自己的账号体系,如果需要使用统一存储来管理用户态数据,请第一时间通知统一存储,让统一存储进行用户数据库的切换,再通知其它业务层。

[[APDataCenter defaultDataCenter] setCurrentUserId:userId];

当用户登出时,可以不调用 setCurrentUserId 方法,统一存储会继续打开上一个用户的数据库,不会产生影响。

如何设置自己的默认加密 key?

解答:统一存储提供默认的加密方法,密钥会使用 mPaasInit 方法传入的 appKey 来自动生成,建议接入 mPaaS 的应用使用自己的密钥。

实现 mPaasAppInterface 接口的下列方法,将密钥以 NSData 的方式传给统一存储。

#pragma mark 统一存储

/**
 *  如果实现这个方法,要把统一存储默认使用的加密 key 返回,32 字节。这个 key 应用可以使用无线保镖管理,也可以自己加密混淆后写在客户端。
 *  如果不实现也可以,统一存储会使用 mPaas 和 appKey 计算出的一个结果做为加密 key,安全性也足够了。
 *
 *  @return 32 字节的 key,放在 NSData 里
 */
- (NSData*)appDataCenterDefaultCryptKey;

建议应用生成自己的 32 字节密钥,并转成 Base64 字符串保存在无线保镖中,在此方法里通过无线保镖的静态接口取出这个字符串,并反解成 NSData。

统一存储是线程安全的吗?

解答:是的,统一存储的数据存储接口都考虑了线程安全性问题,可以在任意线程进行调用。

如何解决与百度地图 SDK 的冲突?

描述:当与某一版本的百度地图 SDK 集成时,可能出现如下 crash。

baidu-ap

解答:您需要在 App 初始化时进行如下设置(10.1.32 及以上版本支持)。

 #import <MPDataCenter/APDataCenter.h>
// App 初始化方法中设置
     APDataCenter.compatibility = YES;

archiveObject 是如何存储和读取变量的?

解答:请参考以下代码:

  • 对象持久化存储:
    MPCodingData *obj = [MPCodingData new];
    obj.name = @"Amelia";:
    obj.age = 1;
    [APUserPreferences archiveObject:obj forKey:@"archObjKey" business:dataBusiness];

统一存储中- 读取变量:

MPCodingData *encodeObj = [APUserPreferences objectForKey:@"archObjKey" business:dataBusiness];