diff --git a/android/libs/jmessage-android_v2.2.1.jar b/android/libs/jmessage-android_v2.2.1.jar
deleted file mode 100644
index cb15b91..0000000
Binary files a/android/libs/jmessage-android_v2.2.1.jar and /dev/null differ
diff --git a/android/libs/jmessage-android_v2.3.0.jar b/android/libs/jmessage-android_v2.3.0.jar
new file mode 100644
index 0000000..36b20df
Binary files /dev/null and b/android/libs/jmessage-android_v2.3.0.jar differ
diff --git a/android/src/io/jchat/android/JMessageModule.java b/android/src/io/jchat/android/JMessageModule.java
index b1a9904..3b66942 100644
--- a/android/src/io/jchat/android/JMessageModule.java
+++ b/android/src/io/jchat/android/JMessageModule.java
@@ -224,6 +224,24 @@ public void gotResult(int status, String desc) {
});
}
+ @ReactMethod
+ public void updateMyAvatar(ReadableMap map, final Callback success, final Callback fail) {
+ try {
+ String path = map.getString("imgPath");
+ File file = new File(path);
+ if (file.exists() && file.isFile()) {
+ JMessageClient.updateUserAvatar(file, new BasicCallback() {
+ @Override
+ public void gotResult(int status, String desc) {
+ mJMessageUtils.handleCallback(status, desc, success, fail);
+ }
+ });
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
@ReactMethod
public void updateMyInfo(ReadableMap map, final Callback success, final Callback fail) {
UserInfo myInfo = JMessageClient.getMyInfo();
diff --git a/example/android/app/app.iml b/example/android/app/app.iml
index 9ca6a0e..a447c0d 100644
--- a/example/android/app/app.iml
+++ b/example/android/app/app.iml
@@ -76,7 +76,6 @@
-
@@ -96,10 +95,12 @@
-
+
+
+
diff --git a/example/android/build.gradle b/example/android/build.gradle
index 0293840..ab8437c 100644
--- a/example/android/build.gradle
+++ b/example/android/build.gradle
@@ -29,5 +29,6 @@ allprojects {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url "$rootDir/../node_modules/react-native/android"
}
+ maven { url "https://jitpack.io" }
}
}
diff --git a/example/app/routes/Chat/index.js b/example/app/routes/Chat/index.js
index 32fa351..a72a19c 100644
--- a/example/app/routes/Chat/index.js
+++ b/example/app/routes/Chat/index.js
@@ -45,9 +45,10 @@ export default class Chat extends Component {
constructor(props) {
super(props);
this.state = {
- inputViewLayout: {width:window.width, height:100,},
+ inputViewLayout: {width:window.width, height:86,},
menuContainerHeight: 1000,
isDismissMenuContainer: false,
+ shouldExpandMenuContainer: false,
};
this.updateLayout = this.updateLayout.bind(this);
@@ -189,7 +190,10 @@ export default class Chat extends Component {
componentWillUnmount() {
JMessage.removeReceiveMessageListener(this.receiveMessageCallBack)
AuroraIController.removeMessageListDidLoadListener(this.messageListDidLoadCallback)
- UIManager.dispatchViewManagerCommand(findNodeHandle(this.refs["MessageList"]), 1, null)
+ if (Platform.OS === 'android') {
+ UIManager.dispatchViewManagerCommand(findNodeHandle(this.refs["MessageList"]), 1, null)
+ }
+
}
updateLayout(layout) {
@@ -208,12 +212,29 @@ export default class Chat extends Component {
width: Dimensions.get('window').width,
height: 100
},
+ shouldExpandMenuContainer: false,
});
}
- onTouchEditText() {
+ onTouchEditText = () => {
console.log("scroll to bottom")
AuroraIController.scrollToBottom(true);
+ if (this.state.shouldExpandMenuContainer) {
+ this.setState({inputViewLayout: {width:window.width, height:420,}})
+ }
+
+ }
+
+ onFullScreen = () => {
+ this.setState({
+ inputViewLayout: {width: window.width, height:window.height}
+ })
+ }
+
+ onRecoverScreen = () => {
+ this.setState({
+ inputViewLayout: {width: window.width, height: 480}
+ })
}
onMsgClick = (message) => {
@@ -358,15 +379,23 @@ export default class Chat extends Component {
}
onSwitchToMicrophoneMode = () => {
- this.updateLayout({width:window.width, height:420,})
+ this.updateLayout({width:window.width, height:338,})
}
onSwitchToGalleryMode = () => {
- this.updateLayout({width:window.width, height:420,})
+ this.updateLayout({width:window.width, height:338,})
}
onSwitchToCameraMode = () => {
- this.updateLayout({width:window.width, height:420,})
+ if (Platform.OS == "android") {
+ this.updateLayout({width:window.width, height: 338})
+ this.setState({
+ shouldExpandMenuContainer: true
+ })
+ } else {
+ this.updateLayout({width:window.width, height:338,})
+ }
+
}
onShowKeyboard = (keyboard_height) => {
@@ -413,6 +442,8 @@ export default class Chat extends Component {
onSwitchToCameraMode={this.onSwitchToCameraMode}
onShowKeyboard={this.onShowKeyboard}
onTouchEditText={this.onTouchEditText}
+ onFullScreen={this.onFullScreen}
+ onRecoverScreen={this.onRecoverScreen}
/>
);
diff --git a/example/app/routes/Home/ConversationList/index.js b/example/app/routes/Home/ConversationList/index.js
index 9edefe3..6faa957 100644
--- a/example/app/routes/Home/ConversationList/index.js
+++ b/example/app/routes/Home/ConversationList/index.js
@@ -116,6 +116,7 @@ export default class ConversationList extends React.Component {
this.props.navigation.setParams({
createConversation: this._onCreateConversation
});
+
}
componentWillMount() {
this.reloadConversationList()
diff --git a/example/ios/JMessageDemo.xcodeproj/project.pbxproj b/example/ios/JMessageDemo.xcodeproj/project.pbxproj
index 2c6b668..72956ca 100644
--- a/example/ios/JMessageDemo.xcodeproj/project.pbxproj
+++ b/example/ios/JMessageDemo.xcodeproj/project.pbxproj
@@ -601,6 +601,17 @@
name = Products;
sourceTree = "";
};
+ 6291C0931F99C22600C85F64 /* Recovered References */ = {
+ isa = PBXGroup;
+ children = (
+ E53DEE966F3C4EF59620DD03 /* libRNSVG.a */,
+ B68903A680EE48DAA80CB4A8 /* libRCTJMessageModule.a */,
+ B3D3338066F545108CE6489C /* libAuroraIMUI.a */,
+ 2C597C5BCCDA4718A237069C /* libRCTJCoreModule.a */,
+ );
+ name = "Recovered References";
+ sourceTree = "";
+ };
62D683711F43E8890083CDF6 /* Products */ = {
isa = PBXGroup;
children = (
@@ -666,6 +677,7 @@
00E356EF1AD99517003FC87E /* JMessageDemoTests */,
83CBBA001A601CBA00E9B192 /* Products */,
621730111F4DAA24001ADED4 /* Frameworks */,
+ 6291C0931F99C22600C85F64 /* Recovered References */,
);
indentWidth = 2;
sourceTree = "";
diff --git a/ios/RCTJMessageModule.xcodeproj/project.pbxproj b/ios/RCTJMessageModule.xcodeproj/project.pbxproj
index 4f8d1ee..f468815 100644
--- a/ios/RCTJMessageModule.xcodeproj/project.pbxproj
+++ b/ios/RCTJMessageModule.xcodeproj/project.pbxproj
@@ -239,6 +239,7 @@
"$(inherited)",
"$(PROJECT_DIR)/RCTJMessageModule",
);
+ HEADER_SEARCH_PATHS = "$(SRCROOT)/../../react-native/React/**";
OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
@@ -253,6 +254,7 @@
"$(inherited)",
"$(PROJECT_DIR)/RCTJMessageModule",
);
+ HEADER_SEARCH_PATHS = "$(SRCROOT)/../../react-native/React/**";
OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
diff --git a/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGConstants.h b/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGConstants.h
index fd4de61..fc725a0 100644
--- a/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGConstants.h
+++ b/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGConstants.h
@@ -212,6 +212,10 @@ typedef NS_ENUM(NSInteger, JMSGEventNotificationType) {
/// 事件类型: 消息撤回
kJMSGEventNotificationMessageRetract = 55,
+ /// 事件类型: 消息透传
+ kJMSGEventNotificationMessageTransparent = 58,
+ /// 事件类型: 消息回执变更
+ kJMSGEventNotificationMessageReceiptStatusChange = 68,
// 消息事件
/// 事件类型: 群组被创建
@@ -314,6 +318,8 @@ typedef NS_ENUM(NSInteger, JMSGSDKErrorCode) {
kJMSGErrorSDKMediaHashCodeIllegal = 864006,
/// 媒体HASH校验失败
kJMSGErrorSDKMediaHashVerifyFailed = 864007,
+ /// 这条消息不支持转发
+ kJMSGErrorSDKMessageNotSupportForward = 864008,
// ------------------------ Message (865xxx)
@@ -413,6 +419,8 @@ typedef NS_ENUM(NSUInteger, JMSGTcpErrorCode) {
kJMSGErrorTcpUserNotRegistered = 801003,
/// 用户密码错误
kJMSGErrorTcpUserPasswordError = 801004,
+ /// 多通道同时登录错误,登录失败
+ kJMSGErrorTcpLoginMultiChannelError = 801007,
/// 目标用户不存在
kJMSGErrorTcpTargetUserNotExist = 803003,
/// 目标群组不存在
@@ -455,14 +463,6 @@ static NSString *const KEY_REGION = @"region"; //区域
static NSString *const KEY_SIGNATURE = @"signature";//签名
static NSString *const KEY_ADDRESS = @"address"; //地址
static NSString *const KEY_STAR = @"star";
-static NSString *const KEY_UID = @"uid";
-static NSString *const KEY_NO_DISTURB = @"no_disturb";
-static NSString *const KEY_BLACKLIST = @"blicklist";
-static NSString *const KEY_NOTE_NAME = @"memo_name";//note_name
-static NSString *const KEY_NOTE_TEXT = @"memo_others";//note_text
-static NSString *const KEY_SHIELD_GROUP = @"shield_group";
-static NSString *const KEY_USER_MTIME = @"mtime";
-static NSString *const KEY_USER_CTIME = @"ctime";
diff --git a/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGConversation.h b/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGConversation.h
index 02f598f..610e420 100755
--- a/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGConversation.h
+++ b/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGConversation.h
@@ -17,6 +17,7 @@
@class JMSGAbstractContent;
@class JMSGImageContent;
@class JMSGOptionalContent;
+@class JMSGMediaAbstractContent;
/*!
@@ -218,6 +219,7 @@ JMSG_ASSUME_NONNULL_BEGIN
@property(nonatomic, strong, readonly) NSString *targetAppKey;
+
///----------------------------------------------------
/// @name Message Operations 消息相关操作
///----------------------------------------------------
@@ -311,16 +313,24 @@ JMSG_ASSUME_NONNULL_BEGIN
*/
- (JMSGMessage * JMSG_NULLABLE)createMessageWithContent:(JMSGAbstractContent *)content;
+
/*!
* @abstract 创建消息对象(图片,异步)
*
- * @param content 准备好的图片内容
+ * 注意:此方法已过期,请使用 createMessageAsyncWithMediaContent: 方法
+ */
+- (void)createMessageAsyncWithImageContent:(JMSGImageContent *)content
+ completionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler __attribute__((deprecated("first deprecated in JMessage 3.3.0 - Use -createMessageAsyncWithMediaContent:")));
+/*!
+ * @abstract 创建消息对象(多媒体消息,异步)
+ *
+ * @param content 准备好的多媒体内容,如:图片、语音、文件等
* @param handler 结果回调. 正常返回时 resultObject 类型为 JMSGMessage.
*
- * @discussion 对于图片消息,因为 SDK 要做缩图有一定的性能损耗,图片文件很大时存储落地也会较慢。
+ * @discussion 注意:对于多媒体消息,因为 SDK 要做缩图有一定的性能损耗,图片文件很大时存储落地也会较慢。
* 所以创建图片消息,建议使用这个异步接口。
*/
-- (void)createMessageAsyncWithImageContent:(JMSGImageContent *)content
+- (void)createMessageAsyncWithMediaContent:(JMSGMediaAbstractContent *)content
completionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
/*!
@@ -333,12 +343,12 @@ JMSG_ASSUME_NONNULL_BEGIN
- (void)sendMessage:(JMSGMessage *)message;
/*!
- * @abstract 发送消息(附带可选功能,如:控制离线消息存储、自定义通知栏内容等)
+ * @abstract 发送消息(附带可选功能,如:控制离线消息存储、自定义通知栏内容、消息已读回执等)
*
* @param message 通过消息创建类接口,创建好的消息对象
* @param optionalContent 可选功能,具体请查看 JMSGOptionalContent 类
*
- * @discussion 可选功能里可以设置离线消息存储、自定义通知栏内容等,具体请查看 JMSGOptionalContent 类。
+ * @discussion 可选功能里可以设置离线消息存储、自定义通知栏内容、消息已读回执等,具体请查看 JMSGOptionalContent 类。
*
*/
- (void)sendMessage:(JMSGMessage *)message optionalContent:(JMSGOptionalContent *)optionalContent;
@@ -421,7 +431,23 @@ JMSG_ASSUME_NONNULL_BEGIN
- (void)retractMessage:(JMSGMessage *)message completionHandler:(JMSGCompletionHandler)handler;
/*!
- * @abstract 异步获取会话头像(仅限单聊)
+ * @abstract 消息透传
+ *
+ * @param transparentText 用户自定义透传内容,仅限 NSString 类型
+ * @param handler 回调,error=nil 表示成功
+ *
+ * @discussion 注意:
+ *
+ * 1. 消息透传功能,消息不会进入到后台的离线存储中去,仅当对方用户当前在线时才会成功送达,可以快速响应,方便开发者拓展自定义行为;
+ *
+ * 2. 可用来快速实现一些在线场景下的辅助功能 :输入状态提示、位置信息提示、开发者自定义等。
+ *
+ */
+- (void)sendTransparentMessage:(NSString *JMSG_NONNULL)transparentText
+ completionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
+
+/*!
+ * @abstract 异步获取会话头像
*
* @param handler 结果回调。回调参数:
*
@@ -443,7 +469,7 @@ JMSG_ASSUME_NONNULL_BEGIN
*
* @return 返回本地路,返回值只有在下载完成之后才有意义
*/
-- (NSString *)avatarLocalPath;
+- (NSString *JMSG_NULLABLE)avatarLocalPath;
///----------------------------------------------------
/// @name Conversation State Maintenance 会话状态维护
@@ -463,6 +489,34 @@ JMSG_ASSUME_NONNULL_BEGIN
*/
- (NSString *)latestMessageContentText;
+/*!
+ * @abstract 获取会话所有扩展字段
+ *
+ * @return 返回所有值,NSDictionary 类型
+ *
+ * @discussion 与 [- (void)setExtraValue:forKey:] 配套使用,可用于对会话属性的扩展
+ */
+- (NSDictionary *JMSG_NULLABLE)getConversationExtras;
+
+/*!
+ * @abstract 获取单个扩展字段
+ *
+ * @return 返回 key 对应值,NSString 类型
+ *
+ * @discussion 与 [- (void)setExtraValue:forKey:] 配套使用,可用于对会话属性的扩展
+ */
+- (NSString *JMSG_NULLABLE)getExtraValueForKey:(NSString *JMSG_NONNULL)key;
+
+/*!
+ * @abstract 增加或更新扩展字段,可扩展会话属性,比如:会话置顶、标识特殊会话等
+ *
+ * @param value 新增键值对的值. String 类型.
+ * @param key 新增键值对的键
+ *
+ * @discussion 如果 value = nil,则删除 extras 中 key 对应的值
+ */
+- (void)setExtraValue:(NSString *JMSG_NULLABLE)value forKey:(NSString *JMSG_NONNULL)key;
+
/*!
* @abstract 判断消息是否属于这个 Conversation
*
diff --git a/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGConversationDelegate.h b/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGConversationDelegate.h
index a375e0f..4f905cf 100644
--- a/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGConversationDelegate.h
+++ b/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGConversationDelegate.h
@@ -37,10 +37,10 @@
- (void)onUnreadChanged:(NSUInteger)newCount;
/*!
- * @abstract 同步离线消息通知
+ * @abstract 同步离线消息、离线事件通知
*
* @param conversation 同步离线消息的会话
- * @param offlineMessages 离线消息数组
+ * @param offlineMessages 离线消息、离线事件数组
*
* @discussion 注意:
*
@@ -53,11 +53,12 @@
*
* 3.1.0 版本之后: SDK 会以会话为单位,不管该会话有多少离线消息,SDK同步完成后每个会话只上抛一次.
*
- * 注意一个会话只会上抛一个会话,这样会大大减轻上层在收到消息事件需要刷新 UI 的应用场景下,UI 刷新的压力.
+ * 3.2.1 版本之后: SDK 会以会话为单位,不管该会话有多少离线事件,SDK同步完成后每个会话只上抛一次
+ *
+ * 注意:一个会话最多触发两次这个代理,即:离线消息和离线事件各一次,这样会大大减轻上层在收到消息刷新 UI 的压力.
*
* 上层通过此代理方法监听离线消息同步的会话,详见官方文档.
*
- * @since 3.1.0
*/
@optional
- (void)onSyncOfflineMessageConversation:(JMSGConversation *)conversation
diff --git a/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGEventDelegate.h b/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGEventDelegate.h
index 539351f..bb2cc47 100644
--- a/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGEventDelegate.h
+++ b/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGEventDelegate.h
@@ -39,11 +39,34 @@
*
* @param retractEvent 下发的通知事件,事件类型请查看 JMSGMessageRetractEvent 类
*
- * @discussion 收到此事件时,可以通过 event.conversation 判断是否属于某个会话
- *
* @since 3.2.0
*/
@optional
- (void)onReceiveMessageRetractEvent:(JMSGMessageRetractEvent *)retractEvent;
+
+/*!
+ * @abstract 消息回执状态变更事件
+ *
+ * @param receiptEvent 下发的通知事件,事件类型请查看 JMSGMessageReceiptStatusChangeEvent 类
+ *
+ * @discussion 上层可以通过 receiptEvent 获取相应信息
+ *
+ * @since 3.3.0
+ */
+@optional
+- (void)onReceiveMessageReceiptStatusChangeEvent:(JMSGMessageReceiptStatusChangeEvent *)receiptEvent;
+
+/*!
+ * @abstract 消息透传事件
+ *
+ * @param transparentEvent 下发的通知事件,事件类型请查看 JMSGMessageTransparentEvent 类
+ *
+ * @discussion 上层可以通过 transparentEvent 获取相应信息,如果自定义的透传信息、会话
+ *
+ * @since 3.3.0
+ */
+@optional
+- (void)onReceiveMessageTransparentEvent:(JMSGMessageTransparentEvent *)transparentEvent;
+
@end
diff --git a/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGFileContent.h b/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGFileContent.h
index b7c0cb1..3cfb148 100644
--- a/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGFileContent.h
+++ b/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGFileContent.h
@@ -39,6 +39,25 @@ JMSG_ASSUME_NONNULL_BEGIN
*/
- (void)fileData:(JMSGAsyncDataHandler)handler;
+/*!
+ * @abstract 获取文件内容的数据
+ *
+ * @param progressHandler 下载进度。会持续回调更新进度, 直接下载完成。如果为 nil 则表示不关心进度。
+ * @param handler 结果回调。回调参数:
+ *
+ * - data 文件数据;
+ * - objectId 消息msgId;
+ * - error 不为nil表示出错;
+ *
+ * 如果 error 为 ni, data 也为 nil, 表示没有数据.
+ *
+ * @discussion
+ * 如果本地数据文件已经存在, 则直接返回;
+ * 如果本地还没有文件,会发起网络请求下载。下载完后再回调。
+ */
+- (void)fileDataWithProgress:(JMSGMediaProgressHandler JMSG_NULLABLE)progressHandler
+ completionHandler:(JMSGAsyncDataHandler JMSG_NULLABLE)handler;
+
JMSG_ASSUME_NONNULL_END
@end
diff --git a/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGGroup.h b/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGGroup.h
index 8ab6557..ff90734 100644
--- a/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGGroup.h
+++ b/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGGroup.h
@@ -14,6 +14,20 @@
@class JMSGUser;
+/*!
+ * 群信息类(用于修改群信息、创建群)
+ */
+@interface JMSGGroupInfo : NSObject
+
+/** 群名称 */
+@property(nonatomic, strong) NSString *JMSG_NONNULL name;
+/** 群描述 */
+@property(nonatomic, strong) NSString *JMSG_NONNULL desc;
+/** 群头像数据 */
+@property(nonatomic, strong) NSData *JMSG_NONNULL avatarData;
+
+@end
+
/*!
* 群组
@@ -47,6 +61,19 @@ JMSG_ASSUME_NONNULL_BEGIN
memberArray:(NSArray JMSG_GENERIC(__kindof NSString *) *JMSG_NULLABLE)usernameArray
completionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
+/*!
+ * @abstract 创建群组
+ *
+ * @param groupInfo 群信息类,详细请查看 JMSGGroupInfo 类
+ * @param usernameArray 初始成员列表。NSArray 里的类型是 NSString
+ * @param handler 结果回调。正常返回 resultObject 的类型是 JMSGGroup。
+ *
+ * @discussion 向服务器端提交创建群组请求,返回生成后的群组对象.
+ * 返回群组对象, 群组ID是App 需要关注的, 是后续各种群组维护的基础.
+ */
++ (void)createGroupWithGroupInfo:(JMSGGroupInfo *)groupInfo
+ memberArray:(NSArray JMSG_GENERIC(__kindof NSString *) *JMSG_NULLABLE)usernameArray
+ completionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
/*!
* @abstract 更新群组信息
*
@@ -54,12 +81,41 @@ JMSG_ASSUME_NONNULL_BEGIN
* @param groupName 新名称
* @param groupDesc 新描述
* @param handler 结果回调. 正常返回时, resultObject 为 nil.
+ *
+ * @discussion 注意:name 和 desc 不允许传空字符串
*/
+ (void)updateGroupInfoWithGroupId:(NSString *)groupId
- name:(NSString *)groupName
- desc:(NSString *)groupDesc
+ name:(NSString *JMSG_NULLABLE)groupName
+ desc:(NSString *JMSG_NULLABLE)groupDesc
completionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
+/*!
+ * @abstract 更新群头像(支持传图片格式)
+ *
+ * @param groupId 待更新的群组ID
+ * @param avatarData 头像数据
+ * @param avatarFormat 头像格式,可以为空,不包括"."
+ * @param handler 回调
+ *
+ * @discussion 头像格式参数直接填格式名称,不要带点。正确:@"png",错误:@".png"
+ */
++ (void)updateGroupAvatarWithGroupId:(NSString *JMSG_NONNULL)groupId
+ avatarData:(NSData *JMSG_NONNULL)avatarData
+ avatarFormat:(NSString *JMSG_NULLABLE)avatarFormat
+ completionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
+/*!
+ * @abstract 更新群信息
+ *
+ * @param gid 群组 id
+ * @param groupInfo 群信息类,详细请查看 JMSGGroupInfo 类
+ * @param handler 结果回调. 正常返回时, resultObject 为 nil.
+ *
+ * @discussion 注意:修改群名称和群描述时参数不允许传空字符串
+ */
++ (void)updateGroupInfoWithGid:(NSString *)gid
+ groupInfo:(JMSGGroupInfo *)groupInfo
+ completionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
+
/*!
* @abstract 获取群组信息
*
@@ -127,6 +183,13 @@ JMSG_ASSUME_NONNULL_BEGIN
*/
@property(nonatomic, strong, readonly) NSNumber *level;
+/*!
+ * @abstract 群组头像(媒体文件ID)
+ *
+ * @discussion 此文件ID仅用于内部更新,不支持外部URL。
+ */
+@property(nonatomic, strong, readonly) NSString * JMSG_NULLABLE avatar;
+
/*!
* @abstract 群组设置标志位
*
@@ -273,6 +336,52 @@ JMSG_ASSUME_NONNULL_BEGIN
*/
- (void)exit:(JMSGCompletionHandler JMSG_NULLABLE)handler;
+/*!
+ * @abstract 获取头像缩略图文件数据
+ *
+ * @param handler 结果回调。回调参数:
+ *
+ * - data 头像数据;
+ * - objectId 群组 gid;
+ * - error 不为nil表示出错;
+ *
+ * 如果 error 为 nil, data 也为 nil, 表示没有头像数据.
+ *
+ * @discussion 需要展示缩略图时使用。
+ * 如果本地已经有文件,则会返回本地,否则会从服务器上下载。
+ */
+- (void)thumbAvatarData:(JMSGAsyncDataHandler)handler;
+
+/*!
+ * @abstract 获取头像缩略文件的本地路径
+ *
+ * @return 返回本地路,返回值只有在下载完成之后才有意义
+ */
+- (NSString *JMSG_NULLABLE)thumbAvatarLocalPath;
+
+/*!
+ * @abstract 获取头像大图文件数据
+ *
+ * @param handler 结果回调。回调参数:
+ *
+ * - data 头像数据;
+ * - objectId 群组 gid;
+ * - error 不为nil表示出错;
+ *
+ * 如果 error 为 nil, data 也为 nil, 表示没有头像数据.
+ *
+ * @discussion 需要展示大图图时使用
+ * 如果本地已经有文件,则会返回本地,否则会从服务器上下载。
+ */
+- (void)largeAvatarData:(JMSGAsyncDataHandler)handler;
+
+/*!
+ * @abstract 获取头像大图文件的本地路径
+ *
+ * @return 返回本地路,返回值只有在下载完成之后才有意义
+ */
+- (NSString *JMSG_NULLABLE)largeAvatarLocalPath;
+
/*!
* @abstract 获取群组的展示名
*
diff --git a/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGImageContent.h b/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGImageContent.h
index 3a00d2d..2e83fd5 100644
--- a/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGImageContent.h
+++ b/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGImageContent.h
@@ -41,6 +41,13 @@
*/
@property(nonatomic, strong, readonly) NSString * JMSG_NULLABLE imageLink;
+/*!
+ * @abstract 图片格式
+ *
+ * 注意:格式后缀不需要带点,只需后缀名,如:png、jpg 等
+ */
+@property(nonatomic, strong) NSString * JMSG_NULLABLE format;
+
/*!
* @abstract 图片原始大小
*/
diff --git a/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGMediaAbstractContent.h b/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGMediaAbstractContent.h
index 56ca792..bbdee68 100644
--- a/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGMediaAbstractContent.h
+++ b/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGMediaAbstractContent.h
@@ -37,7 +37,7 @@ JMSG_ASSUME_NONNULL_BEGIN
*/
@property(nonatomic, strong, readonly) NSString * JMSG_NULLABLE mediaID;
-/*! @abstract 媒体格式 */
+/*! @abstract 媒体格式*/
@property(nonatomic, strong, readonly) NSString * JMSG_NULLABLE format;
/*! @abstract 媒体文件大小 */
@@ -54,7 +54,7 @@ JMSG_ASSUME_NONNULL_BEGIN
*
* @discussion 此属性是通过懒加载的方式获取,必须在下载完成之后此属性值才有意义
*/
-@property(nonatomic, strong, readonly) NSString *originMediaLocalPath;
+@property(nonatomic, strong, readonly) NSString * JMSG_NULLABLE originMediaLocalPath;
// 不支持使用的初始化方法
- (nullable instancetype)init NS_UNAVAILABLE;
diff --git a/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGMessage.h b/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGMessage.h
index fef44b6..d4c54e5 100755
--- a/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGMessage.h
+++ b/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGMessage.h
@@ -64,7 +64,11 @@ JMSG_ASSUME_NONNULL_BEGIN
* @param content 消息内容对象
* @param username 单聊用户 username
*
- * @discussion 不关心会话时的直接创建聊天消息的接口。一般建议使用 JMSGConversation -> createMessageWithContent:
+ * #### 注意:
+ *
+ * 1、单独调用此接口创建消息,SDK 不会本地保存消息,再调用发送接口时才会保存;
+ *
+ * 2、如果上层希望创建消息时就本地化保存,请使用 [JMSGConversation createMessageWithContent:]
*/
+ (JMSGMessage *)createSingleMessageWithContent:(JMSGAbstractContent *)content
username:(NSString *)username;
@@ -75,7 +79,11 @@ JMSG_ASSUME_NONNULL_BEGIN
* @param content 消息内容对象
* @param groupId 群聊ID
*
- * @discussion 不关心会话时的直接创建聊天消息的接口。一般建议使用 JMSGConversation -> createMessageWithContent:
+ * #### 注意:
+ *
+ * 1、单独调用此接口创建消息,SDK 不会本地保存消息,再调用发送接口时才会保存;
+ *
+ * 2、如果上层希望创建消息时就本地化保存,请使用 [JMSGConversation createMessageWithContent:]
*/
+ (JMSGMessage *)createGroupMessageWithContent:(JMSGAbstractContent *)content
groupId:(NSString *)groupId;
@@ -87,7 +95,11 @@ JMSG_ASSUME_NONNULL_BEGIN
* @param groupId 群聊ID
* @param at_list @对象的数组
*
- * @discussion 不关心会话时的直接创建聊天消息的接口。一般建议使用 JMSGConversation -> createMessageWithContent:
+ * #### 注意:
+ *
+ * 1、单独调用此接口创建消息,SDK 不会本地保存消息,再调用发送接口时才会保存;
+ *
+ * 2、如果上层希望创建消息时就本地化保存,请使用 [JMSGConversation createMessageWithContent:]
*/
+ (JMSGMessage *)createGroupMessageWithContent:(JMSGAbstractContent *)content
groupId:(NSString *)groupId
@@ -99,10 +111,14 @@ JMSG_ASSUME_NONNULL_BEGIN
* @param content 消息内容对象
* @param groupId 群聊ID
*
- * @discussion 不关心会话时的直接创建聊天消息的接口。一般建议使用 JMSGConversation -> createMessageWithContent:
+ * #### 注意:
+ *
+ * 1、单独调用此接口创建消息,SDK 不会本地保存消息,再调用发送接口时才会保存;
+ *
+ * 2、如果上层希望创建消息时就本地化保存,请使用 [JMSGConversation createMessageWithContent:]
*/
+ (JMSGMessage *)createGroupAtAllMessageWithContent:(JMSGAbstractContent *)content
- groupId:(NSString *)groupId;
+ groupId:(NSString *)groupId;
/*!
* @abstract 发送消息(已经创建好的)
@@ -114,12 +130,12 @@ JMSG_ASSUME_NONNULL_BEGIN
+ (void)sendMessage:(JMSGMessage *)message;
/*!
- * @abstract 发送消息(附带可选功能,如:控制离线消息存储、自定义通知栏内容等)
+ * @abstract 发送消息(附带可选功能,如:控制离线消息存储、自定义通知栏内容、消息已读回执等)
*
* @param message 通过消息创建类接口,创建好的消息对象
* @param optionalContent 可选功能,具体请查看 JMSGOptionalContent 类
*
- * @discussion 可选功能里可以设置离线消息存储、自定义通知栏内容等,具体请查看 JMSGOptionalContent 类。
+ * @discussion 可选功能里可以设置离线消息存储、自定义通知栏内容、消息已读回执等,具体请查看 JMSGOptionalContent 类。
*
*/
+ (void)sendMessage:(JMSGMessage *)message optionalContent:(JMSGOptionalContent *)optionalContent;
@@ -331,30 +347,17 @@ JMSG_ASSUME_NONNULL_BEGIN
+ (void)retractMessage:(JMSGMessage *)message completionHandler:(JMSGCompletionHandler)handler;
/*!
- * @abstract 是否是@自己的消息(只针对群消息,单聊消息无@功能)
- */
-- (BOOL)isAtMe;
-
-/*!
- * @abstract 是否是@所有人的消息(只针对群消息,单聊消息无@功能)
- */
-- (BOOL)isAtAll;
-
-/*!
- * @abstract 获取消息体中所有@对象(只针对群消息,单聊消息无@功能)
+ * @abstract 消息转发
*
- * @param handler 结果回调。回调参数:
+ * @param message 需要转发的消息
+ * @param target 目标 target,只能为 JMSGUser 或 JMSGGroup
+ * @param optionalContent 可选功能,具体请查看 JMSGOptionalContent 类
*
- * - resultObject 类型为 NSArray,数组里成员的类型为 JMSGUser
- * 注意:如果该消息为@所有人消息时,resultObject 返回nil,可以通过 isAtAll 接口来判断是否是@所有人的消息
- * - error 错误信息
- *
- * 如果 error 为 nil, 表示获取成功
- * 如果 error 不为 nil,表示获取失败
- *
- * @discussion 从服务器获取,返回消息的所有@对象。
+ * @discussion 注意:只能转发消息状态为 SendSucceed 和 ReceiveSucceed 的消息。
*/
-- (void)getAt_List:(JMSGCompletionHandler)handler;
++ (void)forwardMessage:(JMSGMessage *)message
+ target:(id)target
+ optionalContent:(JMSGOptionalContent *JMSG_NULLABLE)optionalContent;
///----------------------------------------------------
@@ -489,6 +492,14 @@ JMSG_ASSUME_NONNULL_BEGIN
*/
@property(nonatomic, strong, readonly) NSNumber *flag;
+/*!
+ * @abstract 是否已读(只针对接收的消息)
+ *
+ * @discussion 该属性与实例方法 [-(void)setMessageHaveRead:] 是对应的。
+ *
+ * 注意:只有发送方调用 [+sendMessage:optionalContent:] 方法设置 message 需要已读回执,此属性才有意义。
+ */
+@property(nonatomic, assign, readonly) BOOL isHaveRead;
///----------------------------------------------------
/// @name Instance APIs 实例方法
@@ -514,6 +525,76 @@ JMSG_ASSUME_NONNULL_BEGIN
*/
- (instancetype)init NS_UNAVAILABLE;
+/*!
+ * @abstract 是否是@自己的消息(只针对群消息,单聊消息无@功能)
+ */
+- (BOOL)isAtMe;
+
+/*!
+ * @abstract 是否是@所有人的消息(只针对群消息,单聊消息无@功能)
+ */
+- (BOOL)isAtAll;
+
+/*!
+ * @abstract 获取消息体中所有@对象(只针对群消息,单聊消息无@功能)
+ *
+ * @param handler 结果回调。回调参数:
+ *
+ * - resultObject 类型为 NSArray,数组里成员的类型为 JMSGUser
+ * 注意:如果该消息为@所有人消息时,resultObject 返回nil,可以通过 isAtAll 接口来判断是否是@所有人的消息
+ * - error 错误信息
+ *
+ * 如果 error 为 nil, 表示获取成功
+ * 如果 error 不为 nil,表示获取失败
+ *
+ * @discussion 从服务器获取,返回消息的所有@对象。
+ */
+- (void)getAt_List:(JMSGCompletionHandler)handler;
+
+/*!
+ * @abstract 设置为已读
+ *
+ * @param handler 回调
+ *
+ * - resultObject 返回对应的 message,不过成功失败都会返回 message 对象
+ * - error 不为 nil 表示操作失败
+ *
+ * @discussion 注意: 只针对消息接收方有效
+ *
+ * 这是一个异步接口;
+ *
+ * 1、接收方:设置消息为已读状态后,isHaveRead 属性也会被设置为 YES,
+ *
+ * 2、发送方:会收到消息已读状态变更事件,SDK 会更新消息的未读人数。
+ *
+ * 注意:只有发送方调用 [+sendMessage:optionalContent:] 方法设置 message 需要已读回执,此方法才有效。
+ */
+- (void)setMessageHaveRead:(JMSGCompletionHandler)handler;
+
+/*!
+ * @abstract 消息未读人数
+ *
+ * @discussion 只针对消息发送方有效
+ *
+ * 注意:只有发送方调用 [+sendMessage:optionalContent:] 方法设置 message 需要已读回执,此方法才有意义。
+ */
+- (NSInteger)getMessageUnreadCount;
+
+/*!
+ * @abstract 已读未读用户列表
+ *
+ * @param handler 结果回调。回调参数:
+ *
+ * - unreadUsers 未读用户列表
+ * - readsUsers 读用户列表
+ * - error 不为nil表示出错
+ *
+ * @discussion 只针对消息发送方有效
+ *
+ * 注意:只有发送方调用 [+sendMessage:optionalContent:] 方法设置 message 需要已读回执,此方法才有意义。
+ */
+- (void)messageReadDetailHandler:(void(^)(NSArray *JMSG_NULLABLE readUsers, NSArray *JMSG_NULLABLE unreadUsers, NSError *JMSG_NULLABLE error))handler;
+
/*!
* @abstract 设置消息的 fromName(即:通知栏的展示名称)
*
diff --git a/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGNotificationEvent.h b/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGNotificationEvent.h
index 3b01499..ac50fa0 100644
--- a/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGNotificationEvent.h
+++ b/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGNotificationEvent.h
@@ -40,7 +40,7 @@
/*!
* @abstract 消息撤回事件
*
- * @discussion 上层通过 JMSGEventDelegate 类中的 -(void)onReceiveNotificationEvent: 代理方法监听此事件,详见官方文档.
+ * @discussion 上层通过 JMSGEventDelegate 类中的 -(void)onReceiveMessageRetractEvent: 代理方法监听此事件,详见官方文档.
*/
@interface JMSGMessageRetractEvent : JMSGNotificationEvent
@@ -55,3 +55,37 @@
@property(nonatomic, strong, readonly) JMSGMessage *retractMessage;
@end
+
+
+/*!
+ * @abstract 消息已读回执状态变更事件
+ */
+@interface JMSGMessageReceiptStatusChangeEvent : JMSGNotificationEvent
+/**
+ * @abstract 消息所属会话
+ */
+@property(nonatomic, strong, readonly) JMSGConversation *conversation;
+
+/**
+ * @abstract 已读回执变更的消息列表
+ */
+@property(nonatomic, strong, readonly) NSArray <__kindof JMSGMessage *>*messages;
+
+@end
+
+/*!
+ * @abstract 消息透传事件
+ */
+@interface JMSGMessageTransparentEvent : JMSGNotificationEvent
+
+/*!
+ * @abstract 消息所属会话
+ */
+@property(nonatomic, strong, readonly) JMSGConversation *conversation;
+
+/*!
+ * @abstract 用户自定义透传内容
+ */
+@property(nonatomic, strong, readonly) NSString *transparentText;
+
+@end
diff --git a/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGOptionalContent.h b/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGOptionalContent.h
index 053ca99..ff26d63 100644
--- a/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGOptionalContent.h
+++ b/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGOptionalContent.h
@@ -14,7 +14,10 @@
@class JMSGCustomNotification;
-/// 发送消息的可选功能
+/*!
+ * @abstract 发送消息的可选功能
+ *
+ */
@interface JMSGOptionalContent : NSObject
/*!
@@ -27,8 +30,16 @@
*/
@property(nonatomic, assign) BOOL noSaveNotification;
+/*!
+ * @abstract 设置这条消息的发送是否需要对方发送已读回执,NO,默认值
+ */
+@property(nonatomic, assign) BOOL needReadReceipt;
+
+
/*!
* @abstract 自定义消息通知栏的内容
+ *
+ * @discussion 这个属性可以具体参考 JMSGCustomNotification 类
*/
@property(nonatomic, strong) JMSGCustomNotification *customNotification;
diff --git a/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGPromptContent.h b/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGPromptContent.h
index 02f2576..2d5534a 100644
--- a/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGPromptContent.h
+++ b/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGPromptContent.h
@@ -13,8 +13,9 @@
#import
/*!
- * 提示性消息内容。
- * 此 MessageContent 类型仅由 SDK 主动创建,上层做展示用,不能当做发送的消息体。
+ * @abstract 提示性消息内容
+ *
+ * @discussion 此 MessageContent 类型仅由 SDK 主动创建,上层做展示用,不能当做发送的消息体。
*/
@interface JMSGPromptContent : JMSGAbstractContent
JMSG_ASSUME_NONNULL_BEGIN
@@ -24,7 +25,7 @@ JMSG_ASSUME_NONNULL_BEGIN
*
* @discussion 消息提示文字
*/
-@property(nonatomic, readonly, copy) NSString *promptText;
+@property(nonatomic,strong, readonly) NSString *promptText;
// 不支持使用的初始化方法
diff --git a/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGUser.h b/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGUser.h
index 220ad30..cb398a1 100755
--- a/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGUser.h
+++ b/ios/RCTJMessageModule/JMessage.framework/Headers/JMSGUser.h
@@ -30,6 +30,8 @@ typedef NS_ENUM(NSUInteger, JMSGUserField) {
kJMSGUserFieldsAvatar = 5,
/// 用户信息字段: 地址
kJMSGUserFieldsAddress = 6,
+ /// 用户信息字段: 扩展字段
+ kJMSGUserFieldsExtras = 7,
};
@@ -46,7 +48,7 @@ typedef NS_ENUM(NSUInteger, JMSGUserGender) {
};
/*!
- * 用户信息类(仅可用于修改用户信息)
+ * 用户信息类(用于修改用户信息、注册新用户)
*/
@interface JMSGUserInfo : NSObject
JMSG_ASSUME_NONNULL_BEGIN
@@ -62,8 +64,12 @@ JMSG_ASSUME_NONNULL_BEGIN
@property(nonatomic, strong) NSString * region;
/** 地址 */
@property(nonatomic, strong) NSString * address;
-/** 头像数据 */
+/** 头像数据,注意:注册新用户时不支持同时上传头像 */
@property(nonatomic, strong) NSData * avatarData;
+/** 信息扩展字段,value 仅支持 NSString 类型*/
+@property(nonatomic, strong) NSDictionary * extras;
+
+
JMSG_ASSUME_NONNULL_END
@end
@@ -93,6 +99,22 @@ JMSG_ASSUME_NONNULL_BEGIN
password:(NSString *)password
completionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
+/*!
+ * @abstract 新用户注册(支持携带用户信息字段)
+ *
+ * @param userInfo 用户名. 长度 4~128 位.
+ * 支持的字符: 字母,数字,下划线,英文减号,英文点,@邮件符号. 首字母只允许是字母或者数字.
+ * @param password 用户密码. 长度 4~128 位.
+ * @param userInfo 用户信息类,注册时携带用户信息字段,除用户头像字段
+ * @param handler 结果回调. 返回正常时 resultObject 为 nil.
+ *
+ * @discussion 注意: 注册时不支持上传头像,其他信息全部支持
+ */
++ (void)registerWithUsername:(NSString *)username
+ password:(NSString *)password
+ userInfo:(JMSGUserInfo *JMSG_NULLABLE)userInfo
+ completionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
+
/*!
* @abstract 用户登录
*
@@ -140,6 +162,8 @@ JMSG_ASSUME_NONNULL_BEGIN
* @abstract 获取用户本身个人信息接口
*
* @return 当前登陆账号个人信息
+ *
+ * @discussion 注意:返回值有可能为空
*/
+ (JMSGUser *)myInfo;
@@ -147,9 +171,11 @@ JMSG_ASSUME_NONNULL_BEGIN
* @abstract 更新用户信息接口
*
* @param parameter 新的属性值
- * Birthday&&Gender 是NSNumber类型, Avatar NSData类型 其他 NSString
+ * Birthday&&Gender 是NSNumber类型, Avatar NSData类型, extras是 NSDictionary 类型, 其他 NSString
* @param type 更新属性类型
* @param handler 更新用户信息回调接口函数
+ *
+ * @discussion 注意:建议使用 [+(void)updateMyInfoWithUserInfo:completionHandler:] 接口修改信息
*/
+ (void)updateMyInfoWithParameter:(id)parameter
userFieldType:(JMSGUserField)type
@@ -166,6 +192,18 @@ JMSG_ASSUME_NONNULL_BEGIN
+ (void)updateMyInfoWithUserInfo:(JMSGUserInfo *)userInfo
completionHandler:(JMSGCompletionHandler)handler;
+/*!
+ * @abstract 更新头像(支持传图片格式)
+ *
+ * @param avatarData 头像数据
+ * @param avatarFormat 头像格式,可以为空,不包括"."
+ * @param handler 回调
+ *
+ * @discussion 头像格式参数直接填格式名称,不要带点。正确:@"png",错误:@".png"
+ */
++ (void)updateMyAvatarWithData:(NSData *)avatarData
+ avatarFormat:(NSString *)avatarFormat
+ completionHandler:(JMSGCompletionHandler)handler;
/*!
* @abstract 更新密码接口
*
@@ -245,6 +283,7 @@ JMSG_ASSUME_NONNULL_BEGIN
appKey:(NSString *)userAppKey
completionHandler:(JMSGCompletionHandler)handler;
+
///----------------------------------------------------
/// @name Basic Fields 基本属性
///----------------------------------------------------
@@ -304,6 +343,11 @@ JMSG_ASSUME_NONNULL_BEGIN
*/
@property(nonatomic, copy, readonly) NSString * JMSG_NULLABLE appKey;
+/*!
+ * @abstract 用户扩展字段
+ */
+@property(nonatomic, strong, readonly) NSDictionary * JMSG_NULLABLE extras;
+
/*!
* @abstract 该用户是否已被设置为免打扰
*
@@ -381,7 +425,7 @@ JMSG_ASSUME_NONNULL_BEGIN
*
* @return 返回本地路,返回值只有在下载完成之后才有意义
*/
-- (NSString *)thumbAvatarLocalPath;
+- (NSString *JMSG_NULLABLE)thumbAvatarLocalPath;
/*!
* @abstract 获取头像大图文件数据
@@ -404,7 +448,7 @@ JMSG_ASSUME_NONNULL_BEGIN
*
* @return 返回本地路,返回值只有在下载完成之后才有意义
*/
-- (NSString *)largeAvatarLocalPath;
+- (NSString *JMSG_NULLABLE)largeAvatarLocalPath;
/*!
* @abstract 用户展示名
diff --git a/ios/RCTJMessageModule/JMessage.framework/Headers/JMessage.h b/ios/RCTJMessageModule/JMessage.framework/Headers/JMessage.h
index af57933..a33bfb4 100644
--- a/ios/RCTJMessageModule/JMessage.framework/Headers/JMessage.h
+++ b/ios/RCTJMessageModule/JMessage.framework/Headers/JMessage.h
@@ -53,10 +53,10 @@ extern NSString *const kJMSGServiceErrorNotification; // 错误
@interface JMessage : NSObject
/*! JMessage SDK 版本号。用于展示 SDK 的版本信息 */
-#define JMESSAGE_VERSION @"3.2.0"
+#define JMESSAGE_VERSION @"3.3.0"
/*! JMessage SDK 构建ID. 每次构建都会增加 */
-#define JMESSAGE_BUILD 45
+#define JMESSAGE_BUILD 186
/*! API Version - int for program logic. SDK API 有变更时会增加 */
extern NSInteger const JMESSAGE_API_VERSION;
@@ -114,13 +114,12 @@ extern NSInteger const JMESSAGE_API_VERSION;
* 这个调用可以在任何地方, 任何时候调用, 可以在未进行 SDK
* 启动 setupJMessage:appKey:channel:apsForProduction:category: 时就被调用.
*
- * 并且, 如果你有必要接收数据库升级通知 [JMSGDBMigrateDelegate](建议要做这一步),
+ * 并且, 如果你有必要接收数据库升级通知 JMSGDBMigrateDelegate,
* 就应该在 SDK 启动前就调用此方法, 来注册通知接收.
* 这样, SDK启动过程中发现需要进行数据库升级, 给 App 发送数据库升级通知时,
* App 才可以收到并进行处理.
*/
-+ (void)addDelegate:(id )delegate
- withConversation:(JMSGConversation *)conversation;
++ (void)addDelegate:(id )delegate withConversation:(JMSGConversation *)conversation;
/*!
* @abstract 删除Delegate监听
@@ -131,8 +130,7 @@ extern NSInteger const JMESSAGE_API_VERSION;
* - 为 nil, 表示全局的监听, 即所有会话相关.
* - 不为 nil, 表示特定的会话.
*/
-+ (void)removeDelegate:(id )delegate
- withConversation:(JMSGConversation *)conversation;
++ (void)removeDelegate:(id )delegate withConversation:(JMSGConversation *)conversation;
/*!
* @abstract 删除全部监听
@@ -258,8 +256,7 @@ extern NSInteger const JMESSAGE_API_VERSION;
* @discussion 此方法必须被调用,如果有集成JPush或其他远程推送注册方法,请不要再调用此方法
*
*/
-+ (void)registerForRemoteNotificationTypes:(NSUInteger)types
- categories:(NSSet *)categories;
++ (void)registerForRemoteNotificationTypes:(NSUInteger)types categories:(NSSet *)categories;
/*!
* @abstract 注册DeviceToken
@@ -294,7 +291,5 @@ extern NSInteger const JMESSAGE_API_VERSION;
* 参考 [JMessage setBadge:] 说明来理解其作用.
*/
+ (void)resetBadge;
-
-
@end
diff --git a/ios/RCTJMessageModule/JMessage.framework/Info.plist b/ios/RCTJMessageModule/JMessage.framework/Info.plist
index 8c76224..7724d66 100644
Binary files a/ios/RCTJMessageModule/JMessage.framework/Info.plist and b/ios/RCTJMessageModule/JMessage.framework/Info.plist differ
diff --git a/ios/RCTJMessageModule/JMessage.framework/JMessage b/ios/RCTJMessageModule/JMessage.framework/JMessage
index 8e0f334..6008a84 100644
Binary files a/ios/RCTJMessageModule/JMessage.framework/JMessage and b/ios/RCTJMessageModule/JMessage.framework/JMessage differ
diff --git a/package.json b/package.json
index 1e096a5..8c8085b 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "jmessage-react-plugin",
- "version": "2.0.0-beta3",
+ "version": "2.1.0",
"description": "a jmessage plugin for react native application",
"main": "index.js",
"repository": {