IOS VoiP 推送不适用于 APNS 推送
IOS VoiP push doesn't work with APNS push
我有一个项目,它使用 VoiP 推送进行呼叫,使用 APNS 推送进行简单通知。 APNS push 来了,VoiP 不来。当服务器尝试通过我的 VoiP 令牌向我发送 VoiP 推送时,服务器抛出异常“无效令牌”。请查看我的解决方案,让我知道我最糟糕的做法。
I created two certificates (APNS and VoiP)
I added certificate to identify, but I can add just APNS
接下来,我生成了 p12 密钥并发送到服务器以供使用。
在 UIApplicationDelegate 中,我检索 APNS 令牌并发送到服务器
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let deviceTokenString = deviceToken.reduce("", {[=11=] + String(format: "%02X", )})
//next send APNS token
}
APNS 令牌我在这里收到成功
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
VoiP推送通知我先注册
func registerForPushVoipNotifications() {
let voipRegistry = PKPushRegistry(queue: DispatchQueue.main)
voipRegistry.delegate = self
voipRegistry.desiredPushTypes = [.voIP]
}
我在这里收到 VoiP 推送令牌
public func pushRegistry(_ registry: PKPushRegistry, didUpdate credentials: PKPushCredentials, for type: PKPushType) {
let token:String? = credentials.token.map { String(format: "%02x", [=14=]) }.joined()
//send VoiP token to server
}
通过文档发送VoiP推送我必须在这里接收
func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType, completion: @escaping () -> Void)
但是当服务器发送 VoiP 推送时,它收到错误 无效令牌。我最糟糕的是什么?
首先,您应该使用p8 authKey发送推送通知
其次,PKPushRegistry存放在func?这很奇怪。将其移至您的 class
字段
第三,尝试通过以下代码从数据转换令牌:
class TokenConverter {
static func token(from data: Data) -> String {
let tokenParts = data.map { data -> String in
return String(format: "%02.2hhx", data)
}
return tokenParts.joined()
}
}
我有一个项目,它使用 VoiP 推送进行呼叫,使用 APNS 推送进行简单通知。 APNS push 来了,VoiP 不来。当服务器尝试通过我的 VoiP 令牌向我发送 VoiP 推送时,服务器抛出异常“无效令牌”。请查看我的解决方案,让我知道我最糟糕的做法。
I created two certificates (APNS and VoiP)
I added certificate to identify, but I can add just APNS
接下来,我生成了 p12 密钥并发送到服务器以供使用。
在 UIApplicationDelegate 中,我检索 APNS 令牌并发送到服务器
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let deviceTokenString = deviceToken.reduce("", {[=11=] + String(format: "%02X", )})
//next send APNS token
}
APNS 令牌我在这里收到成功
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
VoiP推送通知我先注册
func registerForPushVoipNotifications() {
let voipRegistry = PKPushRegistry(queue: DispatchQueue.main)
voipRegistry.delegate = self
voipRegistry.desiredPushTypes = [.voIP]
}
我在这里收到 VoiP 推送令牌
public func pushRegistry(_ registry: PKPushRegistry, didUpdate credentials: PKPushCredentials, for type: PKPushType) {
let token:String? = credentials.token.map { String(format: "%02x", [=14=]) }.joined()
//send VoiP token to server
}
通过文档发送VoiP推送我必须在这里接收
func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType, completion: @escaping () -> Void)
但是当服务器发送 VoiP 推送时,它收到错误 无效令牌。我最糟糕的是什么?
首先,您应该使用p8 authKey发送推送通知
其次,PKPushRegistry存放在func?这很奇怪。将其移至您的 class
字段第三,尝试通过以下代码从数据转换令牌:
class TokenConverter { static func token(from data: Data) -> String { let tokenParts = data.map { data -> String in return String(format: "%02.2hhx", data) } return tokenParts.joined() } }