2010-05-08 7 views
2

Je suis capable d'utiliser la méthode de rappel didRegisterForRemoteNotificationWithDeviceToken pour obtenir le jeton de périphérique de mon iphone lorsque je m'abonne aux notifications push. Ma question est comment puis-je obtenir ce jeton plus tard? Quand un utilisateur s'abonne à quelque chose dans mon application, je veux envoyer le jeton de l'appareil et l'identifiant de l'objet auquel il s'abonne ... mais je n'arrive pas à savoir d'où obtenir le jeton d'appareil. J'ai essayé d'utiliser l'uniqueIdentifer de la classe UIDevice mais cette valeur est différente de celle du jeton d'origine. Je suppose que je pourrais appeler registerForRemoteNotificationTypes chaque fois que mon application commence à produire le jeton. Mais si je fais cela, je ne sais pas comment je peux accéder à cette valeur à partir d'une classe différente (mon rappel didRegisterForRemoteNotificationWithDeviceToken se trouve dans le délégué de l'application principale). Merci pour toute aide pour un débutant objectif C!Comment demander un jeton de périphérique sur l'iphone

Répondre

5

Je voudrais définir une propriété dans votre appDelegate qui peut être accessible à partir de n'importe où, et le définir sur le jeton de périphérique.

// .h 
@interface SomeAppDelegate : NSObject <UIApplicationDelegate> { 
    NSString * dToken; 
} 

@property (nonatomic, retain) NSString * dToken; 

// .m 
@implementation SomeAppDelegate; 
@synthesize dToken; 

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 

    NSString * token = [[NSString alloc] initWithData:deviceToken encoding:NSUTF8StringEncoding]; 
    [self setDToken:token]; 
    [token release]; 
} 
- (void)dealloc { 
    [dToken release] 
    [super dealloc]; 
} 

Vous pouvez accéder à ce jeton partout en utilisant:

NSString * token = [(SomeAppDelegate*)[[UIApplication sharedApplication] delegate] dToken]; 
+0

Merci pour la réponse. Je suis en mesure de définir la variable dans le délégué et de le récupérer en utilisant [self deviceId] à partir de la classe de délégué. Cependant, lorsque j'essaie de le récupérer en utilisant le code que vous avez fourni, cela ne fonctionne pas. L'application compile, mais quand elle arrive à cette ligne, j'obtiens une erreur "EXC_BAD_ACCESS" sans autre information. J'ai beaucoup de problèmes avec la syntaxe de l'objectif c et l'absence d'un message d'erreur raisonnable rend cela très difficile à comprendre. Toute aide serait grandement appréciée. – Greg

+0

Peu importe, je l'ai eu à travailler. Je ne sais pas pourquoi mais quand je n'ai pas sorti le token String ça a bien fonctionné sans aucun problème. – Greg

Questions connexes