Приложение не открывается при нажатии кнопки «Принять вызов» (приложение в фоновом режиме или в состоянии «Завершено»)IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Приложение не открывается при нажатии кнопки «Принять вызов» (приложение в фоновом режиме или в состоянии «Завершено»)

Сообщение Anonymous »

Я использовал этот плагин flutter_callkit_incoming для настройки уведомлений о вызовах в Android и iOS. Android работает нормально.
IOS я получил уведомление очень хорошо. Единственная проблема, с которой я сталкиваюсь, это то, что когда я принимаю вызов, приложение в IOS не открывается автоматически.
Когда я открываю приложение вручную, оно запускает вызов. Но в идеале приложение должно запускаться при нажатии кнопки принятия вызова.
Примечание: я добавил checkAndNavigationCallingPage() в WidgetsBinding.instance.addPostFrameCallback
Я уверен я пропустил некоторые параметры конфигурации. Я использую последнюю версию библиотеки. Ниже приведен мой код из AppDelegate.swift.
Пожалуйста, помогите мне решить эту проблему.

Код: Выделить всё

import UIKit
import Flutter
import flutter_local_notifications
import flutter_callkit_incoming
import CallKit
import AVFAudio
import PushKit

@main
@objc class AppDelegate: FlutterAppDelegate, PKPushRegistryDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
// This is required to make any communication available in the action isolate.
FlutterLocalNotificationsPlugin.setPluginRegistrantCallback { (registry) in
GeneratedPluginRegistrant.register(with: registry)
}

// Added as per documentation of flutter local notification package
if #available(iOS 10.0, *) {
UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate
}

GeneratedPluginRegistrant.register(with: self)

//Setup VOIP (flutter_callkit_incomming)
let mainQueue = DispatchQueue.main
let voipRegistry: PKPushRegistry = PKPushRegistry(queue: mainQueue)
voipRegistry.delegate = self
voipRegistry.desiredPushTypes = [PKPushType.voIP]

return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}

// As per flutter_callkit_incomming Start ///////////////////

// Handle updated push credentials
func pushRegistry(_ registry: PKPushRegistry, didUpdate credentials: PKPushCredentials, for type: PKPushType) {
print(credentials.token)
let deviceToken = credentials.token.map { String(format: "%02x", $0) }.joined()
print(deviceToken)
//Save deviceToken to your server
SwiftFlutterCallkitIncomingPlugin.sharedInstance?.setDevicePushTokenVoIP(deviceToken)
}

func pushRegistry(_ registry: PKPushRegistry, didInvalidatePushTokenFor type: PKPushType) {
print("didInvalidatePushTokenFor")
SwiftFlutterCallkitIncomingPlugin.sharedInstance?.setDevicePushTokenVoIP("")
}

// Handle incoming pushes
func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType, completion: @escaping () -> Void) {
print("didReceiveIncomingPushWith")
guard type == .voIP else { return }

// Require by
let id = payload.dictionaryPayload["id"] as? String ?? UUID().uuidString
let nameCaller = (payload.dictionaryPayload["params"] as? [String: Any])? ["body"] as? String ?? ""
let appName = (payload.dictionaryPayload["params"] as? [String: Any])? ["title"] as? String ?? ""
// Phone number/Email/Any
let handle = payload.dictionaryPayload["handle"] as? String ?? "generic"
//Video call or audio call
let isVideo = payload.dictionaryPayload["isVideo"] as? Int ?? 1
//duration of ring
let duration = payload.dictionaryPayload["duration"] as? Int ?? 30000
// ringtone
let ringtonePath = payload.dictionaryPayload["ringtonePath"] as? String ?? "system_ringtone_default"
var args: NSDictionary = ["id": id, "nameCaller": nameCaller, "appName": appName, "handle": handle, "type": isVideo, "duration": duration, "ringtonePath": ringtonePath]
let data = flutter_callkit_incoming.Data(args: args)
data.extra =  payload.dictionaryPayload["params"] as? NSDictionary ?? [:]
data.iconName = ""
data.type = 1;
print(data);
SwiftFlutterCallkitIncomingPlugin.sharedInstance?.showCallkitIncoming(data, fromPushKit: true)

//Make sure call completion()
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
completion()
}
}

///// as per flutter_callkit_incomming END //////
}

Ниже ссылка на git:
https://github.com/hiennguyen92/flutter ... issues/605

Подробнее здесь: https://stackoverflow.com/questions/791 ... -state-app
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»