迁移到 iOS VoIP 推送通知

Posted

技术标签:

【中文标题】迁移到 iOS VoIP 推送通知【英文标题】:Migrate to iOS VoIP push notifications 【发布时间】:2017-03-27 07:09:20 【问题描述】:

我们有一个 VoIP 应用程序,目前我们正在使用标准推送通知。我们想更新为使用 PushKit 和 VoIP 推送通知。我有点不确定如何从我们当前的标准 APNS 设置迁移到新设置。问题:

1) 我们当前的 APNS 生产证书是否能够向新的 VoIP 客户端发送推送消息?

2) 我们新的 VoIP 推送证书是否能够将推送消息发送到现有的标准 APNS 应用(令牌)?

【问题讨论】:

从developer.apple.com/library/prerelease/content/documentation/…看来,基于令牌的提供商到 APNs 信任可用于标准 APNS + VoIP 推送 使用您的 APNS 证书进行简单的推送通知并为 Voip 推送创建新的 Voip 证书 【参考方案1】:

请参考 pushkit 演示 https://github.com/hasyapanchasara/PushKit_SilentPushNotification

Objective c demo也在里面 https://github.com/hasyapanchasara/PushKit_SilentPushNotification/tree/master/Objective%20C%20Demo/PushKitDemoObjectiveC

以下是注册推送工具包和接收推送工具包有效负载的 swift 代码。

import UIKit
import PushKit


class AppDelegate: UIResponder, UIApplicationDelegate,PKPushRegistryDelegate



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
    // From here you have to schedule your local notification




当您的应用基于 VOIP 时,一旦您收到 pushkit 有效负载,您就可以安排本地通知。根据您可以接收的交互式本地通知,可以处理断开连接等功能(与 Whatsapp、Skype 等相同)。

1) 我们当前的 APNS 生产证书是否能够向新的 VoIP 客户端发送推送消息?

不,您还必须创建 pem 文件并在后端进行配置。

2) 我们新的 VoIP 推送证书是否能够将推送消息发送到现有的标准 APNS 应用(令牌)?

不,Pushkit 令牌将不同于 APNS 令牌。 列表项

有关调试、证书、本地通知的更多信息

https://github.com/hasyapanchasara/PushKit_SilentPushNotification

【讨论】:

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

iOS小技能:队列管理推送通知,解决收款到账并发语音播报问题。

iOS VoIP 推送通知/PushKit 不适用于增强通知格式

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

iOS VoIP 推送通知 (PushKit)

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

iOS VoIP 推送负载是不是类似于静默通知的负载?