设备令牌和推送通知

3
我的任务是将推送通知功能添加到我的应用程序中,但我有一个问题:当我在服务器上的asp.net代码中放置设备令牌时,它们能够工作,但这是否意味着我需要跟踪应用程序获取的设备令牌?换句话说,当应用程序启动并获取设备令牌时,我需要将它们发送到我的服务器并存储它们,以便在需要向所有用户发送通知时,可以遍历令牌列表并将通知发送到每个设备令牌吗?感谢您带来的任何清晰度,因为这是我第一次尝试推送通知。
2个回答

1

您需要将设备令牌存储在数据库中,然后向每个设备令牌发送通知。您可以自己创建系统,但也有已经完成此操作的开源库。虽然它是针对PHP的,但Easy APNS是一个例子。


0

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

以下是来自raywenderlich.com的示例,该示例创建了一个聊天程序。基本上,他们正在创建一个带有设备信息的POST请求,将其存储在数据库中,并稍后访问DB信息以迭代并发送通知。

一些相关代码:

- (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];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接