omikit-plugin 0.1.0 → 0.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.
- package/README.md +148 -14
- package/android/build.gradle +2 -1
- package/android/gradle.properties +1 -1
- package/android/src/main/AndroidManifest.xml +6 -0
- package/android/src/main/java/com/omikitplugin/OmikitPluginModule.kt +47 -40
- package/ios/CallProcess/CallManager.swift +14 -19
- package/ios/Constant/Constant.swift +7 -7
- package/ios/OmikitPlugin.m +19 -1
- package/ios/OmikitPlugin.swift +66 -3
- package/lib/commonjs/index.js +1 -5
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/index.js +1 -4
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/index.d.ts +0 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/index.tsx +1 -5
package/README.md
CHANGED
|
@@ -1,31 +1,165 @@
|
|
|
1
|
-
#
|
|
1
|
+
# OMICALL SDK FOR React-Native
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The OmiKit exposes the <a href="https://www.npmjs.com/package/omikit-plugin">omikit-plugin</a>.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
The most important part of the framework is :
|
|
6
|
+
|
|
7
|
+
- Help to easy integrate with Omicall.
|
|
8
|
+
- Easy custom Call UI/UX.
|
|
9
|
+
- Optimize codec voip for you.
|
|
10
|
+
- Full inteface to interactive with core function like sound/ringtone/codec.
|
|
11
|
+
|
|
12
|
+
## Status
|
|
13
|
+
|
|
14
|
+
Currently active maintained
|
|
15
|
+
|
|
16
|
+
## Running
|
|
17
|
+
|
|
18
|
+
Install via npm:
|
|
6
19
|
|
|
7
20
|
```sh
|
|
8
21
|
npm install omikit-plugin
|
|
9
22
|
```
|
|
10
23
|
|
|
11
|
-
|
|
24
|
+
Install via yarn:
|
|
12
25
|
|
|
13
|
-
```
|
|
14
|
-
|
|
26
|
+
```sh
|
|
27
|
+
yarn add omikit-plugin
|
|
28
|
+
```
|
|
15
29
|
|
|
16
|
-
|
|
30
|
+
### Configuration
|
|
17
31
|
|
|
18
|
-
|
|
32
|
+
#### Android:
|
|
33
|
+
|
|
34
|
+
- Add this setting in `build.gradle`:
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
jcenter() // Warning: this repository is going to shut down soon
|
|
38
|
+
maven {
|
|
39
|
+
url("https://vihat.jfrog.io/artifactory/vihat-local-repo")
|
|
40
|
+
credentials {
|
|
41
|
+
username = "anonymous"
|
|
42
|
+
}
|
|
43
|
+
}
|
|
19
44
|
```
|
|
20
45
|
|
|
21
|
-
|
|
46
|
+
```
|
|
47
|
+
classpath 'com.google.gms:google-services:4.3.13' //in dependencies
|
|
48
|
+
```
|
|
22
49
|
|
|
23
|
-
|
|
50
|
+
- Add this setting In `app/build.gradle`:
|
|
24
51
|
|
|
25
|
-
|
|
52
|
+
```
|
|
53
|
+
apply plugin: 'com.android.application'
|
|
54
|
+
apply plugin: 'kotlin-android'
|
|
55
|
+
apply plugin: 'com.google.gms.google-services'
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Push Notification:
|
|
59
|
+
|
|
60
|
+
- Add `google-service.json` in `android/app` (For more information, you can refer <a href="https://rnfirebase.io/">Firebase core</a>)
|
|
61
|
+
|
|
62
|
+
- For more setting information, please refer <a href="https://api.omicall.com/web-sdk/mobile-sdk/android-sdk/cau-hinh-push-notification">Omicall Config Push for Android</a>
|
|
63
|
+
|
|
64
|
+
#### iOS: Set up environment and library:
|
|
65
|
+
|
|
66
|
+
- AppDelete.h
|
|
26
67
|
|
|
27
|
-
|
|
68
|
+
```
|
|
69
|
+
#import <OmiKit/OmiKit-umbrella.h>
|
|
70
|
+
#import <UserNotifications/UserNotifications.h>
|
|
71
|
+
|
|
72
|
+
@interface AppDelegate : UIResponder <UIApplicationDelegate, RCTBridgeDelegate>
|
|
73
|
+
|
|
74
|
+
@property (nonatomic, strong) UIWindow *window;
|
|
75
|
+
@property (nonatomic, strong) PushKitManager *pushkitManager;
|
|
76
|
+
@property (nonatomic, strong) CallKitProviderDelegate * provider;
|
|
77
|
+
@property (nonatomic, strong) PKPushRegistry * voipRegistry;
|
|
78
|
+
|
|
79
|
+
@end
|
|
80
|
+
|
|
81
|
+
```
|
|
28
82
|
|
|
29
|
-
|
|
83
|
+
- AppDelete.m
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
#import <OmiKit/OmiKit.h>
|
|
87
|
+
|
|
88
|
+
[OmiClient setEnviroment:KEY_OMI_APP_ENVIROMENT_SANDBOX];
|
|
89
|
+
self.provider = [[CallKitProviderDelegate alloc] initWithCallManager: [OMISIPLib sharedInstance].callManager];
|
|
90
|
+
self.voipRegistry = [[PKPushRegistry alloc] initWithQueue:dispatch_get_main_queue()];
|
|
91
|
+
self.pushkitManager = [[PushKitManager alloc] initWithVoipRegistry: self.voipRegistry];
|
|
92
|
+
//Add into `didFinishLaunchingWithOptions` function
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
- Save token for `OmiClient`, if you don't use `Messaging` for iOS:
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
- (void)application:(UIApplication*)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)devToken
|
|
99
|
+
{
|
|
100
|
+
// parse token bytes to string
|
|
101
|
+
const char *data = [devToken bytes];
|
|
102
|
+
NSMutableString *token = [NSMutableString string];
|
|
103
|
+
for (NSUInteger i = 0; i < [devToken length]; i++)
|
|
104
|
+
{
|
|
105
|
+
[token appendFormat:@"%02.2hhX", data[i]];
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// print the token in the console.
|
|
109
|
+
NSLog(@"Push Notification Token: %@", [token copy]);
|
|
110
|
+
[OmiClient setUserPushNotificationToken:[token copy]];
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Push Notification:
|
|
116
|
+
Omicall need two certificates: VOIP Push Certificate & User Push Notification Certificate
|
|
117
|
+
|
|
118
|
+
- For more information, please refer <a href="https://api.omicall.com/web-sdk/mobile-sdk/ios-sdk/cau-hinh-push-notification">Omicall Push Notification for iOS</a>
|
|
119
|
+
|
|
120
|
+
## Implement
|
|
121
|
+
|
|
122
|
+
- Set up Firebase Messaging: <a href="https://rnfirebase.io/messaging/usage">messaging</a> plugin.
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
//if you use only on Android. you only implement for Android.
|
|
126
|
+
//because we use APNS to push notification on iOS so you don't need add Firebase for iOS.
|
|
127
|
+
//But you can use firebase-messaging to get APNS token for iOS.
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
- Call actions:
|
|
131
|
+
|
|
132
|
+
* `initCall` : register and init OmiCall. You need send Object value with `userName`, `password` and `realm`.
|
|
133
|
+
* `updateToken` : update token for sdk. You need send `fcmToken` for Android and send `apnsToken` for iOS.
|
|
134
|
+
* `startCall` : start Call.
|
|
135
|
+
* `endCall` : end Call.
|
|
136
|
+
* `toggleMute` : toggle the microphone status.
|
|
137
|
+
* `toggleSpeaker` : toggle the voice status. You need send Object value with `useSpeaker`.
|
|
138
|
+
* `sendDTMF` : send DTMF for call server. You need send Object value with `character` value.
|
|
139
|
+
|
|
140
|
+
* Event listener:
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
useEffect(() => {
|
|
144
|
+
omiEmitter.addListener('incomingReceived', incomingReceived);
|
|
145
|
+
omiEmitter.addListener('onCallEstablished', onCallEstablished);
|
|
146
|
+
omiEmitter.addListener('onCallEnd', onCallEnd);
|
|
147
|
+
omiEmitter.addListener('onMuted', onMuted);
|
|
148
|
+
omiEmitter.addListener('onRinging', onRinging);
|
|
149
|
+
return () => {
|
|
150
|
+
omiEmitter.removeAllListeners('incomingReceived');
|
|
151
|
+
omiEmitter.removeAllListeners('onCallEstablished');
|
|
152
|
+
omiEmitter.removeAllListeners('onCallEnd');
|
|
153
|
+
omiEmitter.removeAllListeners('onMuted');
|
|
154
|
+
omiEmitter.removeAllListeners('onRinging');
|
|
155
|
+
};
|
|
156
|
+
}, []);
|
|
157
|
+
|
|
158
|
+
```
|
|
30
159
|
|
|
31
|
-
|
|
160
|
+
* Event List: `We support 5 events`
|
|
161
|
+
* `onCallEnd`: Trigger when end the call.
|
|
162
|
+
* `onCallEstablished`: Trigger when we created the call.
|
|
163
|
+
* `onRinging`: Trigger when the phone is ringing.
|
|
164
|
+
* `onHold`: Trigger when user hold the call. From parameters, you can reviceved correct status from server through `isHold`
|
|
165
|
+
* `onMuted`: Trigger when user muted the call. From parameters, you can reviceved correct status from server through `isMuted`
|
package/android/build.gradle
CHANGED
|
@@ -105,7 +105,8 @@ dependencies {
|
|
|
105
105
|
// For < 0.71, this will be from the local maven repo
|
|
106
106
|
// For > 0.71, this will be replaced by `com.facebook.react:react-android:$version` by react gradle plugin
|
|
107
107
|
//noinspection GradleDynamicVersion
|
|
108
|
-
|
|
108
|
+
// implementation "com.facebook.react:react-native"
|
|
109
|
+
implementation "com.facebook.react:react-native:+" // From node_modules
|
|
109
110
|
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
|
110
111
|
|
|
111
112
|
api 'vn.vihat.omicall:omi-sdk:0.9.12'
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
2
|
package="com.omikitplugin">
|
|
3
|
+
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
|
|
4
|
+
<uses-permission android:name="android.permission.USE_SIP"/>
|
|
5
|
+
<uses-permission android:name="android.permission.CALL_PHONE"/>
|
|
6
|
+
<uses-permission android:name="android.permission.CAMERA"/>
|
|
7
|
+
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
|
|
8
|
+
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
|
|
3
9
|
|
|
4
10
|
</manifest>
|
|
@@ -10,47 +10,51 @@ import vn.vihat.omicall.omisdk.OmiListener
|
|
|
10
10
|
import vn.vihat.omicall.omisdk.OmiSDKUtils
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
class OmikitPluginModule(reactContext: ReactApplicationContext) :
|
|
13
|
+
class OmikitPluginModule(reactContext: ReactApplicationContext?) :
|
|
14
14
|
ReactContextBaseJavaModule(reactContext), OmiListener {
|
|
15
15
|
|
|
16
16
|
override fun getName(): String {
|
|
17
17
|
return NAME
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
|
|
21
20
|
@ReactMethod
|
|
22
21
|
fun initCall(data: ReadableMap, promise: Promise) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
22
|
+
currentActivity?.runOnUiThread {
|
|
23
|
+
val userName = data.getString("userName") as String
|
|
24
|
+
val password = data.getString("password") as String
|
|
25
|
+
val realm = data.getString("realm") as String
|
|
26
|
+
OmiClient.register(reactApplicationContext, userName, password, realm)
|
|
27
|
+
ActivityCompat.requestPermissions(
|
|
28
|
+
currentActivity!!,
|
|
29
|
+
arrayOf(
|
|
30
|
+
Manifest.permission.USE_SIP,
|
|
31
|
+
Manifest.permission.CALL_PHONE,
|
|
32
|
+
Manifest.permission.POST_NOTIFICATIONS,
|
|
33
|
+
Manifest.permission.CAMERA,
|
|
34
|
+
Manifest.permission.MODIFY_AUDIO_SETTINGS,
|
|
35
|
+
Manifest.permission.RECORD_AUDIO,
|
|
36
|
+
),
|
|
37
|
+
0,
|
|
38
|
+
)
|
|
39
|
+
OmiClient.instance.setListener(this)
|
|
40
|
+
promise.resolve(true)
|
|
41
|
+
}
|
|
40
42
|
}
|
|
41
43
|
|
|
42
44
|
@ReactMethod
|
|
43
45
|
fun updateToken(data: ReadableMap, promise: Promise) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
46
|
+
currentActivity?.runOnUiThread {
|
|
47
|
+
val deviceTokenAndroid = data.getString("fcmToken") as String
|
|
48
|
+
val appId = data.getString("appId") as String
|
|
49
|
+
val deviceId = data.getString("deviceId") as String
|
|
50
|
+
OmiClient.instance.updatePushToken(
|
|
51
|
+
"",
|
|
52
|
+
deviceTokenAndroid,
|
|
53
|
+
deviceId,
|
|
54
|
+
appId
|
|
55
|
+
)
|
|
56
|
+
promise.resolve(true)
|
|
57
|
+
}
|
|
54
58
|
}
|
|
55
59
|
|
|
56
60
|
|
|
@@ -146,15 +150,16 @@ class OmikitPluginModule(reactContext: ReactApplicationContext) :
|
|
|
146
150
|
grantResults: IntArray,
|
|
147
151
|
act: ReactActivity,
|
|
148
152
|
) {
|
|
149
|
-
|
|
153
|
+
act.runOnUiThread {
|
|
154
|
+
OmiSDKUtils.handlePermissionRequest(requestCode, permissions, grantResults, act)
|
|
155
|
+
}
|
|
150
156
|
}
|
|
151
157
|
}
|
|
152
158
|
|
|
153
159
|
override fun incomingReceived(callerId: Int, phoneNumber: String?) {
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
))
|
|
160
|
+
val map: WritableMap = WritableNativeMap()
|
|
161
|
+
map.putInt("callerId", callerId)
|
|
162
|
+
sendEvent("phoneNumber", phoneNumber)
|
|
158
163
|
}
|
|
159
164
|
|
|
160
165
|
override fun onCallEnd() {
|
|
@@ -170,13 +175,13 @@ class OmikitPluginModule(reactContext: ReactApplicationContext) :
|
|
|
170
175
|
}
|
|
171
176
|
|
|
172
177
|
override fun onHold(isHold: Boolean) {
|
|
173
|
-
|
|
178
|
+
sendEvent("onHold", null)
|
|
174
179
|
}
|
|
175
180
|
|
|
176
181
|
override fun onMuted(isMuted: Boolean) {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
)
|
|
182
|
+
val map: WritableMap = WritableNativeMap()
|
|
183
|
+
map.putBoolean("isMuted", isMuted)
|
|
184
|
+
sendEvent("onMuted", map)
|
|
180
185
|
}
|
|
181
186
|
|
|
182
187
|
override fun onRinging() {
|
|
@@ -184,7 +189,9 @@ class OmikitPluginModule(reactContext: ReactApplicationContext) :
|
|
|
184
189
|
}
|
|
185
190
|
|
|
186
191
|
private fun sendEvent(eventName: String?, params: Any?) {
|
|
187
|
-
|
|
188
|
-
.
|
|
192
|
+
currentActivity?.runOnUiThread {
|
|
193
|
+
reactApplicationContext.getJSModule(RCTNativeAppEventEmitter::class.java)
|
|
194
|
+
.emit(eventName, params)
|
|
195
|
+
}
|
|
189
196
|
}
|
|
190
197
|
}
|
|
@@ -78,7 +78,7 @@ class CallManager {
|
|
|
78
78
|
}
|
|
79
79
|
if (call.callState == .disconnected) {
|
|
80
80
|
DispatchQueue.main.async {
|
|
81
|
-
|
|
81
|
+
OmikitPlugin.instance.sendEvent(withName: onCallEnd, body: [:])
|
|
82
82
|
self.currentConfirmedCall = nil
|
|
83
83
|
}
|
|
84
84
|
}
|
|
@@ -95,7 +95,7 @@ class CallManager {
|
|
|
95
95
|
case .calling:
|
|
96
96
|
if (!call.isIncoming) {
|
|
97
97
|
NSLog("Outgoing call, in CALLING state, with UUID \(call.uuid)")
|
|
98
|
-
|
|
98
|
+
OmikitPlugin.instance.sendEvent(withName: onRinging, body: [:])
|
|
99
99
|
}
|
|
100
100
|
break
|
|
101
101
|
case .early:
|
|
@@ -112,15 +112,14 @@ class CallManager {
|
|
|
112
112
|
DispatchQueue.main.async {
|
|
113
113
|
if (!call.isIncoming) {
|
|
114
114
|
NSLog("Outgoing call, in CONFIRMED state, with UUID: \(call.uuid)")
|
|
115
|
-
|
|
116
|
-
|
|
115
|
+
OmikitPlugin.instance.sendEvent(withName: onCallEstablished, body: [:])
|
|
116
|
+
OmikitPlugin.instance.sendEvent(withName: onMuted, body: ["isMuted": call.muted])
|
|
117
117
|
self.currentConfirmedCall = call
|
|
118
118
|
return
|
|
119
119
|
}
|
|
120
|
-
//call video
|
|
121
120
|
NSLog("Outgoing call, in CONFIRMED state, with UUID: \(call.uuid)")
|
|
122
|
-
|
|
123
|
-
|
|
121
|
+
OmikitPlugin.instance.sendEvent(withName: onCallEstablished, body: [:])
|
|
122
|
+
OmikitPlugin.instance.sendEvent(withName: onMuted, body: ["isMuted": call.muted])
|
|
124
123
|
self.currentConfirmedCall = call
|
|
125
124
|
}
|
|
126
125
|
break
|
|
@@ -133,30 +132,24 @@ class CallManager {
|
|
|
133
132
|
print(omiLib.getCurrentCall()?.uuid.uuidString)
|
|
134
133
|
print(call.uuid.uuidString)
|
|
135
134
|
if let currentActiveCall = currentConfirmedCall, currentActiveCall.uuid.uuidString == call.uuid.uuidString {
|
|
136
|
-
|
|
135
|
+
OmikitPlugin.instance.sendEvent(withName: onCallEnd, body: [:])
|
|
137
136
|
currentConfirmedCall = nil
|
|
138
137
|
break
|
|
139
138
|
}
|
|
140
139
|
if currentConfirmedCall == nil {
|
|
141
|
-
|
|
140
|
+
OmikitPlugin.instance.sendEvent(withName: onCallEnd, body: [:])
|
|
142
141
|
break
|
|
143
142
|
}
|
|
144
143
|
print(omiLib.getNewestCall()?.uuid.uuidString)
|
|
145
144
|
break
|
|
146
145
|
case .incoming:
|
|
147
|
-
|
|
148
|
-
// "callerId": call.callId,
|
|
149
|
-
// "phoneNumber": call.callerNumber
|
|
150
|
-
// ])SwiftOmikitPlugin.instance?.sendEvent(incomingReceived, [
|
|
151
|
-
// "callerId": call.callId,
|
|
152
|
-
// "phoneNumber": call.callerNumber
|
|
153
|
-
// ])
|
|
146
|
+
OmikitPlugin.instance.sendEvent(withName: incomingReceived, body: ["callerId": call.callId,"phoneNumber": call.callerNumber])
|
|
154
147
|
break
|
|
155
148
|
case .muted:
|
|
156
|
-
|
|
149
|
+
OmikitPlugin.instance.sendEvent(withName: onMuted, body: ["isMuted": call.muted])
|
|
157
150
|
break
|
|
158
151
|
case .hold:
|
|
159
|
-
|
|
152
|
+
OmikitPlugin.instance.sendEvent(withName: onHold, body: ["isHold": call.onHold])
|
|
160
153
|
break
|
|
161
154
|
@unknown default:
|
|
162
155
|
NSLog("Default call state")
|
|
@@ -183,6 +176,7 @@ class CallManager {
|
|
|
183
176
|
NSLog("error hanging up call(\(call.uuid.uuidString)): \(error!)")
|
|
184
177
|
}
|
|
185
178
|
}
|
|
179
|
+
OmikitPlugin.instance.sendEvent(withName: onCallEnd, body: [:])
|
|
186
180
|
NotificationCenter.default.removeObserver(self)
|
|
187
181
|
}
|
|
188
182
|
|
|
@@ -196,13 +190,14 @@ class CallManager {
|
|
|
196
190
|
NSLog("error hanging up call(\(call.uuid.uuidString)): \(error!)")
|
|
197
191
|
}
|
|
198
192
|
}
|
|
193
|
+
OmikitPlugin.instance.sendEvent(withName: onCallEnd, body: [:])
|
|
199
194
|
NotificationCenter.default.removeObserver(self)
|
|
200
195
|
}
|
|
201
196
|
|
|
202
197
|
|
|
203
198
|
func endAllCalls() {
|
|
204
199
|
omiLib.callManager.endAllCalls()
|
|
205
|
-
|
|
200
|
+
OmikitPlugin.instance.sendEvent(withName: onCallEnd, body: [:])
|
|
206
201
|
NotificationCenter.default.removeObserver(self)
|
|
207
202
|
}
|
|
208
203
|
|
|
@@ -36,12 +36,12 @@ let SETINPUT = "SET_INPUT"
|
|
|
36
36
|
let SETOUTPUT = "SET_OUTPUT"
|
|
37
37
|
|
|
38
38
|
//LISTENER
|
|
39
|
-
let onCallEstablished = "
|
|
40
|
-
let onCallEnd = "
|
|
41
|
-
let incomingReceived = "
|
|
42
|
-
let onRinging = "
|
|
43
|
-
let onConnectionTimeout = "
|
|
44
|
-
let onHold = "
|
|
45
|
-
let onMuted = "
|
|
39
|
+
let onCallEstablished = "onCallEstablished"
|
|
40
|
+
let onCallEnd = "onCallEnd"
|
|
41
|
+
let incomingReceived = "incomingReceived"
|
|
42
|
+
let onRinging = "onRinging"
|
|
43
|
+
let onConnectionTimeout = "onConnectionTimeout"
|
|
44
|
+
let onHold = "onHold"
|
|
45
|
+
let onMuted = "onMuted"
|
|
46
46
|
|
|
47
47
|
|
package/ios/OmikitPlugin.m
CHANGED
|
@@ -8,10 +8,28 @@ RCT_EXTERN_METHOD(updateToken:(id)data
|
|
|
8
8
|
RCT_EXTERN_METHOD(initCall:(id)data
|
|
9
9
|
withResolver:(RCTPromiseResolveBlock)resolve
|
|
10
10
|
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
11
|
+
RCT_EXTERN_METHOD(startCall:(id)data
|
|
12
|
+
withResolver:(RCTPromiseResolveBlock)resolve
|
|
13
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
14
|
+
RCT_EXTERN_METHOD(endCall:(RCTPromiseResolveBlock)resolve
|
|
15
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
16
|
+
RCT_EXTERN_METHOD(toggleMute:
|
|
17
|
+
(RCTPromiseResolveBlock)resolve
|
|
18
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
19
|
+
RCT_EXTERN_METHOD(toggleSpeak:(id)data
|
|
20
|
+
withResolver: (RCTPromiseResolveBlock)resolve
|
|
21
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
22
|
+
RCT_EXTERN_METHOD(sendDTMF:(id)data
|
|
23
|
+
withResolver: (RCTPromiseResolveBlock)resolve
|
|
24
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
11
25
|
|
|
12
26
|
+ (BOOL)requiresMainQueueSetup
|
|
13
27
|
{
|
|
14
|
-
return
|
|
28
|
+
return YES;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
- (dispatch_queue_t)methodQueue {
|
|
32
|
+
return dispatch_get_main_queue();
|
|
15
33
|
}
|
|
16
34
|
|
|
17
35
|
@end
|
package/ios/OmikitPlugin.swift
CHANGED
|
@@ -1,19 +1,82 @@
|
|
|
1
1
|
import Foundation
|
|
2
|
+
import React
|
|
2
3
|
|
|
3
4
|
@objc(OmikitPlugin)
|
|
4
|
-
class OmikitPlugin:
|
|
5
|
+
class OmikitPlugin: RCTEventEmitter {
|
|
6
|
+
|
|
7
|
+
public static var instance : OmikitPlugin!
|
|
8
|
+
|
|
9
|
+
override init() {
|
|
10
|
+
super.init()
|
|
11
|
+
OmikitPlugin.instance = self
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
|
|
5
15
|
@objc(initCall:withResolver:withRejecter:)
|
|
6
|
-
func initCall(data: Any, resolve:RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) -> Void {
|
|
16
|
+
func initCall(data: Any, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
|
|
7
17
|
if let dataOmi = data as? [String: Any] {
|
|
8
18
|
CallManager.shareInstance().initEndpoint(params: dataOmi)
|
|
9
19
|
resolve(true)
|
|
10
20
|
}
|
|
11
21
|
}
|
|
22
|
+
|
|
12
23
|
@objc(updateToken:withResolver:withRejecter:)
|
|
13
|
-
func updateToken(data: Any, resolve:RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) -> Void {
|
|
24
|
+
func updateToken(data: Any, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
|
|
14
25
|
if let dataOmi = data as? [String: Any] {
|
|
15
26
|
CallManager.shareInstance().updateToken(params: dataOmi)
|
|
16
27
|
resolve(true)
|
|
17
28
|
}
|
|
18
29
|
}
|
|
30
|
+
|
|
31
|
+
@objc(startCall:withResolver:withRejecter:)
|
|
32
|
+
func startCall(data: Any, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
|
|
33
|
+
if let dataOmi = data as? [String: Any] {
|
|
34
|
+
let phoneNumber = dataOmi["phoneNumber"] as! String
|
|
35
|
+
var isVideo = false
|
|
36
|
+
if let isVideoCall = dataOmi["isVideo"] as? Bool {
|
|
37
|
+
isVideo = isVideoCall
|
|
38
|
+
}
|
|
39
|
+
CallManager.shareInstance().startCall(phoneNumber, isVideo: isVideo)
|
|
40
|
+
resolve(true)
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
@objc(endCall:withRejecter:)
|
|
45
|
+
func endCall(resolve:RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void {
|
|
46
|
+
CallManager.shareInstance().endCurrentConfirmCall()
|
|
47
|
+
resolve(true)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
@objc(toggleMute:withRejecter:)
|
|
51
|
+
func toggleMute(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
|
|
52
|
+
CallManager.shareInstance().toggleMute {
|
|
53
|
+
NSLog("done toggle mute")
|
|
54
|
+
}
|
|
55
|
+
resolve(true)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
@objc(toggleSpeak:withResolver:withRejecter:)
|
|
59
|
+
func toggleSpeak(data: Any, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
|
|
60
|
+
CallManager.shareInstance().toogleSpeaker()
|
|
61
|
+
resolve(true)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
@objc(sendDTMF:withResolver:withRejecter:)
|
|
65
|
+
func sendDTMF(data: Any, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
|
|
66
|
+
if let dataOmi = data as? [String: Any] {
|
|
67
|
+
CallManager.shareInstance().sendDTMF(character: dataOmi["character"] as! String)
|
|
68
|
+
resolve(true)
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
override func supportedEvents() -> [String]! {
|
|
73
|
+
return [
|
|
74
|
+
"incomingReceived",
|
|
75
|
+
"onCallEnd",
|
|
76
|
+
"onCallEstablished",
|
|
77
|
+
"onConnectionTimeout",
|
|
78
|
+
"onMuted",
|
|
79
|
+
"onRinging"
|
|
80
|
+
]
|
|
81
|
+
}
|
|
19
82
|
}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -7,7 +7,6 @@ exports.endCall = endCall;
|
|
|
7
7
|
exports.initCall = initCall;
|
|
8
8
|
exports.omiEmitter = void 0;
|
|
9
9
|
exports.onHold = onHold;
|
|
10
|
-
exports.onMute = onMute;
|
|
11
10
|
exports.sendDTMF = sendDTMF;
|
|
12
11
|
exports.startCall = startCall;
|
|
13
12
|
exports.toggleMute = toggleMute;
|
|
@@ -42,14 +41,11 @@ function toggleMute() {
|
|
|
42
41
|
return OmikitPlugin.toggleMute();
|
|
43
42
|
}
|
|
44
43
|
function toggleSpeak(data) {
|
|
45
|
-
return OmikitPlugin.
|
|
44
|
+
return OmikitPlugin.toggleSpeak(data);
|
|
46
45
|
}
|
|
47
46
|
function onHold(data) {
|
|
48
47
|
return OmikitPlugin.onHold(data);
|
|
49
48
|
}
|
|
50
|
-
function onMute(data) {
|
|
51
|
-
return OmikitPlugin.onMute(data);
|
|
52
|
-
}
|
|
53
49
|
function sendDTMF(data) {
|
|
54
50
|
return OmikitPlugin.sendDTMF(data);
|
|
55
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","LINKING_ERROR","Platform","select","ios","default","OmikitPlugin","NativeModules","Proxy","get","Error","initCall","data","console","log","updateToken","startCall","endCall","toggleMute","toggleSpeak","onHold","
|
|
1
|
+
{"version":3,"names":["_reactNative","require","LINKING_ERROR","Platform","select","ios","default","OmikitPlugin","NativeModules","Proxy","get","Error","initCall","data","console","log","updateToken","startCall","endCall","toggleMute","toggleSpeak","onHold","sendDTMF","omiEmitter","NativeEventEmitter","exports"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEA,MAAMC,aAAa,GAChB,wEAAuE,GACxEC,qBAAQ,CAACC,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAEjC,MAAMC,YAAY,GAAGC,0BAAa,CAACD,YAAY,GAC3CC,0BAAa,CAACD,YAAY,GAC1B,IAAIE,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACT,aAAa,CAAC;EAChC;AACF,CAAC,CACF;AAEE,SAASU,QAAQA,CAACC,IAAS,EAAoB;EACpDC,OAAO,CAACC,GAAG,CAACF,IAAI,CAAC;EACjB,OAAON,YAAY,CAACK,QAAQ,CAACC,IAAI,CAAC;AACpC;AAEO,SAASG,WAAWA,CAACH,IAAS,EAAiB;EACpDC,OAAO,CAACC,GAAG,CAACF,IAAI,CAAC;EACjB,OAAON,YAAY,CAACS,WAAW,CAACH,IAAI,CAAC;AACvC;AAEO,SAASI,SAASA,CAACJ,IAAS,EAAoB;EACrDC,OAAO,CAACC,GAAG,CAACF,IAAI,CAAC;EACjB,OAAON,YAAY,CAACU,SAAS,CAACJ,IAAI,CAAC;AACrC;AAEO,SAASK,OAAOA,CAAA,EAAqB;EAC1C,OAAOX,YAAY,CAACW,OAAO,EAAE;AAC/B;AAEO,SAASC,UAAUA,CAAA,EAAqB;EAC7C,OAAOZ,YAAY,CAACY,UAAU,EAAE;AAClC;AAEO,SAASC,WAAWA,CAACP,IAAS,EAAoB;EACvD,OAAON,YAAY,CAACa,WAAW,CAACP,IAAI,CAAC;AACvC;AAEO,SAASQ,MAAMA,CAACR,IAAS,EAAoB;EAClD,OAAON,YAAY,CAACc,MAAM,CAACR,IAAI,CAAC;AAClC;AAEO,SAASS,QAAQA,CAACT,IAAS,EAAoB;EACpD,OAAON,YAAY,CAACe,QAAQ,CAACT,IAAI,CAAC;AACpC;AAEO,MAAMU,UAAU,GAAG,IAAIC,+BAAkB,CAACjB,YAAY,CAAC;AAACkB,OAAA,CAAAF,UAAA,GAAAA,UAAA"}
|
package/lib/module/index.js
CHANGED
|
@@ -27,14 +27,11 @@ export function toggleMute() {
|
|
|
27
27
|
return OmikitPlugin.toggleMute();
|
|
28
28
|
}
|
|
29
29
|
export function toggleSpeak(data) {
|
|
30
|
-
return OmikitPlugin.
|
|
30
|
+
return OmikitPlugin.toggleSpeak(data);
|
|
31
31
|
}
|
|
32
32
|
export function onHold(data) {
|
|
33
33
|
return OmikitPlugin.onHold(data);
|
|
34
34
|
}
|
|
35
|
-
export function onMute(data) {
|
|
36
|
-
return OmikitPlugin.onMute(data);
|
|
37
|
-
}
|
|
38
35
|
export function sendDTMF(data) {
|
|
39
36
|
return OmikitPlugin.sendDTMF(data);
|
|
40
37
|
}
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeModules","Platform","NativeEventEmitter","LINKING_ERROR","select","ios","default","OmikitPlugin","Proxy","get","Error","initCall","data","console","log","updateToken","startCall","endCall","toggleMute","toggleSpeak","onHold","
|
|
1
|
+
{"version":3,"names":["NativeModules","Platform","NativeEventEmitter","LINKING_ERROR","select","ios","default","OmikitPlugin","Proxy","get","Error","initCall","data","console","log","updateToken","startCall","endCall","toggleMute","toggleSpeak","onHold","sendDTMF","omiEmitter"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"AAAA,SAASA,aAAa,EAAEC,QAAQ,EAAEC,kBAAkB,QAAQ,cAAc;AAE1E,MAAMC,aAAa,GAChB,wEAAuE,GACxEF,QAAQ,CAACG,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAEjC,MAAMC,YAAY,GAAGP,aAAa,CAACO,YAAY,GAC3CP,aAAa,CAACO,YAAY,GAC1B,IAAIC,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACP,aAAa,CAAC;EAChC;AACF,CAAC,CACF;AAEL,OAAO,SAASQ,QAAQA,CAACC,IAAS,EAAoB;EACpDC,OAAO,CAACC,GAAG,CAACF,IAAI,CAAC;EACjB,OAAOL,YAAY,CAACI,QAAQ,CAACC,IAAI,CAAC;AACpC;AAEA,OAAO,SAASG,WAAWA,CAACH,IAAS,EAAiB;EACpDC,OAAO,CAACC,GAAG,CAACF,IAAI,CAAC;EACjB,OAAOL,YAAY,CAACQ,WAAW,CAACH,IAAI,CAAC;AACvC;AAEA,OAAO,SAASI,SAASA,CAACJ,IAAS,EAAoB;EACrDC,OAAO,CAACC,GAAG,CAACF,IAAI,CAAC;EACjB,OAAOL,YAAY,CAACS,SAAS,CAACJ,IAAI,CAAC;AACrC;AAEA,OAAO,SAASK,OAAOA,CAAA,EAAqB;EAC1C,OAAOV,YAAY,CAACU,OAAO,EAAE;AAC/B;AAEA,OAAO,SAASC,UAAUA,CAAA,EAAqB;EAC7C,OAAOX,YAAY,CAACW,UAAU,EAAE;AAClC;AAEA,OAAO,SAASC,WAAWA,CAACP,IAAS,EAAoB;EACvD,OAAOL,YAAY,CAACY,WAAW,CAACP,IAAI,CAAC;AACvC;AAEA,OAAO,SAASQ,MAAMA,CAACR,IAAS,EAAoB;EAClD,OAAOL,YAAY,CAACa,MAAM,CAACR,IAAI,CAAC;AAClC;AAEA,OAAO,SAASS,QAAQA,CAACT,IAAS,EAAoB;EACpD,OAAOL,YAAY,CAACc,QAAQ,CAACT,IAAI,CAAC;AACpC;AAEA,OAAO,MAAMU,UAAU,GAAG,IAAIpB,kBAAkB,CAACK,YAAY,CAAC"}
|
|
@@ -6,7 +6,6 @@ export declare function endCall(): Promise<boolean>;
|
|
|
6
6
|
export declare function toggleMute(): Promise<boolean>;
|
|
7
7
|
export declare function toggleSpeak(data: any): Promise<boolean>;
|
|
8
8
|
export declare function onHold(data: any): Promise<boolean>;
|
|
9
|
-
export declare function onMute(data: any): Promise<boolean>;
|
|
10
9
|
export declare function sendDTMF(data: any): Promise<boolean>;
|
|
11
10
|
export declare const omiEmitter: NativeEventEmitter;
|
|
12
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA2B,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAmB3E,wBAAgB,QAAQ,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAGpD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAGrD;AAED,wBAAgB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAE1C;AAED,wBAAgB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAE7C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAEvD;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAElD;AAED,wBAAgB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA2B,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAmB3E,wBAAgB,QAAQ,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAGpD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAGrD;AAED,wBAAgB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAE1C;AAED,wBAAgB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAE7C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAEvD;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAElD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAEpD;AAED,eAAO,MAAM,UAAU,oBAAuC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "omikit-plugin",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "Omikit Plugin by ViHAT",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
7
7
|
"types": "lib/typescript/index.d.ts",
|
|
@@ -70,8 +70,8 @@
|
|
|
70
70
|
"jest": "^28.1.1",
|
|
71
71
|
"pod-install": "^0.1.0",
|
|
72
72
|
"prettier": "^2.0.5",
|
|
73
|
-
"react": "18.
|
|
74
|
-
"react-native": "0.71.3",
|
|
73
|
+
"react": "^18.0.0",
|
|
74
|
+
"react-native": "^0.71.3",
|
|
75
75
|
"react-native-builder-bob": "^0.20.0",
|
|
76
76
|
"release-it": "^15.0.0",
|
|
77
77
|
"typescript": "^4.5.2"
|
package/src/index.tsx
CHANGED
|
@@ -41,17 +41,13 @@ export function toggleMute(): Promise<boolean> {
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
export function toggleSpeak(data: any): Promise<boolean> {
|
|
44
|
-
return OmikitPlugin.
|
|
44
|
+
return OmikitPlugin.toggleSpeak(data);
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
export function onHold(data: any): Promise<boolean> {
|
|
48
48
|
return OmikitPlugin.onHold(data);
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
export function onMute(data: any): Promise<boolean> {
|
|
52
|
-
return OmikitPlugin.onMute(data);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
51
|
export function sendDTMF(data: any): Promise<boolean> {
|
|
56
52
|
return OmikitPlugin.sendDTMF(data);
|
|
57
53
|
}
|