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就是一個例子。