2015-10-13 11 views
9

Non riesco a ricevere il token del dispositivo durante la registrazione per le notifiche remote. Ricevo il messaggio di avviso "Do you want to allow App X to be able to send you notificaitons", ma quando lo accetto, la funzione didRegisterForRemoteNotifications non viene chiamata. Ho provato il seguente codice.Come ottenere un token dispositivo durante la registrazione per le notifiche remote in Swift

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    // Override point for customization after application launch. 

    var types: UIUserNotificationType = UIUserNotificationType.Badge | 
     UIUserNotificationType.Alert | 
     UIUserNotificationType.Sound 

    var settings: UIUserNotificationSettings = UIUserNotificationSettings(forTypes: types, categories: nil) 

    application.registerUserNotificationSettings(settings) 
    application.registerForRemoteNotifications() 

    return true 
} 

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { 

    var characterSet: NSCharacterSet = NSCharacterSet(charactersInString: "<>") 

    var deviceTokenString: String = (deviceToken.description as NSString) 
     .stringByTrimmingCharactersInSet(characterSet) 
     .stringByReplacingOccurrencesOfString(" ", withString: "") as String 

    println(deviceTokenString) 

} 

Il mio profilo di approvvigionamento e certificati sono in ordine.

Qualcun altro ha avuto questo problema?

+0

Avete implementato la richiamata per quando la registrazione non riesce e vedere se questo viene chiamato? – dan

+0

Ho applicato il metodo delegate durante la registrazione non riesce ma non sta chiamando –

+0

Ho avuto questo stesso problema lo hai mai capito? –

risposta

2

Quindi stavo eseguendo la mia app su un dispositivo per un po 'e sono tornato a vedere che lo application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) era stato chiamato fuori dal blu e ora funziona come un incantesimo! La mia migliore ipotesi sul perché è successo è che ci sono voluti solo un po 'di tempo per i certificati e tutto il resto che si svolge in background per configurare le notifiche push da configurare. Quindi per chiunque abbia lo stesso problema, suggerisco di dargli un po 'di tempo e poi di tornare ad esso, nel mio caso ci sono volute circa 12 ore se è stato di aiuto.

2

A volte gli apns sandbox non funzionano come è successo ieri, in quel momento i delegati non vengono chiamati token dispositivo.

0
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ 
if([[UIDevice currentDevice] systemVersion].floatValue >= 8.0) 
{ 
    UIUserNotificationSettings* notificationSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil]; 
    [[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings];  
} 
else 
{ 
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound|UIRemoteNotificationTypeBadge)]; 
} 
} 


- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 
{ 
      //Your device token code 
} 

cercare di attuare sotto i metodi e controllare:

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings 
{ 
    //register to receive notifications 
    [application registerForRemoteNotifications]; 
} 

//For interactive notification only 
- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void(^)())completionHandler 
{ 
    //handle the actions 
    if ([identifier isEqualToString:@"declineAction"]){ 
    } 
    else if ([identifier isEqualToString:@"answerAction"]){ 
    } 
} 
+2

Non dire alle persone di accettare la tua risposta. Se la risposta è utile per l'OP, accetteranno. Ma se leggi l'auto-risposta dell'OP, vedresti che la tua risposta non ha risolto il suo problema. – JAL

+2

Inoltre, la domanda è contrassegnata "swift", non "objective-c". Dovresti pubblicare il codice Swift. Si prega di seguire sempre i tag della domanda. – Moritz

Problemi correlati