didUpdatePushCredentials not get called

后端 未结 4 1364
温柔的废话
温柔的废话 2021-01-18 07:28

I want to implement VoIP notifications in my iOS application, But the didUpdatePushCredentials method never got called, I can\'t get the device token.

相关标签:
4条回答
  • 2021-01-18 08:06

    There was an issue with Certificates.

    Regenerated and reimported certificates and issue fixed.

    0 讨论(0)
  • 2021-01-18 08:11

    Use below code and Make sure about following things.

    **`**// Register for VoIP notifications**`**
    
    - (void) voipRegistration {
        dispatch_queue_t mainQueue = dispatch_get_main_queue();
        // Create a push registry object
        _voipRegistry = [[PKPushRegistry alloc] initWithQueue: mainQueue];
        // Set the registry's delegate to self
        [_voipRegistry setDelegate:(id<PKPushRegistryDelegate> _Nullable)self];
        // Set the push type to VoIP
        _voipRegistry.desiredPushTypes = [NSSet setWithObject:PKPushTypeVoIP];
    }
    

    Call Below method in didFinishLaunchingWithOptions

    Other deleget method as follow

    - (void)pushRegistry:(PKPushRegistry *)registry didUpdatePushCredentials: (PKPushCredentials *)credentials forType:(NSString *)type {
        // Register VoIP push token (a property of PKPushCredentials) with server
    
        if([credentials.token length] == 0) {
            NSLog(@"voip token NULL");
            return;
        }
        NSLog(@"%@",credentials.token);
    }
    

    //Make sure about this in project capabilities

    1)Background mode is ON

    2)VOIP

    3)Background Fetch

    4)remotenotification

    5) Dont forgot to import delegate

    inside the Background MODE

    0 讨论(0)
  • 2021-01-18 08:21

    If you're running a newer xcode (I'm on xcode 9) then VOIP is not in the Background section on the Capabilities tab. This will prevent didUpdatePushCredentials from being called!

    The trick is you have to go in your plist, and in Required Background Modes you need to add App provides Voice over IP services.

    I can't believe Apple has done this to us. I wasted an 8 hour work day looking for this simple fix.

    0 讨论(0)
  • 2021-01-18 08:26

    For me the solution was to enable:

    P.S. I didn't forget to enable But enabling general pushes was important too. So full code is:

    import UIKit
    import PushKit
    
    @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate {
    
        var window: UIWindow?
    
    
        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
            // Override point for customization after application launch.
            voipRegistration()
    
            return true
        }
    
        // Register for VoIP notifications
        func voipRegistration() {
            let mainQueue = DispatchQueue.main
            // Create a push registry object
            let voipRegistry: PKPushRegistry = PKPushRegistry(queue: mainQueue)
            // Set the registry's delegate to self
            voipRegistry.delegate = self
            // Set the push type to VoIP
            voipRegistry.desiredPushTypes = [.voIP]
        }
    
    }
    
    extension AppDelegate: PKPushRegistryDelegate {
        func pushRegistry(_ registry: PKPushRegistry, didUpdate pushCredentials: PKPushCredentials, for type: PKPushType) {
            let token = pushCredentials.token.map { String(format: "%02.2hhx", $0) }.joined()
            print("voip token = \(token)")
        }
    
        func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType) {
            print("payload = \(payload.dictionaryPayload)")
        }
    }
    
    0 讨论(0)
提交回复
热议问题