Obtenir un jeton de périphérique pour la notification push

Je travaille sur les notifications push. J'ai écrit le code suivant pour récupérer un jeton de périphérique.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    // Override point for customization after application launch.

    // Add the view controller's view to the window and display.
    [self.window addSubview:viewController.view];
    [self.window makeKeyAndVisible];

    NSLog(@"Registering for push notifications...");    
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
     (UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];

    return YES;
}

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 
    NSString *str = [NSString stringWithFormat:@"Device Token=%@",deviceToken];
    NSLog(@"This is device token%@", deviceToken);
}

- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err { 
    NSString *str = [NSString stringWithFormat: @"Error: %@", err];
    NSLog(@"Error %@",err);    
}

Je suis capable d'exécuter l'application sur l'appareil avec succès mais pas en mesure d'obtenir l'id de périphérique sur la console.

Je n'ai aucun problème avec les profils de certification et d'approvisionnement.

53
demandé sur klefevre 2012-01-10 08:54:33

10 réponses

Vous devez utiliser le code suivant pour obtenir le jeton de périphérique: -

Objectif-C

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 
{
    NSString *token = [[deviceToken description] stringByTrimmingCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@"<>"]];
    token = [token stringByReplacingOccurrencesOfString:@" " withString:@""];
    NSLog(@"content---%@", token);
} 

Swift 3.0

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)
{
    let   tokenString = deviceToken.reduce("", {$0 + String(format: "%02X",    $1)})
    // kDeviceToken=tokenString
    print("deviceToken: \(tokenString)")
}
115
répondu Wasif Saood 2017-08-14 11:25:15

Pour obtenir un périphérique jeton, vous pouvez faire quelques étapes :

1) Activer APNS (Apple Push Notification Service) pour la Certification des développeurs et distribuer la Certification, puis télécharger à nouveau ces deux fichiers.

2) Télécharger à nouveau le provisionnement du développeur et distribuer le fichier de provisionnement.

3) dans l'interface Xcode: configuration du provisionnement pour le projet et les cibles avec deux provisionnements de fichiers ont été téléchargés.

4) Enfin, vous devez ajouter le code ci-dessous dans AppDelegate fichier pour obtenir le périphérique jeton (remarque: exécuter l'application dans l'appareil réel).

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
     [self.window addSubview:viewController.view];
     [self.window makeKeyAndVisible];

     NSLog(@"Registering for push notifications...");    
     [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
 (UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
     return YES;
}

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 
     NSString *str = [NSString stringWithFormat:@"Device Token=%@",deviceToken];
     NSLog(@"%@", str);
}

- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err { 
     NSString *str = [NSString stringWithFormat: @"Error: %@", err];
     NSLog(@"%@",str);
}
14
répondu Bkillnest 2014-04-07 13:51:13

Le code suivant est utilisé pour récupérer le jeton de périphérique.

    // Prepare the Device Token for Registration (remove spaces and < >)
    NSString *devToken = [[[[deviceToken description] 
                            stringByReplacingOccurrencesOfString:@"<"withString:@""] 
                           stringByReplacingOccurrencesOfString:@">" withString:@""] 
                          stringByReplacingOccurrencesOfString: @" " withString: @""];


    NSString *str = [NSString 
                     stringWithFormat:@"Device Token=%@",devToken];
    UIAlertView *alertCtr = [[[UIAlertView alloc] initWithTitle:@"Token is " message:devToken delegate:self cancelButtonTitle:nil otherButtonTitles: nil] autorelease];
    [alertCtr show];
    NSLog(@"device token - %@",str);
8
répondu Nimit Parekh 2012-01-10 04:58:32

Et la version rapide de la réponse de Wasif:

Swift 2.x

var token = deviceToken.description.stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>"))
token = token.stringByReplacingOccurrencesOfString(" ", withString: "")
print("Token is \(token)")

Mise à Jour pour Swift 3

let deviceTokenString = deviceToken.map { String(format: "%02.2hhx", $0) }.joined()
6
répondu Antoine 2016-12-13 13:33:18

Si vous n'obtenez toujours pas de jeton de périphérique, essayez de mettre le code suivant afin d'enregistrer votre appareil pour la notification push.

, Il fonctionnera également sur ios8 ou plus.

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000

    if ([UIApplication respondsToSelector:@selector(registerUserNotificationSettings:)]) {
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge|UIUserNotificationTypeAlert|UIUserNotificationTypeSound
                                                                                 categories:nil];
        [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
        [[UIApplication sharedApplication] registerForRemoteNotifications];
    } else {
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
         UIRemoteNotificationTypeBadge |
         UIRemoteNotificationTypeAlert |
         UIRemoteNotificationTypeSound];

    }
#else
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
     UIRemoteNotificationTypeBadge |
     UIRemoteNotificationTypeAlert |
     UIRemoteNotificationTypeSound];

#endif
4
répondu Nilesh 2016-04-29 19:36:02

Dans votre Appdelegate, dans la méthode didRegisterForRemoteNotificationsWithDeviceToken:

NSString *deviceTokenString = deviceToken.description;
deviceTokenString = [deviceTokenString stringByReplacingOccurrencesOfString:@"[< >]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, deviceTokenString.length)];
NSLog(deviceTokenString.description);
3
répondu vfn 2016-09-22 02:23:24

Dans un paramètre de construction définir le profil de disposition de signature de code si vous avez un certificat D'activation APN, vous obtiendrez certainement l'id de jeton. et supprimer

Profil De Provision: Automatique

Et défini sur

Profil de Provision: votre certificat de profil de provision.

1
répondu kalpesh 2015-10-31 14:04:37

Obtenir le jeton de périphérique dans Swift 3

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {

    let deviceTokenString = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})

    print("Device token: \(deviceTokenString)")

}
0
répondu Sedat Y 2016-11-29 22:09:22

Obtenir le jeton de périphérique dans swift 3

 func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        let token = String(format: "%@", deviceToken as CVarArg).trimmingCharacters(in: CharacterSet(charactersIn: "<>")).replacingOccurrences(of: " ", with: "")
        print(token)
    }
0
répondu Ved Rauniyar 2017-04-03 12:58:20

Pour obtenir le jeton de périphérique, utilisez le code suivant, mais vous pouvez obtenir le jeton de périphérique uniquement en utilisant un périphérique physique. Si vous avez obligatoire d'envoyer le jeton de l'appareil, alors en utilisant le simulateur, vous pouvez mettre la condition ci-dessous.

  if(!(TARGET_IPHONE_SIMULATOR))
    {
        [infoDict setValue:[[NSUserDefaults standardUserDefaults] valueForKey:@"DeviceToken"] forKey:@"device_id"];
    }
    else
    {
        [infoDict setValue:@"e79c2b66222a956ce04625b22e3cad3a63e91f34b1a21213a458fadb2b459385" forKey:@"device_id"];
    }



- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
    NSLog(@"My token is: %@", deviceToken);
    NSString * deviceTokenString = [[[[deviceToken description] stringByReplacingOccurrencesOfString: @"<" withString: @""] stringByReplacingOccurrencesOfString: @">" withString: @""]   stringByReplacingOccurrencesOfString: @" " withString: @""];
    NSLog(@"the generated device token string is : %@",deviceTokenString);
    [[NSUserDefaults standardUserDefaults] setObject:deviceTokenString forKey:@"DeviceToken"];
}
0
répondu Yash 2017-12-28 16:37:06