Skip to content

Commit ca14d36

Browse files
committed
add forwardMessage api in iOS
1 parent b302f60 commit ca14d36

File tree

2 files changed

+165
-0
lines changed

2 files changed

+165
-0
lines changed

index.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,27 @@ export default class JMessage {
170170
JMessageModule.sendMessage(params, success, error);
171171
}
172172

173+
/**
174+
* 消息转发。
175+
* 注意:只能转发消息状态为 SendSucceed 和 ReceiveSucceed 的消息。
176+
* @param {object} params = {
177+
* 'id': String, // message id
178+
* 'type': String, // 'single' / 'group'
179+
* 'groupId': String, // 当 type = group 时,groupId 不能为空
180+
* 'username': String, // 当 type = single 时,username 不能为空
181+
* 'target': Object (User or Group) // 转发的对象,
182+
* > 如果 target 是 user : {'type': 'user','username': string, appKey: string}, appkey 缺省时为应用 Appkey,
183+
* > 如果 target 是 group: {'type': 'group','id': string }
184+
*
185+
* 'messageSendingOptions': MessageSendingOptions // Optional. MessageSendingOptions 对象
186+
* }
187+
* @param {function} success = function (msg) {} // 以参数形式返回消息对象。
188+
* @param {function} error = function ({'code': '错误码', 'description': '错误信息'}) {}
189+
*/
190+
static forwardMessage(params, success, error) {
191+
JMessageModule.sendMessage(params, success, error);
192+
}
193+
173194
/**
174195
* @param {object} params = {
175196
* 'type': String, // 'single' / 'group'

ios/RCTJMessageModule/RCTJMessageModule.m

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2425,6 +2425,150 @@ - (JMSGOptionalContent *)convertDicToJMSGOptionalContent:(NSDictionary *)dic {
24252425
}
24262426
}
24272427

2428+
RCT_EXPORT_METHOD(forwardMessage:(NSDictionary *)param
2429+
successCallback:(RCTResponseSenderBlock)successCallback
2430+
failCallBack:(RCTResponseSenderBlock)failCallback) {
2431+
2432+
NSString *appKey = nil;
2433+
if (param[@"appKey"]) {
2434+
appKey = param[@"appKey"];
2435+
} else {
2436+
appKey = [JMessageHelper shareInstance].JMessageAppKey;
2437+
}
2438+
2439+
if ([param[@"type"] isEqual: @"single"] && param[@"username"] != nil) {
2440+
[JMSGConversation createSingleConversationWithUsername:param[@"username"] appKey:appKey completionHandler:^(id resultObject, NSError *error) {
2441+
if (error) {
2442+
failCallback(@[[error errorToDictionary]]);
2443+
return;
2444+
}
2445+
2446+
JMSGConversation *conversation = resultObject;
2447+
JMSGMessage *message = [conversation messageWithMessageId: param[@"id"]];
2448+
2449+
if ([message.content isKindOfClass:[JMSGMediaAbstractContent class]]) {
2450+
JMSGMediaAbstractContent *content = (JMSGMediaAbstractContent *)message.content;
2451+
content.uploadHandler = ^(float percent, NSString *msgID) {
2452+
2453+
[self.bridge.eventDispatcher sendAppEventWithName:uploadProgressEvent body:@{@"messageId": msgID,
2454+
@"progress": @(percent)}];
2455+
};
2456+
}
2457+
2458+
JMSGOptionalContent *messageSendingOptions = nil;
2459+
if (param[@"messageSendingOptions"] && [param[@"messageSendingOptions"] isKindOfClass: [NSDictionary class]]) {
2460+
messageSendingOptions = [self convertDicToJMSGOptionalContent:param[@"messageSendingOptions"]];
2461+
}
2462+
2463+
NSDictionary *target = nil;
2464+
if (param[@"target"]) {
2465+
target = param[@""];
2466+
} else {
2467+
failCallback(@[[self getParamError]]);
2468+
return;
2469+
}
2470+
2471+
if ([target[@"type"] isEqualToString:@"group"]) {
2472+
[JMSGGroup groupInfoWithGroupId:target[@"id"] completionHandler:^(id resultObject, NSError *error) {
2473+
if (error) {
2474+
failCallback(@[[error errorToDictionary]]);
2475+
return ;
2476+
}
2477+
JMSGGroup *group = resultObject;
2478+
[JMSGMessage forwardMessage:message target:group optionalContent:messageSendingOptions];
2479+
}];
2480+
} else {
2481+
NSString *targetAppkey = nil;
2482+
if (target[@"appKey"]) {
2483+
targetAppkey = target[@"appKey"];
2484+
}
2485+
[JMSGUser userInfoArrayWithUsernameArray:@[target[@"user"]] appKey:targetAppkey completionHandler:^(id resultObject, NSError *error) {
2486+
if (error) {
2487+
failCallback(@[[error errorToDictionary]]);
2488+
return ;
2489+
}
2490+
2491+
NSArray *userArr = resultObject;
2492+
if (userArr.count < 1) {
2493+
failCallback(@[[self getErrorWithLog:@"cann't find user by usernaem"]]);
2494+
} else {
2495+
JMSGUser *user = resultObject[0];
2496+
[JMSGMessage forwardMessage:message target:user optionalContent:messageSendingOptions];
2497+
}
2498+
}];
2499+
}
2500+
2501+
}];
2502+
} else {
2503+
[JMSGConversation createGroupConversationWithGroupId:param[@"groupId"] completionHandler:^(id resultObject, NSError *error) {
2504+
if (error) {
2505+
failCallback(@[[error errorToDictionary]]);
2506+
return;
2507+
}
2508+
2509+
JMSGConversation *conversation = resultObject;
2510+
JMSGMessage *message = [conversation messageWithMessageId: param[@"id"]];
2511+
2512+
if ([message.content isKindOfClass:[JMSGMediaAbstractContent class]]) {
2513+
JMSGMediaAbstractContent *content = (JMSGMediaAbstractContent *)message.content;
2514+
content.uploadHandler = ^(float percent, NSString *msgID) {
2515+
[self.bridge.eventDispatcher sendAppEventWithName:uploadProgressEvent body:@{@"messageId": msgID,
2516+
@"progress": @(percent)}];
2517+
};
2518+
}
2519+
2520+
JMSGOptionalContent *messageSendingOptions = nil;
2521+
if (param[@"messageSendingOptions"] && [param[@"messageSendingOptions"] isKindOfClass: [NSDictionary class]]) {
2522+
messageSendingOptions = [self convertDicToJMSGOptionalContent:param[@"messageSendingOptions"]];
2523+
}
2524+
2525+
NSDictionary *target = nil;
2526+
if (param[@"target"]) {
2527+
target = param[@""];
2528+
} else {
2529+
failCallback(@[[self getParamError]]);
2530+
return;
2531+
}
2532+
2533+
if ([target[@"type"] isEqualToString:@"group"]) {
2534+
[JMSGGroup groupInfoWithGroupId:target[@"id"] completionHandler:^(id resultObject, NSError *error) {
2535+
if (error) {
2536+
failCallback(@[[error errorToDictionary]]);
2537+
return ;
2538+
}
2539+
JMSGGroup *group = resultObject;
2540+
[JMSGMessage forwardMessage:message target:group optionalContent:messageSendingOptions];
2541+
}];
2542+
} else {
2543+
NSString *targetAppkey = nil;
2544+
if (target[@"appKey"]) {
2545+
targetAppkey = target[@"appKey"];
2546+
}
2547+
[JMSGUser userInfoArrayWithUsernameArray:@[target[@"user"]] appKey:targetAppkey completionHandler:^(id resultObject, NSError *error) {
2548+
if (error) {
2549+
failCallback(@[[error errorToDictionary]]);
2550+
return ;
2551+
}
2552+
2553+
NSArray *userArr = resultObject;
2554+
if (userArr.count < 1) {
2555+
failCallback(@[[self getErrorWithLog:@"cann't find user by usernaem"]]);
2556+
} else {
2557+
JMSGUser *user = resultObject[0];
2558+
[JMSGMessage forwardMessage:message target:user optionalContent:messageSendingOptions];
2559+
}
2560+
}];
2561+
}
2562+
// if (messageSendingOptions) {
2563+
// [conversation sendMessage:message optionalContent:messageSendingOptions];
2564+
// } else {
2565+
// [conversation sendMessage:message];
2566+
// }
2567+
2568+
}];
2569+
}
2570+
}
2571+
24282572
RCT_EXPORT_METHOD(blockGroupMessage:(NSDictionary *)param
24292573
successCallback:(RCTResponseSenderBlock)successCallback
24302574
failCallBack:(RCTResponseSenderBlock)failCallback) {

0 commit comments

Comments
 (0)