如何在 iPhone 上请求设备令牌
Posted
技术标签:
【中文标题】如何在 iPhone 上请求设备令牌【英文标题】:How to request device token on iphone 【发布时间】:2010-05-08 19:53:33 【问题描述】:订阅推送通知时,我可以使用 didRegisterForRemoteNotificationWithDeviceToken 回调方法来获取我的 iphone 的设备令牌。我的问题是我以后如何才能再次获得此令牌?当用户订阅我的应用程序中的某些内容时,我想发送设备令牌和他们订阅的项目的 ID……但我不知道从哪里获取设备令牌。我尝试使用 UIDevice 类中的 uniqueIdentifer,但该值与原始令牌不同。我想每次我的应用程序开始生成令牌时,我都可以调用 registerForRemoteNotificationTypes 。但如果我这样做,我不确定如何从不同的类访问这个值(我的 didRegisterForRemoteNotificationWithDeviceToken 回调位于主应用程序委托中)。感谢您对客观 C 新手的任何帮助!
【问题讨论】:
【参考方案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];
【讨论】:
感谢您的回复。我可以在委托中设置变量并使用委托类中的 [self deviceId] 检索它。但是,当我尝试使用您提供的代码检索它时,它不起作用。应用程序编译,但当它到达该行时,我得到一个“EXC_BAD_ACCESS”错误,没有其他信息。我在使用客观 c 语法时遇到了很多麻烦,并且缺乏合理的错误消息使得这很难弄清楚。任何帮助将不胜感激。 没关系,我让它工作了。我不知道为什么,但是当我没有释放令牌字符串时,它运行良好,没有任何问题。以上是关于如何在 iPhone 上请求设备令牌的主要内容,如果未能解决你的问题,请参考以下文章