如何在 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 上请求设备令牌的主要内容,如果未能解决你的问题,请参考以下文章

iPhone推送通知设备令牌-如何“解密”

如何获取所有注册设备(APNS)的设备令牌?

如何在 iPhone 上指定推送通知的用户?

沙盒与生产中的 iPhone APNS 设备令牌

iPhone Webservice 身份验证和访问令牌

如何在资源请求上重新生成刷新令牌和访问令牌?