3

我正在尝试在我的应用程序中实现推送通知,但我认为,我认为这可能是一个愚蠢的问题。我有我的推送通知工作,但它们工作,因为我将设备令牌放入服务器上的 asp.net 代码中。

我的问题是,我应该跟踪我的应用程序获得的设备令牌吗?换句话说,当应用程序启动并获得设备令牌时,我是否需要将它们发送到我的服务器并存储它们,以便当我需要向我的应用程序的所有用户发送通知时,我可以浏览列表令牌并将通知发送到每个设备令牌?

感谢您提供的任何清晰度,因为您猜到这是我第一次尝试推送通知。

4

2 回答 2

1

您必须将设备令牌存储在数据库中。然后,您向每个设备令牌发送一个通知。您可以自己创建系统,但是已经有一些开源库已经这样做了。虽然它是针对 PHP 的,但Easy APNS就是一个例子。

于 2012-11-15T17:53:45.233 回答
0

我自己会遇到这种情况,因为事实证明硬编码设备令牌是限制可以发送推送通知的设备的一种方法,但是如果您想允许任何下载了您的应用程序的设备,您需要创建一个发送机制设备的设备令牌到您的服务器,以便向其发送推送通知。您可以在应用程序加载时将此请求设置到您的服务器,在我的情况下,静默成功,失败时让用户知道他们没有添加到通知列表中。

这是一个来自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];
}
于 2012-11-15T17:23:46.223 回答