设备令牌和推送通知
Posted
技术标签:
【中文标题】设备令牌和推送通知【英文标题】:Device Token and Push Notification 【发布时间】:2012-11-15 17:01:55 【问题描述】:我正在尝试在我的应用程序中实现推送通知,但我认为,我认为这可能是一个愚蠢的问题。我的推送通知工作正常,但它们工作正常,因为我将设备令牌放入服务器上的 asp.net 代码中。
我的问题是,我是否应该跟踪我的应用获得的设备令牌?换句话说,当应用程序启动并获得设备令牌时,我是否需要将它们发送到我的服务器并存储它们,以便当我需要向我的应用程序的所有用户发送通知时,我可以浏览列表令牌并将通知发送到每个设备令牌?
感谢您提供的任何澄清,因为您猜这是我第一次尝试推送通知。
【问题讨论】:
【参考方案1】:您必须将设备令牌存储在数据库中。然后,您向每个设备令牌发送一个通知。您可以自己创建系统,但是已经有一些开源库已经这样做了。虽然是针对 php 的,但Easy APNS 就是一个例子。
【讨论】:
【参考方案2】:我自己也遇到过这种情况,因为硬编码设备令牌是限制可以发送推送通知的设备的一种方法,但是如果您想允许任何下载了您的应用的设备,您需要创建一个将设备的设备令牌发送到您的服务器以便向其发送推送通知的机制。您可以在应用加载时将此请求设置到您的服务器,在我的情况下,静默成功,失败时让用户知道他们没有添加到通知列表中。
这是来自raywenderlich.com 的一个创建聊天程序的示例。 -- 基本上,他们使用存储在数据库中的设备信息创建发布请求,然后访问数据库信息以迭代并发送通知。
一些相关代码:
- (void)postJoinRequest
MBProgressHUD* hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.labelText = NSLocalizedString(@"Connecting", nil);
NSURL* url = [NSURL URLWithString:ServerApiURL];
__block ASIFormDataRequest* request = [ASIFormDataRequest requestWithURL:url];
[request setDelegate:self];
[request setPostValue:@"join" forKey:@"cmd"];
[request setPostValue:[dataModel udid] forKey:@"udid"];
[request setPostValue:[dataModel deviceToken] forKey:@"token"];
[request setPostValue:[dataModel nickname] forKey:@"name"];
[request setPostValue:[dataModel secretCode] forKey:@"code"];
[request setCompletionBlock:^
if ([self isViewLoaded])
[MBProgressHUD hideHUDForView:self.view animated:YES];
if ([request responseStatusCode] != 200)
ShowErrorAlert(NSLocalizedString(@"There was an error communicating with the server", nil));
else
[self userDidJoin];
];
[request setFailedBlock:^
if ([self isViewLoaded])
[MBProgressHUD hideHUDForView:self.view animated:YES];
ShowErrorAlert([[request error] localizedDescription]);
];
[request startAsynchronous];
【讨论】:
以上是关于设备令牌和推送通知的主要内容,如果未能解决你的问题,请参考以下文章