Как запросить токен устройства на iphone

Я могу использовать метод обратного вызова didRegisterForRemoteNotificationWithDeviceToken, чтобы получить токен устройства моего iphone при подписке на push-уведомления. Мой вопрос: как я могу снова получить этот токен позже? Когда пользователь подписывается на что-то в моем приложении, я хочу отправить токен устройства и идентификатор элемента, на который они подписываются... но я не могу понять, откуда взять токен устройства. Я попытался использовать uniqueIdentifer из класса UIDevice, но это значение отличается от исходного токена. Я предполагал, что смогу вызывать registerForRemoteNotificationTypes каждый раз, когда мое приложение начинает создавать токен. Но если я это сделаю, я не уверен, как я могу получить доступ к этому значению из другого класса (мой обратный вызов didRegisterForRemoteNotificationWithDeviceToken находится в главном делегате приложения). Спасибо за любую помощь для новичка в C!


person Greg    schedule 08.05.2010    source источник


Ответы (1)


Я бы установил свойство в вашем appDelegate, к которому можно получить доступ из любого места, и установил бы его на токен устройства.

// .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];
}

Затем вы можете получить доступ к этому токену в любом месте, используя:

NSString * token = [(SomeAppDelegate*)[[UIApplication sharedApplication] delegate] dToken];
person Tom Irving    schedule 09.05.2010
comment
Спасибо за ваш ответ. Я могу установить переменную в делегате и получить ее, используя [self deviceId] из класса делегата. Однако, когда я пытаюсь получить его с помощью предоставленного вами кода, он не работает. Приложение компилируется, но когда оно доходит до этой строки, я получаю ошибку EXC_BAD_ACCESS без какой-либо другой информации. У меня много проблем с синтаксисом объектива c, и отсутствие разумного сообщения об ошибке делает это очень трудным для понимания. Любая помощь будет принята с благодарностью. - person Greg; 10.05.2010
comment
Неважно, я заставил его работать. Я не уверен, почему, но когда я не выпустил токен String, он работал нормально без каких-либо проблем. - person Greg; 10.05.2010