2017-07-12 2 views
1

J'ai implémenté PushKit. J'ai suivi ces étapes:Jeton Pushkit ne pas entrer dans certains appareils iOS

1.) https://stackoverflow.com/a/38184769/4970453

2.) https://stackoverflow.com/a/28562124

Je suis en mesure d'obtenir didUpdatePushCredentials jeton de périphérique. travaillant dans -> iPhone 5s, iPhone6 ​​plus

didUpdatePushCredentials ne fonctionne pas dans -> iPhone6 ​​et iPhone7

J'utilise même cerificates et construire pour tous les appareils. Je ne connais pas le problème exact. Si quelqu'un a été confronté à ce genre de problème, s'il vous plaît partager des solutions de rechange.

Mon code et certificat Lien

Code ->https://www.dropbox.com/sh/x2615t7xn8mavs3/AADbX5nBuF5_08YNPX8wI59ga?dl=0

cer ->https://www.dropbox.com/sh/70l4htj1c46emog/AABxBalaoN1JP22dQp8-mNXGa?dl=0

Solution -----> I have changed Bundle identifier And create New certificate with New BundleId. 
+0

avez-vous vérifié la connexion Internet sur ces appareils? – D4ttatraya

+0

activer le mode arrière-plan des paramètres VoIP dans les capacités du projet et s'il vous plaît également vérifier les paramètres de notification Push App dans l'appareil Les paramètres doivent être activés. – Rivendell

Répondre

0

Il devrait fonctionner dans tous les appareils lorsqu'il est intégré correctement. il n'y a rien de changé pour un appareil spécifique.

Vous pouvez effectuer une vérification croisée de vos pas.

Swift

import UIKit 
import PushKit 

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate,PKPushRegistryDelegate { 

    var window: UIWindow? 

    var isUserHasLoggedInWithApp: Bool = true 
    var checkForIncomingCall: Bool = true 
    var userIsHolding: Bool = true 

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


     if #available(iOS 8.0, *){ 


      let viewAccept = UIMutableUserNotificationAction() 
      viewAccept.identifier = "VIEW_ACCEPT" 
      viewAccept.title = "Accept" 
      viewAccept.activationMode = .Foreground 
      viewAccept.destructive = false 
      viewAccept.authenticationRequired = false 

      let viewDecline = UIMutableUserNotificationAction() 
      viewDecline.identifier = "VIEW_DECLINE" 
      viewDecline.title = "Decline" 
      viewDecline.activationMode = .Background 
      viewDecline.destructive = true 
      viewDecline.authenticationRequired = false 

      let INCOMINGCALL_CATEGORY = UIMutableUserNotificationCategory() 
      INCOMINGCALL_CATEGORY.identifier = "INCOMINGCALL_CATEGORY" 
      INCOMINGCALL_CATEGORY.setActions([viewAccept,viewDecline], forContext: .Default) 

      if application.respondsToSelector("isRegisteredForRemoteNotifications") 
      { 
       let categories = NSSet(array: [INCOMINGCALL_CATEGORY]) 
       let types:UIUserNotificationType = ([.Alert, .Sound, .Badge]) 

       let settings:UIUserNotificationSettings = UIUserNotificationSettings(forTypes: types, categories: categories as? Set<UIUserNotificationCategory>) 

       application.registerUserNotificationSettings(settings) 
       application.registerForRemoteNotifications() 
      } 

     } 
     else{ 
      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 

     // Below process is specific to schedule local notification once pushkit payload received 

     var arrTemp = [NSObject : AnyObject]() 
     arrTemp = payload.dictionaryPayload 

     let dict : Dictionary <String, AnyObject> = arrTemp["aps"] as! Dictionary<String, AnyObject> 


     if isUserHasLoggedInWithApp // Check this flag then only proceed 
     { 

      if UIApplication.sharedApplication().applicationState == UIApplicationState.Background || UIApplication.sharedApplication().applicationState == UIApplicationState.Inactive 
      { 

       if checkForIncomingCall // Check this flag to know incoming call or something else 
       { 

        var strTitle : String = dict["alertTitle"] as? String ?? "" 
        let strBody : String = dict["alertBody"] as? String ?? "" 
        strTitle = strTitle + "\n" + strBody 

        let notificationIncomingCall = UILocalNotification() 

        notificationIncomingCall.fireDate = NSDate(timeIntervalSinceNow: 1) 
        notificationIncomingCall.alertBody = strTitle 
        notificationIncomingCall.alertAction = "Open" 
        notificationIncomingCall.soundName = "SoundFile.mp3" 
        notificationIncomingCall.category = dict["category"] as? String ?? "" 

        //"As per payload you receive" 
        notificationIncomingCall.userInfo = ["key1": "Value1" ,"key2": "Value2" ] 


        UIApplication.sharedApplication().scheduleLocalNotification(notificationIncomingCall) 

       } 
       else 
       { 
        // something else 
       } 

      } 
     } 


    } 

    //MARK: - Local Notification Methods 

    func application(application: UIApplication, didReceiveLocalNotification notification: UILocalNotification){ 

     // Your interactive local notification events will be called at this place 

    } 


} 

Objectif C

#import <UIKit/UIKit.h> 
#import <PushKit/PushKit.h> 

@interface AppDelegate : UIResponder <UIApplicationDelegate,PKPushRegistryDelegate> 
{ 
    PKPushRegistry *pushRegistry; 
} 

@property (strong, nonatomic) UIWindow *window; 

@end 

#import "AppDelegate.h" 

@interface AppDelegate() 

@end 

@implementation AppDelegate 


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 


    pushRegistry = [[PKPushRegistry alloc] initWithQueue:dispatch_get_main_queue()]; 
    pushRegistry.delegate = self; 
    pushRegistry.desiredPushTypes = [NSSet setWithObject:PKPushTypeVoIP]; 

    return YES; 
} 

#define PushKit Delegate Methods 

- (void)pushRegistry:(PKPushRegistry *)registry didUpdatePushCredentials:(PKPushCredentials *)credentials forType:(NSString *)type{ 
    if([credentials.token length] == 0) { 
     NSLog(@"voip token NULL"); 
     return; 
    } 

    NSLog(@"PushCredentials: %@", credentials.token); 
} 

- (void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(NSString *)type 
{ 
    NSLog(@"didReceiveIncomingPushWithPayload"); 
} 

https://github.com/hasyapanchasara/PushKit_SilentPushNotification

réponse Mise à jour

https://drive.google.com/file/d/0B7ooURy3zGWKYW5PZE1aN2pObW8/view?usp=sharing

réponse Mise à jour

Voici quelques problèmes options de prise de vue.

(1) identifiant le changement de com et essayez à nouveau

(2) Gardez le code puhkit dans l'application delegeate

Je suppose que, vous pouvez changer votre identifiant de groupe et d'essayer à nouveau, il doit être travailler avec tous les dispositifs.

+0

Vous pouvez zip votre projet, seulement une partie avec le code VOIP et fournir l'URL du lecteur dans votre question, donc tout le monde peut télécharger trouver le problème et la solution. – Hasya

+0

Pourquoi ne gardez-vous pas l'objet pushRegistry dans le fichier .h? Aussi pourquoi pas dans AppDelegate? N'importe quelle raison ? – Hasya

+0

Vérifiez ma réponse mise à jour, j'ai fait quelques changements dans votre code, téléchargez ce zip et vérifiez. – Hasya

0

Pour PushKit fonctionne correctement, voici les étapes que nous devons suivre:

  1. Activer les notifications Push dans le projet Capa bilités
  2. Activer notifications à distance dans les modes d'arrière-plan
  3. appareil Connectez-vous à Internet
  4. Permettre l'application pour recevoir les notifications push

S'il vous plaît se référer à this step-by-step tutorial.


Comme c'est le cas pour certains appareils seulement, les étapes 3 et 4 sont responsables.