react-native-share 9.2.3 → 9.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -55,13 +55,16 @@ public class RNShareImpl implements ActivityEventListener {
|
|
|
55
55
|
WritableMap reply = Arguments.createMap();
|
|
56
56
|
reply.putBoolean("success", false);
|
|
57
57
|
reply.putString("message", "CANCELED");
|
|
58
|
+
TargetChosenReceiver.callbackResolve(reply);
|
|
58
59
|
} else if (resultCode == Activity.RESULT_OK) {
|
|
59
60
|
WritableMap reply = Arguments.createMap();
|
|
60
61
|
reply.putBoolean("success", true);
|
|
62
|
+
TargetChosenReceiver.callbackResolve(reply);
|
|
61
63
|
}
|
|
62
64
|
}
|
|
63
65
|
}
|
|
64
|
-
|
|
66
|
+
|
|
67
|
+
@Override
|
|
65
68
|
public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) {
|
|
66
69
|
onActivityResult(requestCode, resultCode, data);
|
|
67
70
|
}
|
package/ios/RNShare.mm
CHANGED
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
#import "TelegramShare.h"
|
|
21
21
|
#import "ViberShare.h"
|
|
22
22
|
#import "MessengerShare.h"
|
|
23
|
+
#import "SmsShare.h"
|
|
23
24
|
#import "RNShareActivityItemSource.h"
|
|
24
25
|
#import "RNShareUtils.h"
|
|
25
26
|
|
|
@@ -36,6 +37,7 @@ RCTPromiseResolveBlock resolveBlock;
|
|
|
36
37
|
// may implement a delegate and could be garbage collected
|
|
37
38
|
// before it is called
|
|
38
39
|
EmailShare *shareCtl;
|
|
40
|
+
SmsShare *smsShareCtl;
|
|
39
41
|
|
|
40
42
|
- (dispatch_queue_t)methodQueue
|
|
41
43
|
{
|
|
@@ -51,6 +53,7 @@ EmailShare *shareCtl;
|
|
|
51
53
|
{
|
|
52
54
|
if ((self = [super init])) {
|
|
53
55
|
shareCtl = [[EmailShare alloc] init];
|
|
56
|
+
smsShareCtl = [[SmsShare alloc] init];
|
|
54
57
|
}
|
|
55
58
|
return self;
|
|
56
59
|
}
|
|
@@ -91,7 +94,7 @@ RCT_EXPORT_MODULE()
|
|
|
91
94
|
@"EMAIL": @"email",
|
|
92
95
|
@"MESSENGER": @"messanger",
|
|
93
96
|
@"VIBER": @"viber",
|
|
94
|
-
|
|
97
|
+
@"SMS": @"sms",
|
|
95
98
|
@"SHARE_BACKGROUND_IMAGE": @"shareBackgroundImage",
|
|
96
99
|
@"SHARE_BACKGROUND_VIDEO": @"shareBackgroundVideo",
|
|
97
100
|
@"SHARE_STICKER_IMAGE": @"shareStickerImage",
|
|
@@ -163,6 +166,9 @@ RCT_EXPORT_METHOD(shareSingle:(NSDictionary *)options
|
|
|
163
166
|
NSLog(@"TRY OPEN messenger");
|
|
164
167
|
MessengerShare *shareCtl = [[MessengerShare alloc] init];
|
|
165
168
|
[shareCtl shareSingle:options reject: reject resolve: resolve];
|
|
169
|
+
} else if([social isEqualToString:@"sms"]) {
|
|
170
|
+
NSLog(@"TRY OPEN sms");
|
|
171
|
+
[smsShareCtl shareSingle:options reject: reject resolve: resolve];
|
|
166
172
|
}
|
|
167
173
|
} else {
|
|
168
174
|
RCTLogError(@"key 'social' missing in options");
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
6513A53928AF109A00F0AE09 /* MessengerShare.m in Sources */ = {isa = PBXBuildFile; fileRef = 6513A53828AF109A00F0AE09 /* MessengerShare.m */; };
|
|
11
11
|
65B4E1BA28AF0DC800D905B8 /* RNShareUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 65B4E1B928AF0DC800D905B8 /* RNShareUtils.m */; };
|
|
12
12
|
6D697F8423A86EBC00F754A1 /* RNShareActivityItemSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D697F8323A86EBC00F754A1 /* RNShareActivityItemSource.m */; };
|
|
13
|
+
962C1A3C2A8A714D0046A9E0 /* SmsShare.m in Sources */ = {isa = PBXBuildFile; fileRef = 962C1A3B2A8A714D0046A9E0 /* SmsShare.m */; };
|
|
13
14
|
B33C22851D441713006BCD98 /* GenericShare.m in Sources */ = {isa = PBXBuildFile; fileRef = B33C22841D441713006BCD98 /* GenericShare.m */; };
|
|
14
15
|
B33C22891D4419E8006BCD98 /* WhatsAppShare.m in Sources */ = {isa = PBXBuildFile; fileRef = B33C22881D4419E8006BCD98 /* WhatsAppShare.m */; };
|
|
15
16
|
B33C228B1D442577006BCD98 /* EmailShare.m in Sources */ = {isa = PBXBuildFile; fileRef = B33C228A1D442576006BCD98 /* EmailShare.m */; };
|
|
@@ -40,6 +41,8 @@
|
|
|
40
41
|
65B4E1B928AF0DC800D905B8 /* RNShareUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RNShareUtils.m; sourceTree = "<group>"; };
|
|
41
42
|
6D697F8223A86EBC00F754A1 /* RNShareActivityItemSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RNShareActivityItemSource.h; sourceTree = "<group>"; };
|
|
42
43
|
6D697F8323A86EBC00F754A1 /* RNShareActivityItemSource.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RNShareActivityItemSource.m; sourceTree = "<group>"; };
|
|
44
|
+
962C1A3A2A8A71400046A9E0 /* SmsShare.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SmsShare.h; sourceTree = "<group>"; };
|
|
45
|
+
962C1A3B2A8A714D0046A9E0 /* SmsShare.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SmsShare.m; sourceTree = "<group>"; };
|
|
43
46
|
B33C22841D441713006BCD98 /* GenericShare.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GenericShare.m; sourceTree = "<group>"; };
|
|
44
47
|
B33C22861D441723006BCD98 /* GenericShare.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GenericShare.h; sourceTree = "<group>"; };
|
|
45
48
|
B33C22871D4419DA006BCD98 /* WhatsAppShare.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WhatsAppShare.h; sourceTree = "<group>"; };
|
|
@@ -110,6 +113,8 @@
|
|
|
110
113
|
65B4E1B928AF0DC800D905B8 /* RNShareUtils.m */,
|
|
111
114
|
B33C22871D4419DA006BCD98 /* WhatsAppShare.h */,
|
|
112
115
|
B33C22881D4419E8006BCD98 /* WhatsAppShare.m */,
|
|
116
|
+
962C1A3A2A8A71400046A9E0 /* SmsShare.h */,
|
|
117
|
+
962C1A3B2A8A714D0046A9E0 /* SmsShare.m */,
|
|
113
118
|
);
|
|
114
119
|
name = social;
|
|
115
120
|
sourceTree = "<group>";
|
|
@@ -178,6 +183,7 @@
|
|
|
178
183
|
B3EEE48E1D4844E7008422B6 /* GooglePlusShare.m in Sources */,
|
|
179
184
|
B3E7B58A1CC2AC0600A0062D /* RNShare.m in Sources */,
|
|
180
185
|
B33C22891D4419E8006BCD98 /* WhatsAppShare.m in Sources */,
|
|
186
|
+
962C1A3C2A8A714D0046A9E0 /* SmsShare.m in Sources */,
|
|
181
187
|
B33C228B1D442577006BCD98 /* EmailShare.m in Sources */,
|
|
182
188
|
FCC7BB4F221457EF00E1EA39 /* InstagramStories.m in Sources */,
|
|
183
189
|
6513A53928AF109A00F0AE09 /* MessengerShare.m in Sources */,
|
package/ios/SmsShare.h
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#import <UIKit/UIKit.h>
|
|
2
|
+
// import RCTConvertttt
|
|
3
|
+
#import <React/RCTConvert.h>
|
|
4
|
+
// import RCTBridge
|
|
5
|
+
#import <React/RCTBridge.h>
|
|
6
|
+
// import RCTUIManager
|
|
7
|
+
#import <React/RCTUIManager.h>
|
|
8
|
+
// import RCTLog
|
|
9
|
+
#import <React/RCTLog.h>
|
|
10
|
+
// import RCTUtils
|
|
11
|
+
#import <React/RCTUtils.h>
|
|
12
|
+
#import <MessageUI/MessageUI.h>
|
|
13
|
+
@interface SmsShare : NSObject <MFMessageComposeViewControllerDelegate>
|
|
14
|
+
|
|
15
|
+
- (void) shareSingle:(NSDictionary *)options reject:(RCTPromiseRejectBlock)reject resolve:(RCTPromiseResolveBlock)resolve;
|
|
16
|
+
@end
|
package/ios/SmsShare.m
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
#import "SmsShare.h"
|
|
2
|
+
#import "RNShareUtils.h"
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
@implementation SmsShare
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
- (void)shareSingle:(NSDictionary *)options
|
|
9
|
+
reject:(RCTPromiseRejectBlock)reject
|
|
10
|
+
resolve:(RCTPromiseResolveBlock)resolve {
|
|
11
|
+
|
|
12
|
+
if ([options objectForKey:@"message"] && [options objectForKey:@"message"] != [NSNull null]) {
|
|
13
|
+
|
|
14
|
+
NSString *message = [RCTConvert NSString:options[@"message"]];
|
|
15
|
+
NSString *recipient = [RCTConvert NSString:options[@"recipient"]];
|
|
16
|
+
|
|
17
|
+
if (![MFMessageComposeViewController canSendText]) {
|
|
18
|
+
NSString *errorMessage = @"Sms services is not available.";
|
|
19
|
+
NSDictionary *userInfo = @{NSLocalizedFailureReasonErrorKey: NSLocalizedString(errorMessage, nil)};
|
|
20
|
+
NSError *error = [NSError errorWithDomain:@"com.rnshare" code:1 userInfo:userInfo];
|
|
21
|
+
reject(@"com.rnshare", errorMessage, error);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
MFMessageComposeViewController *mc = [[MFMessageComposeViewController alloc] init];
|
|
26
|
+
mc.messageComposeDelegate = self;
|
|
27
|
+
|
|
28
|
+
NSMutableArray *recipients = [[NSMutableArray alloc] init];
|
|
29
|
+
if (![recipient isEqual: @""]) {
|
|
30
|
+
[recipients addObject:recipient];
|
|
31
|
+
}
|
|
32
|
+
mc.recipients = recipients;
|
|
33
|
+
mc.body = message;
|
|
34
|
+
|
|
35
|
+
NSURL *URL = [RCTConvert NSURL:options[@"url"]];
|
|
36
|
+
if (URL) {
|
|
37
|
+
BOOL isDataScheme = [URL.scheme.lowercaseString isEqualToString:@"data"];
|
|
38
|
+
|
|
39
|
+
// Only handling data scheme urls here. To handle the case of URL.isFileURL
|
|
40
|
+
// one could add a case similar to the process in EmailShare.m
|
|
41
|
+
if (isDataScheme) {
|
|
42
|
+
NSError *error;
|
|
43
|
+
NSData *data = [NSData dataWithContentsOfURL:URL
|
|
44
|
+
options:(NSDataReadingOptions)0
|
|
45
|
+
error:&error];
|
|
46
|
+
if (!data) {
|
|
47
|
+
reject(@"com.rnshare", @"No data", error);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
NSURL *filePath = [RNShareUtils getPathFromBase64:URL.absoluteString with:data fileName:@"file"];
|
|
52
|
+
if (filePath) {
|
|
53
|
+
// public.image typeIdentifier works for both images and files
|
|
54
|
+
[mc addAttachmentData:data typeIdentifier:@"public.image" filename:filePath.absoluteString];
|
|
55
|
+
}
|
|
56
|
+
} else {
|
|
57
|
+
// if not a file, just append URL to message
|
|
58
|
+
NSString *urlString = [RCTConvert NSString:options[@"url"]];
|
|
59
|
+
message = [message stringByAppendingString: [@" " stringByAppendingString: urlString]];
|
|
60
|
+
[mc setBody:message];
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
66
|
+
UIViewController *ctrl = RCTPresentedViewController();
|
|
67
|
+
[ctrl presentViewController:mc animated:YES completion:NULL];
|
|
68
|
+
resolve(@[@true, @""]);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller
|
|
74
|
+
didFinishWithResult:(MessageComposeResult)result {
|
|
75
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
76
|
+
UIViewController *ctrl = RCTPresentedViewController();
|
|
77
|
+
[ctrl dismissViewControllerAnimated:YES completion:NULL];
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
@end
|
package/package.json
CHANGED