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": {