-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathReceiver.ts
More file actions
92 lines (85 loc) · 2.77 KB
/
Receiver.ts
File metadata and controls
92 lines (85 loc) · 2.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import {
NativeEventEmitter,
NativeModules,
PermissionsAndroid,
Platform,
} from 'react-native';
const hasSMSPermission = async () => {
if (Platform.OS === 'android' && Platform.Version < 23) {
return true;
}
const hasReceiveSmsPermission = await PermissionsAndroid.check(
PermissionsAndroid.PERMISSIONS.RECEIVE_SMS,
);
const hasReadSmsPermission = await PermissionsAndroid.check(
PermissionsAndroid.PERMISSIONS.READ_SMS,
);
if (hasReceiveSmsPermission && hasReadSmsPermission) {
return true;
}
return false;
};
export async function startReadSMS(callback: any) {
let resultFun = (status: any, sms: any, error?: any) => {
if (callback) {
callback(status, sms, error);
}
};
if (Platform.OS === 'android') {
const hasPermission = await hasSMSPermission();
if (hasPermission) {
NativeModules.SmsReceiver.startReadSMS(
(result: any) => {
new NativeEventEmitter(NativeModules.SmsReceiver).addListener(
'received_sms',
(sms) => {
resultFun('success', sms);
},
);
},
(error: any) => {
resultFun('error', '', error);
},
);
} else {
resultFun('error', '', 'Required RECEIVE_SMS and READ_SMS permission');
}
} else {
resultFun('error', '', 'ReadSms Plugin is only for android platform');
}
}
export async function requestReadSMSPermission() {
if (Platform.OS === 'android') {
const hasPermission = await hasSMSPermission();
if (hasPermission) {
return true;
}
const status = await PermissionsAndroid.requestMultiple([
PermissionsAndroid.PERMISSIONS.RECEIVE_SMS,
PermissionsAndroid.PERMISSIONS.READ_SMS,
]);
// As we request multiple permission, requestMultiple Method returns and object so we need to check like below code.
if (
status[PermissionsAndroid.PERMISSIONS.RECEIVE_SMS] === PermissionsAndroid.RESULTS.GRANTED &&
status[PermissionsAndroid.PERMISSIONS.READ_SMS] === PermissionsAndroid.RESULTS.GRANTED
) {
return true;
}
if (status[PermissionsAndroid.PERMISSIONS.RECEIVE_SMS] === PermissionsAndroid.RESULTS.DENIED &&
status[PermissionsAndroid.PERMISSIONS.READ_SMS] === PermissionsAndroid.RESULTS.DENIED
) {
console.log('Read Sms permission denied by user.', status);
} else if (status[PermissionsAndroid.PERMISSIONS.RECEIVE_SMS] === PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN &&
status[PermissionsAndroid.PERMISSIONS.READ_SMS] === PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN
) {
console.log('Read Sms permission revoked by user.', status);
}
return false;
}
return true;
}
export function stopReadSMS() {
if (Platform.OS === 'android') {
NativeModules.SmsReceiver.stopReadSMS();
}
}