diff --git a/.gitignore b/.gitignore index 2800de6e..1525bb4b 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,6 @@ build/ pubspec.lock + +example/ios/Podfile.lock +example/pubspec.lock \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 4648f013..dac34cc9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,16 @@ +## 2.0.1+1 +* Add Callback AVAudioSession for WebRTC setup +* Fix issue no audio for using WebRTC + +## 2.0.1-dev.2 +* Add Action for onAccept + +## 2.0.1-dev.1 +* Add AVAudioSession Appdelegate(iOS) + +## 2.0.1-dev +* Add AVAudioSession Appdelegate(iOS) + ## 2.0.1 * Fixed some bugs. diff --git a/README.md b/README.md index a2679a3e..68212124 100644 --- a/README.md +++ b/README.md @@ -334,14 +334,36 @@ A Flutter plugin to show incoming call in your Flutter app(Custom for Android/Ca @objc class AppDelegate: FlutterAppDelegate, PKPushRegistryDelegate, CallkitIncomingAppDelegate { ... + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + + //Setup VOIP + let mainQueue = DispatchQueue.main + let voipRegistry: PKPushRegistry = PKPushRegistry(queue: mainQueue) + voipRegistry.delegate = self + voipRegistry.desiredPushTypes = [PKPushType.voIP] + + //Use if using WebRTC + //RTCAudioSession.sharedInstance().useManualAudio = true + //RTCAudioSession.sharedInstance().isAudioEnabled = false + + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } + + // Func Call api for Accept - func onAccept(_ call: Call) { + func onAccept(_ call: Call, _ action: CXAnswerCallAction) { let json = ["action": "ACCEPT", "data": call.data.toJSON()] as [String: Any] print("LOG: onAccept") self.performRequest(parameters: json) { result in switch result { case .success(let data): print("Received data: \(data)") + //Make sure call action.fulfill() when you are done(connected WebRTC - Start counting seconds) + //action.fulfill() case .failure(let error): print("Error: \(error.localizedDescription)") @@ -391,6 +413,18 @@ A Flutter plugin to show incoming call in your Flutter app(Custom for Android/Ca } } } + + func didActivateAudioSession(_ audioSession: AVAudioSession) { + //Use if using WebRTC + //RTCAudioSession.sharedInstance().audioSessionDidActivate(audioSession) + //RTCAudioSession.sharedInstance().isAudioEnabled = true + } + + func didDeactivateAudioSession(_ audioSession: AVAudioSession) { + //Use if using WebRTC + //RTCAudioSession.sharedInstance().audioSessionDidDeactivate(audioSession) + //RTCAudioSession.sharedInstance().isAudioEnabled = false + } ... ``` diff --git a/example/.gitignore b/example/.gitignore index 0fa6b675..1d04a78b 100644 --- a/example/.gitignore +++ b/example/.gitignore @@ -44,3 +44,6 @@ app.*.map.json /android/app/debug /android/app/profile /android/app/release + +pubspec.lock +/ios/Podfile.lock diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock deleted file mode 100644 index 256b356e..00000000 --- a/example/ios/Podfile.lock +++ /dev/null @@ -1,114 +0,0 @@ -PODS: - - CryptoSwift (1.8.0) - - Firebase/CoreOnly (10.7.0): - - FirebaseCore (= 10.7.0) - - Firebase/Messaging (10.7.0): - - Firebase/CoreOnly - - FirebaseMessaging (~> 10.7.0) - - firebase_core (2.12.0): - - Firebase/CoreOnly (= 10.7.0) - - Flutter - - firebase_messaging (14.6.0): - - Firebase/Messaging (= 10.7.0) - - firebase_core - - Flutter - - FirebaseCore (10.7.0): - - FirebaseCoreInternal (~> 10.0) - - GoogleUtilities/Environment (~> 7.8) - - GoogleUtilities/Logger (~> 7.8) - - FirebaseCoreInternal (10.19.0): - - "GoogleUtilities/NSData+zlib (~> 7.8)" - - FirebaseInstallations (10.19.0): - - FirebaseCore (~> 10.0) - - GoogleUtilities/Environment (~> 7.8) - - GoogleUtilities/UserDefaults (~> 7.8) - - PromisesObjC (~> 2.1) - - FirebaseMessaging (10.7.0): - - FirebaseCore (~> 10.0) - - FirebaseInstallations (~> 10.0) - - GoogleDataTransport (~> 9.2) - - GoogleUtilities/AppDelegateSwizzler (~> 7.8) - - GoogleUtilities/Environment (~> 7.8) - - GoogleUtilities/Reachability (~> 7.8) - - GoogleUtilities/UserDefaults (~> 7.8) - - nanopb (< 2.30910.0, >= 2.30908.0) - - Flutter (1.0.0) - - flutter_callkit_incoming (0.0.1): - - CryptoSwift - - Flutter - - GoogleDataTransport (9.3.0): - - GoogleUtilities/Environment (~> 7.7) - - nanopb (< 2.30910.0, >= 2.30908.0) - - PromisesObjC (< 3.0, >= 1.2) - - GoogleUtilities/AppDelegateSwizzler (7.12.0): - - GoogleUtilities/Environment - - GoogleUtilities/Logger - - GoogleUtilities/Network - - GoogleUtilities/Environment (7.12.0): - - PromisesObjC (< 3.0, >= 1.2) - - GoogleUtilities/Logger (7.12.0): - - GoogleUtilities/Environment - - GoogleUtilities/Network (7.12.0): - - GoogleUtilities/Logger - - "GoogleUtilities/NSData+zlib" - - GoogleUtilities/Reachability - - "GoogleUtilities/NSData+zlib (7.12.0)" - - GoogleUtilities/Reachability (7.12.0): - - GoogleUtilities/Logger - - GoogleUtilities/UserDefaults (7.12.0): - - GoogleUtilities/Logger - - nanopb (2.30909.1): - - nanopb/decode (= 2.30909.1) - - nanopb/encode (= 2.30909.1) - - nanopb/decode (2.30909.1) - - nanopb/encode (2.30909.1) - - PromisesObjC (2.3.1) - -DEPENDENCIES: - - firebase_core (from `.symlinks/plugins/firebase_core/ios`) - - firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`) - - Flutter (from `Flutter`) - - flutter_callkit_incoming (from `.symlinks/plugins/flutter_callkit_incoming/ios`) - -SPEC REPOS: - trunk: - - CryptoSwift - - Firebase - - FirebaseCore - - FirebaseCoreInternal - - FirebaseInstallations - - FirebaseMessaging - - GoogleDataTransport - - GoogleUtilities - - nanopb - - PromisesObjC - -EXTERNAL SOURCES: - firebase_core: - :path: ".symlinks/plugins/firebase_core/ios" - firebase_messaging: - :path: ".symlinks/plugins/firebase_messaging/ios" - Flutter: - :path: Flutter - flutter_callkit_incoming: - :path: ".symlinks/plugins/flutter_callkit_incoming/ios" - -SPEC CHECKSUMS: - CryptoSwift: 52aaf3fce7337552863b1d952e408085f0e65030 - Firebase: 0219acf760880eeec8ce479895bd7767466d9f81 - firebase_core: 312d0d81b346ec20540822c8498e626d6918ef48 - firebase_messaging: 8432ce73100171cab1707fad998a89590276bb4d - FirebaseCore: e317665b9d744727a97e623edbbed009320afdd7 - FirebaseCoreInternal: b444828ea7cfd594fca83046b95db98a2be4f290 - FirebaseInstallations: 033d199474164db20c8350736842a94fe717b960 - FirebaseMessaging: ac9062bcc35ed56e15a0241d8fd317022499baf8 - Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 - flutter_callkit_incoming: 417dd1b46541cdd5d855ad795ccbe97d1c18155e - GoogleDataTransport: 57c22343ab29bc686febbf7cbb13bad167c2d8fe - GoogleUtilities: 0759d1a57ebb953965c2dfe0ba4c82e95ccc2e34 - nanopb: d4d75c12cd1316f4a64e3c6963f879ecd4b5e0d5 - PromisesObjC: c50d2056b5253dadbd6c2bea79b0674bd5a52fa4 - -PODFILE CHECKSUM: 505fe807fc9a2ba684f6436bd029b74c8430ab62 - -COCOAPODS: 1.12.1 diff --git a/example/ios/Runner/AppDelegate.swift b/example/ios/Runner/AppDelegate.swift index 1eb1a24e..5b1f6ab0 100644 --- a/example/ios/Runner/AppDelegate.swift +++ b/example/ios/Runner/AppDelegate.swift @@ -1,10 +1,14 @@ import UIKit +import CallKit +import AVFAudio import PushKit import Flutter import flutter_callkit_incoming @UIApplicationMain @objc class AppDelegate: FlutterAppDelegate, PKPushRegistryDelegate, CallkitIncomingAppDelegate { + + override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? @@ -16,6 +20,10 @@ import flutter_callkit_incoming let voipRegistry: PKPushRegistry = PKPushRegistry(queue: mainQueue) voipRegistry.delegate = self voipRegistry.desiredPushTypes = [PKPushType.voIP] + + //Use if using WebRTC + //RTCAudioSession.sharedInstance().useManualAudio = true + //RTCAudioSession.sharedInstance().isAudioEnabled = false return super.application(application, didFinishLaunchingWithOptions: launchOptions) } @@ -82,13 +90,15 @@ import flutter_callkit_incoming // Func Call api for Accept - func onAccept(_ call: Call) { + func onAccept(_ call: Call, _ action: CXAnswerCallAction) { let json = ["action": "ACCEPT", "data": call.data.toJSON()] as [String: Any] print("LOG: onAccept") self.performRequest(parameters: json) { result in switch result { case .success(let data): print("Received data: \(data)") + //Make sure call action.fulfill() when you are done(connected WebRTC - Start counting seconds) + //action.fulfill() case .failure(let error): print("Error: \(error.localizedDescription)") @@ -111,6 +121,7 @@ import flutter_callkit_incoming } } + // Func Call API for End func onEnd(_ call: Call) { let json = ["action": "END", "data": call.data.toJSON()] as [String: Any] print("LOG: onEnd") @@ -125,6 +136,7 @@ import flutter_callkit_incoming } } + // Func Call API for TimeOut func onTimeOut(_ call: Call) { let json = ["action": "TIMEOUT", "data": call.data.toJSON()] as [String: Any] print("LOG: onTimeOut") @@ -139,6 +151,20 @@ import flutter_callkit_incoming } } + // Func Callback Toggle Audio Session + func didActivateAudioSession(_ audioSession: AVAudioSession) { + //Use if using WebRTC + //RTCAudioSession.sharedInstance().audioSessionDidActivate(audioSession) + //RTCAudioSession.sharedInstance().isAudioEnabled = true + } + + // Func Callback Toggle Audio Session + func didDeactivateAudioSession(_ audioSession: AVAudioSession) { + //Use if using WebRTC + //RTCAudioSession.sharedInstance().audioSessionDidDeactivate(audioSession) + //RTCAudioSession.sharedInstance().isAudioEnabled = false + } + func performRequest(parameters: [String: Any], completion: @escaping (Result) -> Void) { if let url = URL(string: "https://webhook.site/e32a591f-0d17-469d-a70d-33e9f9d60727") { var request = URLRequest(url: url) diff --git a/example/pubspec.lock b/example/pubspec.lock deleted file mode 100644 index c261ffd7..00000000 --- a/example/pubspec.lock +++ /dev/null @@ -1,297 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: d687576bb973e8d2539d0b4615d985336269a0dbe1b3984e937fd22d31406fb8 - url: "https://pub.dev" - source: hosted - version: "1.3.0" - async: - dependency: transitive - description: - name: async - sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" - url: "https://pub.dev" - source: hosted - version: "2.11.0" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - characters: - dependency: transitive - description: - name: characters - sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" - url: "https://pub.dev" - source: hosted - version: "1.3.0" - clock: - dependency: transitive - description: - name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf - url: "https://pub.dev" - source: hosted - version: "1.1.1" - collection: - dependency: transitive - description: - name: collection - sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 - url: "https://pub.dev" - source: hosted - version: "1.17.2" - crypto: - dependency: transitive - description: - name: crypto - sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab - url: "https://pub.dev" - source: hosted - version: "3.0.3" - fake_async: - dependency: transitive - description: - name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" - url: "https://pub.dev" - source: hosted - version: "1.3.1" - firebase_core: - dependency: "direct main" - description: - name: firebase_core - sha256: "4491238f4fddc885bc994e304a035eb8aba2c935816b2c0b31d87f3ec6e96682" - url: "https://pub.dev" - source: hosted - version: "2.12.0" - firebase_core_platform_interface: - dependency: transitive - description: - name: firebase_core_platform_interface - sha256: b63e3be6c96ef5c33bdec1aab23c91eb00696f6452f0519401d640938c94cba2 - url: "https://pub.dev" - source: hosted - version: "4.8.0" - firebase_core_web: - dependency: transitive - description: - name: firebase_core_web - sha256: "8c0f4c87d20e2d001a5915df238c1f9c88704231f591324205f5a5d2a7740a45" - url: "https://pub.dev" - source: hosted - version: "2.5.0" - firebase_messaging: - dependency: "direct main" - description: - name: firebase_messaging - sha256: "0b9f9c2bcfbb4f29b4b1ce2cbce7c17c2c7693f575cc87fcb7a073241845a42c" - url: "https://pub.dev" - source: hosted - version: "14.6.0" - firebase_messaging_platform_interface: - dependency: transitive - description: - name: firebase_messaging_platform_interface - sha256: b86d6c8f665dc3fcbeae52b7ffb6f2a2dfa8544843468a6d9927b29a6ae2bd07 - url: "https://pub.dev" - source: hosted - version: "4.5.0" - firebase_messaging_web: - dependency: transitive - description: - name: firebase_messaging_web - sha256: "4e5e7e3ea9923f4cd32da828a4bd1a5c4a092161ff90f69f14dd34c5b8e05a81" - url: "https://pub.dev" - source: hosted - version: "3.5.0" - flutter: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_callkit_incoming: - dependency: "direct main" - description: - path: ".." - relative: true - source: path - version: "2.0.0+2" - flutter_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" - flutter_web_plugins: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - http: - dependency: "direct main" - description: - name: http - sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" - url: "https://pub.dev" - source: hosted - version: "0.13.6" - http_parser: - dependency: transitive - description: - name: http_parser - sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" - url: "https://pub.dev" - source: hosted - version: "4.0.2" - js: - dependency: transitive - description: - name: js - sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 - url: "https://pub.dev" - source: hosted - version: "0.6.7" - json_annotation: - dependency: transitive - description: - name: json_annotation - sha256: b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467 - url: "https://pub.dev" - source: hosted - version: "4.8.1" - matcher: - dependency: transitive - description: - name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" - url: "https://pub.dev" - source: hosted - version: "0.12.16" - material_color_utilities: - dependency: transitive - description: - name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" - url: "https://pub.dev" - source: hosted - version: "0.5.0" - meta: - dependency: transitive - description: - name: meta - sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" - url: "https://pub.dev" - source: hosted - version: "1.9.1" - path: - dependency: transitive - description: - name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" - url: "https://pub.dev" - source: hosted - version: "1.8.3" - plugin_platform_interface: - dependency: transitive - description: - name: plugin_platform_interface - sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - sky_engine: - dependency: transitive - description: flutter - source: sdk - version: "0.0.99" - source_span: - dependency: transitive - description: - name: source_span - sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" - url: "https://pub.dev" - source: hosted - version: "1.10.0" - stack_trace: - dependency: transitive - description: - name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 - url: "https://pub.dev" - source: hosted - version: "1.11.0" - stream_channel: - dependency: transitive - description: - name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - string_scanner: - dependency: transitive - description: - name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - term_glyph: - dependency: transitive - description: - name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 - url: "https://pub.dev" - source: hosted - version: "1.2.1" - test_api: - dependency: transitive - description: - name: test_api - sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" - url: "https://pub.dev" - source: hosted - version: "0.6.0" - typed_data: - dependency: transitive - description: - name: typed_data - sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c - url: "https://pub.dev" - source: hosted - version: "1.3.2" - uuid: - dependency: "direct main" - description: - name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" - url: "https://pub.dev" - source: hosted - version: "3.0.7" - vector_math: - dependency: transitive - description: - name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - web: - dependency: transitive - description: - name: web - sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 - url: "https://pub.dev" - source: hosted - version: "0.1.4-beta" -sdks: - dart: ">=3.1.0-185.0.dev <4.0.0" - flutter: ">=3.3.0" diff --git a/ios/Classes/CallkitIncomingAppDelegate.swift b/ios/Classes/CallkitIncomingAppDelegate.swift index c9aa5a86..0d0f3cd2 100644 --- a/ios/Classes/CallkitIncomingAppDelegate.swift +++ b/ios/Classes/CallkitIncomingAppDelegate.swift @@ -6,16 +6,22 @@ // import Foundation +import AVFAudio +import CallKit public protocol CallkitIncomingAppDelegate : NSObjectProtocol { - func onAccept(_ call: Call); + func onAccept(_ call: Call, _ action: CXAnswerCallAction); func onDecline(_ call: Call); func onEnd(_ call: Call); func onTimeOut(_ call: Call); + + func didActivateAudioSession(_ audioSession: AVAudioSession) + + func didDeactivateAudioSession(_ audioSession: AVAudioSession) } diff --git a/ios/Classes/SwiftFlutterCallkitIncomingPlugin.swift b/ios/Classes/SwiftFlutterCallkitIncomingPlugin.swift index 97b3860c..b3453afa 100644 --- a/ios/Classes/SwiftFlutterCallkitIncomingPlugin.swift +++ b/ios/Classes/SwiftFlutterCallkitIncomingPlugin.swift @@ -442,6 +442,7 @@ public class SwiftFlutterCallkitIncomingPlugin: NSObject, FlutterPlugin, CXProvi .duckOthers, .allowBluetooth, ]) + try session.setMode(self.getAudioSessionMode(data?.audioSessionMode)) try session.setActive(data?.audioSessionActive ?? true) try session.setPreferredSampleRate(data?.audioSessionPreferredSampleRate ?? 44100.0) @@ -527,9 +528,12 @@ public class SwiftFlutterCallkitIncomingPlugin: NSObject, FlutterPlugin, CXProvi self.answerCall = call sendEvent(SwiftFlutterCallkitIncomingPlugin.ACTION_CALL_ACCEPT, self.data?.toJSON()) if let appDelegate = UIApplication.shared.delegate as? CallkitIncomingAppDelegate { - appDelegate.onAccept(call) + appDelegate.onAccept(call, action) + }else { + DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(2000)) { + action.fulfill() + } } - action.fulfill() } @@ -615,6 +619,11 @@ public class SwiftFlutterCallkitIncomingPlugin: NSObject, FlutterPlugin, CXProvi } public func provider(_ provider: CXProvider, didActivate audioSession: AVAudioSession) { + + if let appDelegate = UIApplication.shared.delegate as? CallkitIncomingAppDelegate { + appDelegate.didActivateAudioSession(audioSession) + } + if(self.answerCall?.hasConnected ?? false){ sendDefaultAudioInterruptionNofificationToStartAudioResource() return @@ -636,10 +645,16 @@ public class SwiftFlutterCallkitIncomingPlugin: NSObject, FlutterPlugin, CXProvi } sendDefaultAudioInterruptionNofificationToStartAudioResource() configurAudioSession() + self.sendEvent(SwiftFlutterCallkitIncomingPlugin.ACTION_CALL_TOGGLE_AUDIO_SESSION, [ "isActivate": true ]) } public func provider(_ provider: CXProvider, didDeactivate audioSession: AVAudioSession) { + + if let appDelegate = UIApplication.shared.delegate as? CallkitIncomingAppDelegate { + appDelegate.didDeactivateAudioSession(audioSession) + } + if self.outgoingCall?.isOnHold ?? false || self.answerCall?.isOnHold ?? false{ print("Call is on hold") return @@ -653,6 +668,7 @@ public class SwiftFlutterCallkitIncomingPlugin: NSObject, FlutterPlugin, CXProvi self.answerCall = nil } self.callManager.removeAllCalls() + self.sendEvent(SwiftFlutterCallkitIncomingPlugin.ACTION_CALL_TOGGLE_AUDIO_SESSION, [ "isActivate": false ]) } diff --git a/pubspec.yaml b/pubspec.yaml index 06d0ac0f..61ecfb70 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: flutter_callkit_incoming description: Flutter Callkit Incoming to show callkit screen in your Flutter app. -version: 2.0.1 +version: 2.0.1+1 homepage: https://github.com/hiennguyen92/flutter_callkit_incoming repository: https://github.com/hiennguyen92/flutter_callkit_incoming issue_tracker: https://github.com/hiennguyen92/flutter_callkit_incoming/issues