当前位置: 首页 > 知识库问答 >
问题:

强制关闭后收到pushkit voip通知时IOS应用程序崩溃

秦景福
2023-03-14

我试图在应用程序关闭时使pushkit voip消息正常工作。当应用程序位于前台或后台时,这些呼叫就会工作并显示出来。但在用户强制终止应用程序后,当收到通知时,应用程序终止,并发出信号9(由用户/ios终止)。

如何解决此问题?

我已经在我的应用程序中启用了后台获取、voip、音频和推送通知。还尝试删除所有Unity方法,将Callkit调用放在PushRegistry方法中,在接收通知时创建新的提供程序,甚至订阅UIApplicationIDFinishLaunchingNotification事件,但没有任何效果。我这样做是为了使应用程序能够在接收voip通知时显示呼叫。这是我的密码:

@objcMembers class CallPlugin: UIResponder, UIApplicationDelegate, PKPushRegistryDelegate, CXProviderDelegate {

static var Instance: CallPlugin!
var provider: CXProvider!
var registry:PKPushRegistry!
var uuid:UUID!
var callController: CXCallController!

//class entry point
public static func registerVoIPPush(_ message: String) {
    Instance = CallPlugin()

    //Pushkit
    Instance.registry = PKPushRegistry(queue: DispatchQueue.main)
    Instance.registry.delegate = Instance
    Instance.registry.desiredPushTypes = [PKPushType.voIP]

    //Callkit
    let providerConfiguration = CXProviderConfiguration(localizedName: "testing")
    providerConfiguration.supportsVideo = true
    providerConfiguration.supportedHandleTypes = [.generic]
    Instance.provider = CXProvider(configuration: providerConfiguration)
    Instance.provider.setDelegate(Instance, queue: nil)        

    UnitySendMessage("ResponseHandler", "LogNative", "registration success")
}

//Get token
func pushRegistry( _ registry: PKPushRegistry, didUpdate credentials: PKPushCredentials, for type: PKPushType) {
    if type == PKPushType.voIP {
        let deviceTokenString = credentials.token.map { String(format: "%02.2hhx", $0) }.joined()
        UnitySendMessage("ResponseHandler", "CredentialsRecieved",deviceTokenString)
    }
}       

//Get notification
func pushRegistry( _ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type:PKPushType, completion: @escaping () -> Void) {

    //UnitySendMessage("ResponseHandler", "LogNative", "Got something push")
    reportInComingCallWith(uuidString: "111", handle: "Paul", isVideo: false)
    completion()
}

//show the call
func reportInComingCallWith(uuidString:String,handle:String,isVideo:Bool) {
    //UnitySendMessage("ResponseHandler", "LogNative", "attempting call")
    let callUpdate = CXCallUpdate()        
    callUpdate.remoteHandle = CXHandle(type: .generic, value: handle)        
    callUpdate.hasVideo = false

    uuid = NSUUID() as UUID

    provider.reportNewIncomingCall(with: uuid as UUID, update: callUpdate){ (error) in
        if let error = error {
            UnitySendMessage("ResponseHandler", "LogNative", "error in starting call"+error.localizedDescription)
        }
    }
}

共有1个答案

邵耀
2023-03-14

问题是,我的应用程序没有及时创建委托和推送注册表对象,以便完全处理通知。

我通过覆盖应用委托并将通知初始化放在WillFinishLaunting中解决了这个问题,就像这样:

-(BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(nullable NSDictionary<UIApplicationLaunchOptionsKey,id> *)launchOptions{
   [CallPlugin registerVoIPPush:@"hmm"];
   [super application:application willFinishLaunchingWithOptions:launchOptions];
   return true;
}

这样,就可以处理通知了。我试着先把它放在DidFinishLaunching中,但是已经太晚了,通知已经发出,IOS已经在杀死我的应用程序了。

 类似资料:
  • 我今天一直在谷歌上搜索,但什么也找不到。我的场景如下: 我有一个Android应用程序可以自动回复收到的消息。我有下面的代码来创建一个持久的(不可刷的)通知,然后当应用程序通过onDestroy被销毁时,通知被移除。然而,当我打开recents面板并将我的应用程序扫走时,应用程序会停止自动回复服务,广播接收器也会停止,但onDestroy没有被调用,通知仍然可见。 我想简单地销毁通知,如果应用程序

  • 我开发了一个新的Android应用程序使用appcelerator。我使用ti.cloudpush来使用来自Firebase的推送通知,如本例所示;如果应用程序处于后台,则成功发送通知并显示在设备的通知栏中,但当应用程序处于前台或关闭时,则不会收到通知发送过程的结果是"成功"。 我需要使它像facebook messenger一样,在应用程序关闭时显示在设备屏幕上。我尝试了其他几个模块,如“ti.

  • 我目前正在开发Android(Cordova)应用程序,我正在使用Oneignal推送通知。首先,如果我关闭应用程序,推送通知不会被传递,所以我不得不添加一个Cordova插件来保持我的应用程序在后台运行: 我在deviceready之后的代码: 谢了。

  • 我想用Xamarin格式的C#创建一个基于文本的Android游戏。 在故事中,我想设置角色任务,这需要一些时间,例如“我去挖这个洞,完成后给你打电话。” 如何将通知设置为在设置的时间之后显示?例如,上述声明可能需要10分钟,然后用户收到继续游戏的通知? 我一周前才开始做C#,所以如果这是noobish,或者已经被问到了,我道歉。我到处都找过,但有几种类型的通知,当我试图理解它时,似乎我在读法语。

  • 仅当应用程序关闭时,数据有效负载的使用不会收到任何通知,并且不会触发消息接收方法。 在下图中显示数据负载,单击此处查看参数 回复是点击这里查看回复 响应成功1,但在redmi手机中未收到任何通知。

  • 当应用程序完全关闭时,如何以编程方式发送通知? 示例:用户关闭应用程序,也在Android Taskmanager中,然后等待。应用程序应在X秒后或应用程序检查更新时发送通知。 我试图使用这些代码示例,但是: 应用程序关闭时推送通知-活动太多/无法工作 我如何让我的应用程序在关闭时发送通知很多信息,但我不知道如何处理 当android应用程序关闭时,如何发送本地通知?-很多信息,但我不知道如何处理