We are developing a voip calling app. We are using CallKit
and PushKit
frameworks. A user recently reported that his iPhone is not receiving CallKit
push anymore, but few days ago that was working. Please note mutable push is working on his device. We have collected device's console logs and learned that device did not receive voip push payload.
No firewalls installed and no recent change history of network settings.
Environments info:
Device Model: iPhone Xs
iOS version: 15.6.1
Network Connectivity: Wifi
This is how we registered PushKit
private func registerForVoIPPushes() {
self.voipRegistry = PKPushRegistry(queue: pushRegistryQueue)
self.voipRegistry.delegate = self
self.voipRegistry.desiredPushTypes = [.voIP]
}
We conforms the PKPushRegistryDelegate
this way
extension AppDelegate: PKPushRegistryDelegate {
func pushRegistry(_ registry: PKPushRegistry, didUpdate pushCredentials: PKPushCredentials, for type: PKPushType) {
let deviceToken = pushCredentials.token.map { String(format: "%02x", $0) }.joined()
updateVoIPToken(deviceToken)
}
func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType, completion: @escaping () -> Void) {
DDLogDebug("Incoming call voip push: \(payload.dictionaryPayload)")
handleIncomingCall(payload: payload.dictionaryPayload)
completion()
}
func pushRegistry(_ registry: PKPushRegistry, didInvalidatePushTokenFor type: PKPushType) {
DDLogDebug("didInvalidatePushTokenFor type: \(type)")
}
}
This is how server sends voip
push payload
path = '/3/device/{0}'.format({deviceToken}})
request_headers = {
'apns-expiration': '0',
'apns-priority': '10',
'apns-topic': 'com.companyname.app.voip',
'apns-push-type':'voip',
'authorization': 'bearer {auth-token}'
}
# Open a connection the APNS server
conn = HTTP20Connection('api.push.apple.com:443')
conn.request(
'POST',
path,
payload,
headers=request_headers
)
resp = conn.get_response()
print(resp.status)
print(resp.read())
The output http status code shows 200
but push actually not delivered.
Same codebase is woking fine with other devices.
I appreciate any helps and suggestions.
Thanks.