omikit-plugin 2.4.0 → 3.0.1
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 +77 -35
- package/android/build.gradle +9 -6
- package/android/src/main/java/com/omikitplugin/OmikitPluginModule.kt +73 -42
- package/android/src/main/java/com/omikitplugin/constants/constant.kt +1 -0
- package/ios/CallProcess/CallManager.swift +151 -181
- package/ios/CallProcess/CallState.swift +1 -0
- package/ios/Constant/Constant.swift +1 -1
- package/ios/Library/OmikitPlugin.m +18 -0
- package/ios/Library/OmikitPlugin.swift +41 -15
- package/lib/commonjs/index.js +11 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/omi_call_state.js +1 -0
- package/lib/commonjs/omi_call_state.js.map +1 -1
- package/lib/commonjs/omi_start_call_status.js +21 -0
- package/lib/commonjs/omi_start_call_status.js.map +1 -0
- package/lib/commonjs/omikit.js +14 -6
- package/lib/commonjs/omikit.js.map +1 -1
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/omi_call_state.js +1 -0
- package/lib/module/omi_call_state.js.map +1 -1
- package/lib/module/omi_start_call_status.js +14 -0
- package/lib/module/omi_start_call_status.js.map +1 -0
- package/lib/module/omikit.js +11 -6
- package/lib/module/omikit.js.map +1 -1
- package/lib/typescript/index.d.ts +1 -0
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/omi_call_state.d.ts +2 -1
- package/lib/typescript/omi_call_state.d.ts.map +1 -1
- package/lib/typescript/omi_start_call_status.d.ts +13 -0
- package/lib/typescript/omi_start_call_status.d.ts.map +1 -0
- package/lib/typescript/omikit.d.ts +6 -2
- package/lib/typescript/omikit.d.ts.map +1 -1
- package/omikit-plugin.podspec +1 -1
- package/package.json +1 -1
- package/src/index.tsx +1 -0
- package/src/omi_call_state.tsx +1 -0
- package/src/omi_start_call_status.tsx +12 -0
- package/src/omikit.tsx +15 -7
|
@@ -44,31 +44,41 @@ class CallManager {
|
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
func configNotification(data: [String: Any]) {
|
|
48
|
+
let user = UserDefaults.standard
|
|
49
|
+
if let title = data["missedCallTitle"] as? String, let message = data["prefixMissedCallMessage"] as? String {
|
|
50
|
+
user.set(title, forKey: "omicall/missedCallTitle")
|
|
51
|
+
user.set(message, forKey: "omicall/prefixMissedCallMessage")
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
47
55
|
private func requestPermission(isVideo: Bool) {
|
|
48
56
|
AVCaptureDevice.requestAccess(for: .audio) { _ in
|
|
49
|
-
print("request audio")
|
|
57
|
+
// print("request audio")
|
|
50
58
|
}
|
|
51
59
|
if isVideo {
|
|
52
60
|
AVCaptureDevice.requestAccess(for: .video) { _ in
|
|
53
|
-
print("request video")
|
|
61
|
+
// print("request video")
|
|
54
62
|
}
|
|
55
63
|
}
|
|
56
64
|
}
|
|
57
65
|
|
|
58
66
|
func initWithApiKeyEndpoint(params: [String: Any]) -> Bool {
|
|
59
67
|
//request permission
|
|
60
|
-
var result =
|
|
68
|
+
var result = false
|
|
61
69
|
if let usrUuid = params["usrUuid"] as? String, let fullName = params["fullName"] as? String, let apiKey = params["apiKey"] as? String {
|
|
62
70
|
result = OmiClient.initWithUUID(usrUuid, fullName: fullName, apiKey: apiKey)
|
|
63
71
|
}
|
|
64
|
-
|
|
65
|
-
|
|
72
|
+
if (result) {
|
|
73
|
+
let isVideo = (params["isVideo"] as? Bool) ?? true
|
|
74
|
+
requestPermission(isVideo: isVideo)
|
|
75
|
+
}
|
|
66
76
|
return result
|
|
67
77
|
}
|
|
68
78
|
|
|
69
79
|
|
|
70
80
|
func initWithUserPasswordEndpoint(params: [String: Any]) -> Bool {
|
|
71
|
-
if let userName = params["userName"] as? String, let password = params["password"] as? String, let realm = params["realm"] as? String
|
|
81
|
+
if let userName = params["userName"] as? String, let password = params["password"] as? String, let realm = params["realm"] as? String {
|
|
72
82
|
OmiClient.initWithUsername(userName, password: password, realm: realm)
|
|
73
83
|
}
|
|
74
84
|
let isVideo = (params["isVideo"] as? Bool) ?? true
|
|
@@ -76,51 +86,6 @@ class CallManager {
|
|
|
76
86
|
return true
|
|
77
87
|
}
|
|
78
88
|
|
|
79
|
-
func registerNotificationCenter() {
|
|
80
|
-
DispatchQueue.main.async { [weak self] in
|
|
81
|
-
guard let self = self else { return }
|
|
82
|
-
NotificationCenter.default.removeObserver(CallManager.instance!)
|
|
83
|
-
NotificationCenter.default.addObserver(CallManager.instance!,
|
|
84
|
-
selector: #selector(self.callStateChanged(_:)),
|
|
85
|
-
name: NSNotification.Name.OMICallStateChanged,
|
|
86
|
-
object: nil
|
|
87
|
-
)
|
|
88
|
-
NotificationCenter.default.addObserver(CallManager.instance!,
|
|
89
|
-
selector: #selector(self.callDealloc(_:)),
|
|
90
|
-
name: NSNotification.Name.OMICallDealloc,
|
|
91
|
-
object: nil
|
|
92
|
-
)
|
|
93
|
-
NotificationCenter.default.addObserver(CallManager.instance!,
|
|
94
|
-
selector: #selector(self.switchBoardAnswer(_:)),
|
|
95
|
-
name: NSNotification.Name.OMICallSwitchBoardAnswer,
|
|
96
|
-
object: nil
|
|
97
|
-
)
|
|
98
|
-
NotificationCenter.default.addObserver(CallManager.instance!, selector: #selector(self.updateNetworkHealth(_:)), name: NSNotification.Name.OMICallNetworkQuality, object: nil)
|
|
99
|
-
self.showMissedCall()
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
@objc func updateNetworkHealth(_ notification: NSNotification) {
|
|
104
|
-
guard let userInfo = notification.userInfo,
|
|
105
|
-
let state = userInfo[OMINotificationNetworkStatusKey] as? Int else {
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
OmikitPlugin.instance.sendEvent(withName: CALL_QUALITY, body: ["quality": state])
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
func configNotification(data: [String: Any]) {
|
|
112
|
-
let user = UserDefaults.standard
|
|
113
|
-
if let prefix = data["prefix"] as? String, let userNameKey = data["userNameKey"] as? String {
|
|
114
|
-
user.set(prefix, forKey: KEY_OMI_PREFIX)
|
|
115
|
-
user.set(userNameKey, forKey: KEY_OMI_USER_NAME_KEY)
|
|
116
|
-
}
|
|
117
|
-
if let title = data["missedCallTitle"] as? String, let message = data["prefixMissedCallMessage"] as? String {
|
|
118
|
-
let user = UserDefaults.standard
|
|
119
|
-
user.set(title, forKey: "omicall/missedCallTitle")
|
|
120
|
-
user.set(message, forKey: "omicall/prefixMissedCallMessage")
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
89
|
func showMissedCall() {
|
|
125
90
|
OmiClient.setMissedCall { call in
|
|
126
91
|
UNUserNotificationCenter.current().getNotificationSettings { settings in
|
|
@@ -140,19 +105,44 @@ class CallManager {
|
|
|
140
105
|
"omisdkIsVideo": call.isVideo,
|
|
141
106
|
]
|
|
142
107
|
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1, repeats: false)
|
|
143
|
-
//getting the notification request
|
|
144
108
|
let id = Int.random(in: 0..<10000000)
|
|
145
109
|
let request = UNNotificationRequest(identifier: "\(id)", content: content, trigger: trigger)
|
|
146
|
-
//adding the notification to notification center
|
|
147
110
|
UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
|
|
148
111
|
default:
|
|
149
|
-
break
|
|
112
|
+
break
|
|
150
113
|
}
|
|
151
114
|
}
|
|
152
115
|
}
|
|
153
116
|
}
|
|
154
117
|
|
|
155
118
|
|
|
119
|
+
func registerNotificationCenter(showMissedCall: Bool) {
|
|
120
|
+
DispatchQueue.main.async { [weak self] in
|
|
121
|
+
guard let self = self else { return }
|
|
122
|
+
NotificationCenter.default.removeObserver(CallManager.instance!)
|
|
123
|
+
NotificationCenter.default.addObserver(CallManager.instance!,
|
|
124
|
+
selector: #selector(self.callStateChanged(_:)),
|
|
125
|
+
name: NSNotification.Name.OMICallStateChanged,
|
|
126
|
+
object: nil
|
|
127
|
+
)
|
|
128
|
+
NotificationCenter.default.addObserver(CallManager.instance!,
|
|
129
|
+
selector: #selector(self.callDealloc(_:)),
|
|
130
|
+
name: NSNotification.Name.OMICallDealloc,
|
|
131
|
+
object: nil
|
|
132
|
+
)
|
|
133
|
+
NotificationCenter.default.addObserver(CallManager.instance!,
|
|
134
|
+
selector: #selector(self.switchBoardAnswer(_:)),
|
|
135
|
+
name: NSNotification.Name.OMICallSwitchBoardAnswer,
|
|
136
|
+
object: nil
|
|
137
|
+
)
|
|
138
|
+
NotificationCenter.default.addObserver(CallManager.instance!, selector: #selector(self.updateNetworkHealth(_:)), name: NSNotification.Name.OMICallNetworkQuality, object: nil)
|
|
139
|
+
NotificationCenter.default.addObserver(CallManager.instance!, selector: #selector(self.audioChanged(_:)), name: NSNotification.Name.OMICallAudioRouteChange, object: nil)
|
|
140
|
+
if (showMissedCall) {
|
|
141
|
+
self.showMissedCall()
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
156
146
|
func registerVideoEvent() {
|
|
157
147
|
DispatchQueue.main.async {
|
|
158
148
|
NotificationCenter.default.addObserver(CallManager.instance!,
|
|
@@ -169,13 +159,23 @@ class CallManager {
|
|
|
169
159
|
}
|
|
170
160
|
}
|
|
171
161
|
|
|
172
|
-
@objc func
|
|
162
|
+
@objc func audioChanged(_ notification: NSNotification) {
|
|
173
163
|
guard let userInfo = notification.userInfo,
|
|
174
|
-
let
|
|
164
|
+
let audioInfo = userInfo[OMINotificationCurrentAudioRouteKey] as? [[String: String]] else {
|
|
175
165
|
return;
|
|
176
166
|
}
|
|
177
|
-
|
|
178
|
-
|
|
167
|
+
OmikitPlugin.instance?.sendEvent(withName: AUDIO_CHANGE, body: [
|
|
168
|
+
"data": audioInfo,
|
|
169
|
+
])
|
|
170
|
+
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
@objc func updateNetworkHealth(_ notification: NSNotification) {
|
|
174
|
+
guard let userInfo = notification.userInfo,
|
|
175
|
+
let state = userInfo[OMINotificationNetworkStatusKey] as? Int else {
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
OmikitPlugin.instance.sendEvent(withName: CALL_QUALITY, body: ["quality": state])
|
|
179
179
|
}
|
|
180
180
|
|
|
181
181
|
@objc func videoUpdate(_ notification: NSNotification) {
|
|
@@ -192,6 +192,15 @@ class CallManager {
|
|
|
192
192
|
}
|
|
193
193
|
}
|
|
194
194
|
|
|
195
|
+
@objc func switchBoardAnswer(_ notification: NSNotification) {
|
|
196
|
+
guard let userInfo = notification.userInfo,
|
|
197
|
+
let sip = userInfo[OMINotificationSIPKey] as? String else {
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
guestPhone = sip
|
|
201
|
+
OmikitPlugin.instance.sendEvent(withName: SWITCHBOARD_ANSWER, body: ["sip": sip])
|
|
202
|
+
}
|
|
203
|
+
|
|
195
204
|
@objc func callDealloc(_ notification: NSNotification) {
|
|
196
205
|
if (tempCallInfo != nil) {
|
|
197
206
|
tempCallInfo!["status"] = CallState.disconnected.rawValue
|
|
@@ -201,30 +210,36 @@ class CallManager {
|
|
|
201
210
|
|
|
202
211
|
@objc fileprivate func callStateChanged(_ notification: NSNotification) {
|
|
203
212
|
guard let userInfo = notification.userInfo,
|
|
204
|
-
let call = userInfo[OMINotificationUserInfoCallKey] as? OMICall
|
|
213
|
+
let call = userInfo[OMINotificationUserInfoCallKey] as? OMICall,
|
|
214
|
+
let callState = userInfo[OMINotificationUserInfoCallStateKey] as? Int else {
|
|
205
215
|
return;
|
|
206
216
|
}
|
|
207
|
-
print("call state")
|
|
208
|
-
print(call.callState)
|
|
209
|
-
switch (
|
|
210
|
-
case .calling:
|
|
211
|
-
NSLog("Outgoing call, in CALLING state, with UUID \(call.uuid)")
|
|
217
|
+
// print("call state")
|
|
218
|
+
// print(call.callState)
|
|
219
|
+
switch (callState) {
|
|
220
|
+
case OMICallState.calling.rawValue:
|
|
221
|
+
// NSLog("Outgoing call, in CALLING state, with UUID \(call.uuid)")
|
|
212
222
|
var callInfo = baseInfoFromCall(call: call)
|
|
213
223
|
callInfo["status"] = CallState.calling.rawValue
|
|
214
224
|
OmikitPlugin.instance.sendEvent(withName: CALL_STATE_CHANGED, body: callInfo)
|
|
215
225
|
break
|
|
216
|
-
case .early:
|
|
226
|
+
case OMICallState.early.rawValue:
|
|
217
227
|
var callInfo = baseInfoFromCall(call: call)
|
|
218
228
|
callInfo["status"] = CallState.early.rawValue
|
|
219
229
|
OmikitPlugin.instance.sendEvent(withName: CALL_STATE_CHANGED, body: callInfo)
|
|
220
230
|
break
|
|
221
|
-
case .connecting:
|
|
231
|
+
case OMICallState.connecting.rawValue:
|
|
222
232
|
var callInfo = baseInfoFromCall(call: call)
|
|
223
233
|
callInfo["status"] = CallState.connecting.rawValue
|
|
224
234
|
OmikitPlugin.instance.sendEvent(withName: CALL_STATE_CHANGED, body: callInfo)
|
|
225
235
|
break
|
|
226
|
-
case .
|
|
227
|
-
|
|
236
|
+
case OMICallState.hold.rawValue:
|
|
237
|
+
var callInfo = baseInfoFromCall(call: call)
|
|
238
|
+
callInfo["status"] = CallState.hold.rawValue
|
|
239
|
+
OmikitPlugin.instance.sendEvent(withName: CALL_STATE_CHANGED, body: callInfo)
|
|
240
|
+
break
|
|
241
|
+
case OMICallState.confirmed.rawValue:
|
|
242
|
+
// NSLog("Outgoing call, in CONFIRMED state, with UUID: \(call)")
|
|
228
243
|
if (videoManager == nil && call.isVideo) {
|
|
229
244
|
videoManager = OMIVideoViewManager.init()
|
|
230
245
|
}
|
|
@@ -235,7 +250,7 @@ class CallManager {
|
|
|
235
250
|
OmikitPlugin.instance.sendEvent(withName: CALL_STATE_CHANGED, body: callInfo)
|
|
236
251
|
OmikitPlugin.instance.sendMuteStatus()
|
|
237
252
|
break
|
|
238
|
-
case .incoming:
|
|
253
|
+
case OMICallState.incoming.rawValue:
|
|
239
254
|
guestPhone = call.callerNumber ?? ""
|
|
240
255
|
DispatchQueue.main.async {[weak self] in
|
|
241
256
|
guard let self = self else { return }
|
|
@@ -247,12 +262,12 @@ class CallManager {
|
|
|
247
262
|
}
|
|
248
263
|
}
|
|
249
264
|
break
|
|
250
|
-
case .disconnected:
|
|
251
|
-
if (!call.connected) {
|
|
252
|
-
NSLog("Call never connected, in DISCONNECTED state, with UUID: \(call.uuid)")
|
|
253
|
-
} else if (!call.userDidHangUp) {
|
|
254
|
-
NSLog("Call remotly ended, in DISCONNECTED state, with UUID: \(call.uuid)")
|
|
255
|
-
}
|
|
265
|
+
case OMICallState.disconnected.rawValue:
|
|
266
|
+
// if (!call.connected) {
|
|
267
|
+
// NSLog("Call never connected, in DISCONNECTED state, with UUID: \(call.uuid)")
|
|
268
|
+
// } else if (!call.userDidHangUp) {
|
|
269
|
+
// NSLog("Call remotly ended, in DISCONNECTED state, with UUID: \(call.uuid)")
|
|
270
|
+
// }
|
|
256
271
|
tempCallInfo = getCallInfo(call: call)
|
|
257
272
|
if (videoManager != nil) {
|
|
258
273
|
videoManager = nil
|
|
@@ -268,33 +283,50 @@ class CallManager {
|
|
|
268
283
|
}
|
|
269
284
|
}
|
|
270
285
|
|
|
286
|
+
private func getCallInfo(call: OMICall) -> [String: Any] {
|
|
287
|
+
var direction = "outbound"
|
|
288
|
+
if (guestPhone.count < 10) {
|
|
289
|
+
direction = "inbound"
|
|
290
|
+
}
|
|
291
|
+
let user = OmiClient.getCurrentSip()
|
|
292
|
+
let status = call.callState == .confirmed ? "answered" : "no_answered"
|
|
293
|
+
let timeEnd = Int(Date().timeIntervalSince1970)
|
|
294
|
+
return [
|
|
295
|
+
"transaction_id" : call.omiId,
|
|
296
|
+
"direction" : direction,
|
|
297
|
+
"source_number" : user,
|
|
298
|
+
"destination_number" : guestPhone,
|
|
299
|
+
"time_start_to_answer" : call.createDate,
|
|
300
|
+
"time_end" : timeEnd,
|
|
301
|
+
"sip_user": user,
|
|
302
|
+
"disposition" : lastStatusCall == nil ? "no_answered" : "answered",
|
|
303
|
+
]
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
|
|
271
307
|
/// Start call
|
|
272
|
-
func startCall(_ phoneNumber: String, isVideo: Bool) ->
|
|
308
|
+
func startCall(_ phoneNumber: String, isVideo: Bool, completion: @escaping (_ : Int) -> Void) {
|
|
273
309
|
guestPhone = phoneNumber
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
return OmiClient.startVideoCall(phoneNumber)
|
|
310
|
+
OmiClient.startCall(phoneNumber, isVideo: isVideo) { status in
|
|
311
|
+
DispatchQueue.main.async {
|
|
312
|
+
completion(status.rawValue)
|
|
278
313
|
}
|
|
279
|
-
return OmiClient.startCall(phoneNumber)
|
|
280
314
|
}
|
|
281
|
-
return false
|
|
282
315
|
}
|
|
283
316
|
|
|
284
317
|
/// Start call
|
|
285
|
-
func startCallWithUuid(_ uuid: String, isVideo: Bool) ->
|
|
286
|
-
let
|
|
287
|
-
if
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
return OmiClient.startVideoCall(phone)
|
|
318
|
+
func startCallWithUuid(_ uuid: String, isVideo: Bool, completion: @escaping (_ : Int) -> Void) {
|
|
319
|
+
let phoneNumber = OmiClient.getPhone(uuid)
|
|
320
|
+
if let phone = phoneNumber {
|
|
321
|
+
guestPhone = phoneNumber ?? ""
|
|
322
|
+
OmiClient.startCall(phone, isVideo: isVideo) { status in
|
|
323
|
+
DispatchQueue.main.async {
|
|
324
|
+
completion(status.rawValue)
|
|
293
325
|
}
|
|
294
|
-
return OmiClient.startCall(phone)
|
|
295
326
|
}
|
|
327
|
+
return
|
|
296
328
|
}
|
|
297
|
-
|
|
329
|
+
completion(OMIStartCallStatus.invalidUuid.rawValue)
|
|
298
330
|
}
|
|
299
331
|
|
|
300
332
|
func endAvailableCall() -> [String: Any] {
|
|
@@ -355,81 +387,16 @@ class CallManager {
|
|
|
355
387
|
OmikitPlugin.instance.sendSpeakerStatus()
|
|
356
388
|
}
|
|
357
389
|
|
|
358
|
-
func
|
|
359
|
-
OmiClient.
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
func getCurrentUser(completion: @escaping (([String: Any]) -> Void)) {
|
|
363
|
-
let prefs = UserDefaults.standard
|
|
364
|
-
if let user = prefs.value(forKey: "User") as? String {
|
|
365
|
-
getUserInfo(phone: user, completion: completion)
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
func getGuestUser(completion: @escaping (([String: Any]) -> Void)) {
|
|
370
|
-
getUserInfo(phone: guestPhone, completion: completion)
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
func getUserInfo(phone: String, completion: @escaping (([String: Any]) -> Void)) {
|
|
374
|
-
if let account = OmiClient.getAccountInfo(phone) as? [String: Any] {
|
|
375
|
-
completion(account)
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
func inputs() -> [[String: String]] {
|
|
380
|
-
let inputs = AVAudioSession.sharedInstance().availableInputs ?? []
|
|
381
|
-
let results = inputs.map { item in
|
|
382
|
-
return [
|
|
383
|
-
"name": item.portName,
|
|
384
|
-
"id": item.uid,
|
|
385
|
-
]
|
|
386
|
-
}
|
|
387
|
-
return results
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
func setInput(id: String) {
|
|
391
|
-
let inputs = AVAudioSession.sharedInstance().availableInputs ?? []
|
|
392
|
-
if let newOutput = inputs.first(where: {$0.uid == id}) {
|
|
393
|
-
try? AVAudioSession.sharedInstance().setPreferredInput(newOutput)
|
|
394
|
-
}
|
|
390
|
+
func getAudioOutputs() -> [[String: String]] {
|
|
391
|
+
return OmiClient.getAudioInDevices()
|
|
395
392
|
}
|
|
396
393
|
|
|
397
|
-
func
|
|
398
|
-
|
|
399
|
-
var results = outputs.map { item in
|
|
400
|
-
return [
|
|
401
|
-
"name": item.portName,
|
|
402
|
-
"id": item.uid,
|
|
403
|
-
]
|
|
404
|
-
}
|
|
405
|
-
let hasSpeaker = results.contains{ $0["name"] == "Speaker" }
|
|
406
|
-
if (!hasSpeaker) {
|
|
407
|
-
results.append([
|
|
408
|
-
"name": "Speaker",
|
|
409
|
-
"id": "Speaker",
|
|
410
|
-
])
|
|
411
|
-
} else {
|
|
412
|
-
results.append([
|
|
413
|
-
"name": "Off Speaker",
|
|
414
|
-
"id": "Off Speaker",
|
|
415
|
-
])
|
|
416
|
-
}
|
|
417
|
-
return results
|
|
394
|
+
func setAudioOutputs(portType: String) {
|
|
395
|
+
return OmiClient.setAudioOutputs(portType)
|
|
418
396
|
}
|
|
419
397
|
|
|
420
|
-
func
|
|
421
|
-
|
|
422
|
-
try? AVAudioSession.sharedInstance().overrideOutputAudioPort(.speaker)
|
|
423
|
-
return
|
|
424
|
-
}
|
|
425
|
-
if (id == "Off Speaker") {
|
|
426
|
-
try? AVAudioSession.sharedInstance().overrideOutputAudioPort(.none)
|
|
427
|
-
return
|
|
428
|
-
}
|
|
429
|
-
let outputs = AVAudioSession.sharedInstance().currentRoute.outputs
|
|
430
|
-
if let newOutput = outputs.first(where: {$0.uid == id}) {
|
|
431
|
-
try? AVAudioSession.sharedInstance().setPreferredInput(newOutput)
|
|
432
|
-
}
|
|
398
|
+
func getCurrentAudio() -> [[String: String]] {
|
|
399
|
+
return OmiClient.getCurrentAudio()
|
|
433
400
|
}
|
|
434
401
|
|
|
435
402
|
//video call
|
|
@@ -460,25 +427,28 @@ class CallManager {
|
|
|
460
427
|
return videoManager.createView(forVideoRemote: frame)
|
|
461
428
|
}
|
|
462
429
|
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
430
|
+
func logout() {
|
|
431
|
+
OmiClient.logout()
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
func getCurrentUser(completion: @escaping (([String: Any]) -> Void)) {
|
|
435
|
+
if let sip = OmiClient.getCurrentSip() {
|
|
436
|
+
getUserInfo(phone: sip, completion: completion)
|
|
437
|
+
} else {
|
|
438
|
+
completion([:])
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
func getGuestUser(completion: @escaping (([String: Any]) -> Void)) {
|
|
443
|
+
getUserInfo(phone: guestPhone, completion: completion)
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
func getUserInfo(phone: String, completion: @escaping (([String: Any]) -> Void)) {
|
|
447
|
+
if let account = OmiClient.getAccountInfo(phone) as? [String: Any] {
|
|
448
|
+
completion(account)
|
|
449
|
+
} else {
|
|
450
|
+
completion([:])
|
|
467
451
|
}
|
|
468
|
-
let prefs = UserDefaults.standard
|
|
469
|
-
let user = prefs.value(forKey: "User") as? String
|
|
470
|
-
let status = call.callState == .confirmed ? "answered" : "no_answered"
|
|
471
|
-
let timeEnd = Int(Date().timeIntervalSince1970)
|
|
472
|
-
return [
|
|
473
|
-
"transaction_id" : call.omiId,
|
|
474
|
-
"direction" : direction,
|
|
475
|
-
"source_number" : user,
|
|
476
|
-
"destination_number" : guestPhone,
|
|
477
|
-
"time_start_to_answer" : call.createDate,
|
|
478
|
-
"time_end" : timeEnd,
|
|
479
|
-
"sip_user": user,
|
|
480
|
-
"disposition" : lastStatusCall == nil ? "no_answered" : "answered",
|
|
481
|
-
]
|
|
482
452
|
}
|
|
483
453
|
|
|
484
454
|
private func baseInfoFromCall(call: OMICall) -> [String: Any] {
|
|
@@ -60,25 +60,43 @@ RCT_EXTERN_METHOD(switchOmiCamera:
|
|
|
60
60
|
RCT_EXTERN_METHOD(toggleOmiVideo:
|
|
61
61
|
(RCTPromiseResolveBlock)resolve
|
|
62
62
|
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
63
|
+
|
|
63
64
|
RCT_EXTERN_METHOD(logout:
|
|
64
65
|
(RCTPromiseResolveBlock)resolve
|
|
65
66
|
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
67
|
+
|
|
66
68
|
RCT_EXTERN_METHOD(registerVideoEvent:
|
|
67
69
|
(RCTPromiseResolveBlock)resolve
|
|
68
70
|
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
71
|
+
|
|
69
72
|
RCT_EXTERN_METHOD(removeVideoEvent:
|
|
70
73
|
(RCTPromiseResolveBlock)resolve
|
|
71
74
|
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
75
|
+
|
|
72
76
|
RCT_EXTERN_METHOD(getCurrentUser:
|
|
73
77
|
(RCTPromiseResolveBlock)resolve
|
|
74
78
|
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
79
|
+
|
|
75
80
|
RCT_EXTERN_METHOD(getGuestUser:
|
|
76
81
|
(RCTPromiseResolveBlock)resolve
|
|
77
82
|
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
83
|
+
|
|
78
84
|
RCT_EXTERN_METHOD(getUserInfo: (id)data
|
|
79
85
|
withResolver:(RCTPromiseResolveBlock)resolve
|
|
80
86
|
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
81
87
|
|
|
88
|
+
RCT_EXTERN_METHOD(getAudio:
|
|
89
|
+
(RCTPromiseResolveBlock)resolve
|
|
90
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
91
|
+
|
|
92
|
+
RCT_EXTERN_METHOD(setAudio: (id)data
|
|
93
|
+
withResolver:(RCTPromiseResolveBlock)resolve
|
|
94
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
95
|
+
|
|
96
|
+
RCT_EXTERN_METHOD(getCurrentAudio:
|
|
97
|
+
(RCTPromiseResolveBlock)resolve
|
|
98
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
99
|
+
|
|
82
100
|
+ (BOOL)requiresMainQueueSetup
|
|
83
101
|
{
|
|
84
102
|
return YES;
|
|
@@ -14,7 +14,7 @@ public class OmikitPlugin: RCTEventEmitter {
|
|
|
14
14
|
|
|
15
15
|
@objc(startServices:withRejecter:)
|
|
16
16
|
func startServices(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
|
|
17
|
-
CallManager.shareInstance().registerNotificationCenter()
|
|
17
|
+
CallManager.shareInstance().registerNotificationCenter(showMissedCall: true)
|
|
18
18
|
resolve(true)
|
|
19
19
|
}
|
|
20
20
|
|
|
@@ -33,13 +33,12 @@ public class OmikitPlugin: RCTEventEmitter {
|
|
|
33
33
|
"callerNumber" : call.callerNumber,
|
|
34
34
|
"status": call.lastStatus,
|
|
35
35
|
"muted": call.muted,
|
|
36
|
-
"
|
|
37
|
-
"isVideo": call.isVideo
|
|
36
|
+
"isVideo": call.isVideo,
|
|
38
37
|
]
|
|
39
38
|
resolve(data)
|
|
40
39
|
return
|
|
41
40
|
}
|
|
42
|
-
resolve(
|
|
41
|
+
resolve(nil)
|
|
43
42
|
}
|
|
44
43
|
|
|
45
44
|
@objc(initCallWithUserPassword:withResolver:withRejecter:)
|
|
@@ -67,22 +66,30 @@ public class OmikitPlugin: RCTEventEmitter {
|
|
|
67
66
|
}
|
|
68
67
|
|
|
69
68
|
@objc(startCall:withResolver:withRejecter:)
|
|
70
|
-
func startCall(data: Any, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
|
|
69
|
+
func startCall(data: Any, resolve: @escaping RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
|
|
71
70
|
if let dataOmi = data as? [String: Any] {
|
|
72
71
|
let phoneNumber = dataOmi["phoneNumber"] as! String
|
|
73
|
-
|
|
74
|
-
let
|
|
75
|
-
|
|
72
|
+
var isVideo = false
|
|
73
|
+
if let isVideoCall = dataOmi["isVideo"] as? Bool {
|
|
74
|
+
isVideo = isVideoCall
|
|
75
|
+
}
|
|
76
|
+
CallManager.shareInstance().startCall(phoneNumber, isVideo: isVideo) { callResult in
|
|
77
|
+
resolve(callResult)
|
|
78
|
+
}
|
|
76
79
|
}
|
|
77
80
|
}
|
|
78
81
|
|
|
79
82
|
@objc(startCallWithUuid:withResolver:withRejecter:)
|
|
80
|
-
func startCallWithUuid(data: Any, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
|
|
83
|
+
func startCallWithUuid(data: Any, resolve: @escaping RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
|
|
81
84
|
if let dataOmi = data as? [String: Any] {
|
|
82
85
|
let uuid = dataOmi["usrUuid"] as! String
|
|
83
|
-
|
|
84
|
-
let
|
|
85
|
-
|
|
86
|
+
var isVideo = false
|
|
87
|
+
if let isVideoCall = dataOmi["isVideo"] as? Bool {
|
|
88
|
+
isVideo = isVideoCall
|
|
89
|
+
}
|
|
90
|
+
CallManager.shareInstance().startCallWithUuid(uuid, isVideo: isVideo) { callResult in
|
|
91
|
+
resolve(callResult)
|
|
92
|
+
}
|
|
86
93
|
}
|
|
87
94
|
}
|
|
88
95
|
|
|
@@ -104,6 +111,7 @@ public class OmikitPlugin: RCTEventEmitter {
|
|
|
104
111
|
if let call = CallManager.shareInstance().getAvailableCall() {
|
|
105
112
|
resolve(call.muted)
|
|
106
113
|
}
|
|
114
|
+
sendMuteStatus()
|
|
107
115
|
}
|
|
108
116
|
|
|
109
117
|
@objc(toggleSpeaker:withRejecter:)
|
|
@@ -171,6 +179,25 @@ public class OmikitPlugin: RCTEventEmitter {
|
|
|
171
179
|
}
|
|
172
180
|
}
|
|
173
181
|
|
|
182
|
+
@objc(getAudio:withRejecter:)
|
|
183
|
+
func getAudio(resolve: @escaping RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void {
|
|
184
|
+
let audios = CallManager.shareInstance().getAudioOutputs()
|
|
185
|
+
resolve(audios)
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
@objc(setAudio:withResolver:withRejecter:)
|
|
189
|
+
func setAudio(data: Any, resolve: @escaping RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void {
|
|
190
|
+
if let dataOmi = data as? [String: Any] {
|
|
191
|
+
let portType = dataOmi["portType"] as! String
|
|
192
|
+
CallManager.shareInstance().setAudioOutputs(portType: portType)
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
@objc(getCurrentAudio:withRejecter:)
|
|
197
|
+
func getCurrentAudio(resolve: @escaping RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void {
|
|
198
|
+
let currentAudio = CallManager.shareInstance().getCurrentAudio()
|
|
199
|
+
resolve(currentAudio)
|
|
200
|
+
}
|
|
174
201
|
|
|
175
202
|
func sendMuteStatus() {
|
|
176
203
|
if let call = CallManager.shareInstance().getAvailableCall() {
|
|
@@ -183,7 +210,6 @@ public class OmikitPlugin: RCTEventEmitter {
|
|
|
183
210
|
}
|
|
184
211
|
|
|
185
212
|
@objc public func didReceive(data: [String: Any]) {
|
|
186
|
-
print(data)
|
|
187
213
|
if let callerNumber = data["omisdkCallerNumber"] as? String, let isVideo = data["omisdkIsVideo"] as? Bool {
|
|
188
214
|
sendEvent(withName: CLICK_MISSED_CALL, body: [
|
|
189
215
|
"callerNumber": callerNumber,
|
|
@@ -192,7 +218,6 @@ public class OmikitPlugin: RCTEventEmitter {
|
|
|
192
218
|
}
|
|
193
219
|
}
|
|
194
220
|
|
|
195
|
-
|
|
196
221
|
public override func supportedEvents() -> [String]! {
|
|
197
222
|
return [
|
|
198
223
|
CALL_STATE_CHANGED,
|
|
@@ -201,7 +226,8 @@ public class OmikitPlugin: RCTEventEmitter {
|
|
|
201
226
|
REMOTE_VIDEO_READY,
|
|
202
227
|
CLICK_MISSED_CALL,
|
|
203
228
|
SWITCHBOARD_ANSWER,
|
|
204
|
-
CALL_QUALITY
|
|
229
|
+
CALL_QUALITY,
|
|
230
|
+
AUDIO_CHANGE,
|
|
205
231
|
]
|
|
206
232
|
}
|
|
207
233
|
}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -47,4 +47,15 @@ Object.keys(_omi_call_state).forEach(function (key) {
|
|
|
47
47
|
}
|
|
48
48
|
});
|
|
49
49
|
});
|
|
50
|
+
var _omi_start_call_status = require("./omi_start_call_status");
|
|
51
|
+
Object.keys(_omi_start_call_status).forEach(function (key) {
|
|
52
|
+
if (key === "default" || key === "__esModule") return;
|
|
53
|
+
if (key in exports && exports[key] === _omi_start_call_status[key]) return;
|
|
54
|
+
Object.defineProperty(exports, key, {
|
|
55
|
+
enumerable: true,
|
|
56
|
+
get: function () {
|
|
57
|
+
return _omi_start_call_status[key];
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
});
|
|
50
61
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_omikit","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_omi_local_camera","_omi_remote_camera","_omi_call_state"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,OAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,OAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,OAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,iBAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,iBAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,iBAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,iBAAA,CAAAL,GAAA;IAAA;EAAA;AAAA;AACA,IAAAM,kBAAA,GAAAV,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAQ,kBAAA,EAAAP,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAM,kBAAA,CAAAN,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,kBAAA,CAAAN,GAAA;IAAA;EAAA;AAAA;AACA,IAAAO,eAAA,GAAAX,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAS,eAAA,EAAAR,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAO,eAAA,CAAAP,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAG,eAAA,CAAAP,GAAA;IAAA;EAAA;AAAA"}
|
|
1
|
+
{"version":3,"names":["_omikit","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_omi_local_camera","_omi_remote_camera","_omi_call_state","_omi_start_call_status"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,OAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,OAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,OAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,iBAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,iBAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,iBAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,iBAAA,CAAAL,GAAA;IAAA;EAAA;AAAA;AACA,IAAAM,kBAAA,GAAAV,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAQ,kBAAA,EAAAP,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAM,kBAAA,CAAAN,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,kBAAA,CAAAN,GAAA;IAAA;EAAA;AAAA;AACA,IAAAO,eAAA,GAAAX,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAS,eAAA,EAAAR,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAO,eAAA,CAAAP,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAG,eAAA,CAAAP,GAAA;IAAA;EAAA;AAAA;AACA,IAAAQ,sBAAA,GAAAZ,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAU,sBAAA,EAAAT,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAQ,sBAAA,CAAAR,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAI,sBAAA,CAAAR,GAAA;IAAA;EAAA;AAAA"}
|