3

我试图在我的应用中实现推送通知,但我有,我相信,可能是一个愚蠢的问题。我有我的推送通知工作,但他们工作,因为我把设备令牌放入我的asp.net代码在服务器上。设备令牌和推送通知

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

感谢您提供的任何明确信息,因为您猜测这是我推送推送通知的第一次尝试。

回答

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

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