Skip to content

upgrade from objc sdk 12 to objc sdk 13

pzheng edited this page Jun 4, 2021 · 1 revision

从 objc-sdk 12 迁移到 objc-sdk 13

库命名

在 12 版本中,通过 CocoaPods 集成 objc-sdk 需要引入三个库:AVOSCloudAVOSCloudIMAVOSCloudLiveQuery

在 13 版本中,通过 CocoaPods 集成 objc-sdk 只需引入一个库 LeanCloudObjc 即可。

如果只需要存储等基础功能,可以通过 Subspecs 方式只引入 LeanCloudObjc/Foundation

新版中,LeanCloudObjc/Foundation 功能上等同于 AVOSCloudLeanCloudObjc/Realtime 功能上等同于 AVOSCloudIM + AVOSCloudLiveQuery

头文件

在 12 版本中,需引入的头文件如下:

#import <AVOSCloud/AVOSCloud.h>
#import <AVOSCloudIM/AVOSCloudIM.h>
#import <AVOSCloudLiveQuery/AVOSCloudLiveQuery.h>

在 13 版本中,需引入的头文件如下:

#import <LeanCloudObjc/Foundation.h>
// 如果只集成了 `LeanCloudObjc/Foundation`,则无需引入 `Realtime.h`
#import <LeanCloudObjc/Realtime.h>

命名空间

在 12 版本中,命名空间是 AV,例如:AVObjectAVUserAVQuery 等等。

在 13 版本中,命名空间变更为 LC,例如:LCObjectLCUserLCQuery 等等。

API

初始化应用

在 12 版本中,初始化应用的样例如下:

[AVOSCloud setAllLogsEnabled:true];
[AVOSCloud setApplicationId:@"id" clientKey:@"key" serverURLString:@"url"];

在 13 版本中,AVOSCloud 类被移除,新增 LCApplication 类,可通过 LCApplication 初始化应用,样例如下:

[LCApplication setAllLogsEnabled:true];
[LCApplication setApplicationId:@"id" clientKey:@"key" serverURLString:@"url"];

AVOSCloudLCApplication 替代。

即时通讯

创建会话

通过 LCIMClient 创建会话的方法,变动如下:

+ @interface LCIMConversationCreationOption : NSObject
+ @property (nonatomic, nullable) NSString *name;
+ @property (nonatomic, nullable) NSDictionary *attributes;
+ @property (nonatomic) BOOL isUnique;
+ @property (nonatomic) NSUInteger timeToLive;
+ @end

@interface LCIMClient : NSObject

- - (void)createConversationWithName:(NSString * _Nullable)name clientIds:(NSArray<NSString *> *)clientIds callback:(void (^)(AVIMConversation * _Nullable conversation, NSError * _Nullable error))callback;
- - (void)createChatRoomWithName:(NSString * _Nullable)name attributes:(NSDictionary * _Nullable)attributes callback:(void (^)(AVIMChatRoom * _Nullable chatRoom, NSError * _Nullable error))callback;
- - (void)createTemporaryConversationWithClientIds:(NSArray<NSString *> *)clientIds timeToLive:(int32_t)ttl callback:(void (^)(AVIMTemporaryConversation * _Nullable temporaryConversation, NSError * _Nullable error))callback;
- - (void)createConversationWithName:(NSString * _Nullable)name clientIds:(NSArray<NSString *> *)clientIds attributes:(NSDictionary * _Nullable)attributes options:(AVIMConversationOption)options callback:(void (^)(AVIMConversation * _Nullable conversation, NSError * _Nullable error))callback;
- - (void)createConversationWithName:(NSString * _Nullable)name clientIds:(NSArray<NSString *> *)clientIds attributes:(NSDictionary * _Nullable)attributes options:(AVIMConversationOption)options temporaryTTL:(int32_t)temporaryTTL callback:(void (^)(AVIMConversation * _Nullable conversation, NSError * _Nullable error))callback;

+ - (void)createConversationWithClientIds:(NSArray<NSString *> *)clientIds callback:(void (^)(LCIMConversation * _Nullable conversation, NSError * _Nullable error))callback;
+ - (void)createConversationWithClientIds:(NSArray<NSString *> *)clientIds option:(LCIMConversationCreationOption * _Nullable)option callback:(void (^)(LCIMConversation * _Nullable conversation, NSError * _Nullable error))callback;
+ - (void)createChatRoomWithCallback:(void (^)(LCIMChatRoom * _Nullable chatRoom, NSError * _Nullable error))callback;
+ - (void)createChatRoomWithOption:(LCIMConversationCreationOption * _Nullable)option callback:(void (^)(LCIMChatRoom * _Nullable chatRoom, NSError * _Nullable error))callback;
+ - (void)createTemporaryConversationWithClientIds:(NSArray<NSString *> *)clientIds callback:(void (^)(LCIMTemporaryConversation * _Nullable temporaryConversation, NSError * _Nullable error))callback;
+ - (void)createTemporaryConversationWithClientIds:(NSArray<NSString *> *)clientIds option:(LCIMConversationCreationOption * _Nullable)option callback:(void (^)(LCIMTemporaryConversation * _Nullable temporaryConversation, NSError * _Nullable error))callback;

@end

默认行为方面的变动:

在 12 版本中,创建一般会话时,默认为非 unique 会话。

在 13 版本中,创建一般会话时,默认为 unique 会话。

安全签名

@protocol LCIMSignatureDataSource <NSObject>

- - (LCIMSignature *)signatureWithClientId:(NSString *)clientId conversationId:(NSString * _Nullable)conversationId action:(LCIMSignatureAction)action actionOnClientIds:(NSArray<NSString *> * _Nullable)clientIds;
+ - (void)client:(LCIMClient *)client action:(LCIMSignatureAction)action conversation:(LCIMConversation * _Nullable)conversation clientIds:(NSArray<NSString *> * _Nullable)clientIds signatureHandler:(void (^)(LCIMSignature * _Nullable))handler;

@end

新协议方法支持了异步回调。

消息更新事件

+ @interface LCIMMessagePatchedReason : NSObject
+ @property (nonatomic) NSInteger code;
+ @property (nonatomic, nullable) NSString *reason;
+ @end

@protocol LCIMClientDelegate <NSObject>

- - (void)conversation:(LCIMConversation *)conversation messageHasBeenUpdated:(LCIMMessage *)message;
+ - (void)conversation:(LCIMConversation *)conversation messageHasBeenUpdated:(LCIMMessage *)message reason:(LCIMMessagePatchedReason * _Nullable)reason;
+ - (void)conversation:(LCIMConversation *)conversation messageHasBeenRecalled:(LCIMRecalledMessage *)message reason:(LCIMMessagePatchedReason * _Nullable)reason;

@end

消息更新与消息回撤被分离为两个事件,同时增加了 reason 用来获取被服务端强制修改的原因。

会话数据更新事件

@protocol LCIMClientDelegate <NSObject>

- - (void)conversation:(LCIMConversation *)conversation didUpdateAt:(NSDate * _Nullable)date byClientId:(NSString * _Nullable)clientId updatedData:(NSDictionary * _Nullable)data;
+ - (void)conversation:(LCIMConversation *)conversation didUpdateAt:(NSDate * _Nullable)date byClientId:(NSString * _Nullable)clientId updatedData:(NSDictionary * _Nullable)updatedData updatingData:(NSDictionary * _Nullable)updatingData;

@end

新增 updatingData 参数,用来获取原始更新数据。

其它

@interface LCIMClient : NSObject

// 不再需要
- + (void)setUnreadNotificationEnabled:(BOOL)enabled;

- - (LCIMClientStatus)status;
+ @property (nonatomic, readonly) LCIMClientStatus status;

- - (nullable instancetype)initWithClientId:(NSString *)clientId
+ - (nullable instancetype)initWithClientId:(NSString *)clientId error:(NSError * __autoreleasing *)error
- - (nullable instancetype)initWithClientId:(NSString *)clientId tag:(NSString * _Nullable)tag
+ - (nullable instancetype)initWithClientId:(NSString *)clientId tag:(NSString * _Nullable)tag error:(NSError * __autoreleasing *)error
- - (nullable instancetype)initWithUser:(LCUser *)user
+ - (nullable instancetype)initWithUser:(LCUser *)user error:(NSError * __autoreleasing *)error
- - (nullable instancetype)initWithUser:(LCUser *)user tag:(NSString * _Nullable)tag
+ - (nullable instancetype)initWithUser:(LCUser *)user tag:(NSString * _Nullable)tag error:(NSError * __autoreleasing *)error

@end

@interface LCIMMessage : NSObject <NSCopying, NSCoding>

// 不再需要
- @property (nonatomic, assign, readonly) BOOL transient;

@end