VOIP 推送通知

Posted

技术标签:

【中文标题】VOIP 推送通知【英文标题】:VOIP push notification 【发布时间】:2017-05-31 14:05:36 【问题描述】:

我想在我的应用程序在后台模式下终止时播放声音。为此,我正在使用 VOIP 通知。我的方法是前台模式下的通话和声音播放。但是在后台模式下,方法调用声音不会触发。这是我的代码 sn-p。

  func pushRegistry(registry: PKPushRegistry, didReceiveIncomingPushWithPayload payload: PKPushPayload, forType type: String) 
    var a = payload.dictionaryPayload

      //  NSBundle.mainBundle().pathForResource(<#T##name: String?##String?#>, ofType: <#T##String?#>)

        let url = NSBundle.mainBundle().URLForResource("demo", withExtension: "mp3")!

        do 
            player = try AVAudioPlayer(contentsOfURL: url)
            guard let player = player else  return 

            player.prepareToPlay()
            player.play()
         catch let error as NSError 
            print(error.description)
        

【问题讨论】:

也许您应该在尝试播放声音之前配置 AVAudiosession?并配置你项目的能力(Target -> Capabilities -> Background Mode) @AntonBelousov 它在前台模式下工作正常我们可以为后台模式做单独的代码 【参考方案1】:

一旦您收到 pushkit 有效负载。您必须使用声音文件安排本地通知。您的声音文件最多播放 30 秒。

import UIKit
import PushKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate,PKPushRegistryDelegate 

    var window: UIWindow?


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 


        let types: UIRemoteNotificationType = [.Alert, .Badge, .Sound]
        application.registerForRemoteNotificationTypes(types)

        self.PushKitRegistration()

        return true
    

    //MARK: - PushKitRegistration

    func PushKitRegistration()
    

        let mainQueue = dispatch_get_main_queue()
        // Create a push registry object
        if #available(iOS 8.0, *) 

            let voipRegistry: PKPushRegistry = PKPushRegistry(queue: mainQueue)

            // Set the registry's delegate to self

            voipRegistry.delegate = self

            // Set the push type to VoIP

            voipRegistry.desiredPushTypes = [PKPushTypeVoIP]

         else 
            // Fallback on earlier versions
        


    


    @available(iOS 8.0, *)
    func pushRegistry(registry: PKPushRegistry!, didUpdatePushCredentials credentials: PKPushCredentials!, forType type: String!) 
        // Register VoIP push token (a property of PKPushCredentials) with server

        let hexString : String = UnsafeBufferPointer<UInt8>(start: UnsafePointer(credentials.token.bytes),
            count: credentials.token.length).map  String(format: "%02x", $0) .joinWithSeparator("")

        print(hexString)


    


    @available(iOS 8.0, *)
    func pushRegistry(registry: PKPushRegistry!, didReceiveIncomingPushWithPayload payload: PKPushPayload!, forType type: String!) 
        // Process the received push


    


Refer

【讨论】:

它对你有用吗?如果是,那么您可以接受答案。

以上是关于VOIP 推送通知的主要内容,如果未能解决你的问题,请参考以下文章

FreePBX 上的 VoIP 推送通知 [关闭]

VOIP 推送通知

iOS VoIP 推送通知 (PushKit)

iOS 13 在后台没有收到 VoIP 推送通知

拒绝来电推送后无法处理取消VOIP推送

从一个信号触发的 Firebase 云功能发送 voip 推送通知