2013-07-11 193 views
0

我正在實現推送通知,並且如果應用程序處於前臺,它們被正確接收,didReceiveRemoteNotification與數據一起被調用。所以我認爲令牌和服務器問題是零。 當應用程序在後臺時,它變得醜陋:我發送通知,從不在通知中心顯示爲收到,而不顯示徽章。 在設置/通知/ MyApp中,一切都處於活動狀態。 也許是因爲我正在使用開發證書或因爲Apple的沙箱問題? 任何想法將不勝感激。 謝謝系統沒有顯示推送通知

+0

我看到同樣的問題在這裏 的http://計算器.COM /曲estions/7965417/ios-push-notification-alert-is-not-shown-when-the-app-is-running – Elto

+0

不是同樣的問題,鏈接的一個是指PN在前臺運行時沒有出現,而這個是在後臺運行時,還是根本沒有運行。不過謝謝。 –

回答

0

通過您的描述,我假設您在某些時候正在接收APNs(Apple推送通知)。仔細檢查你的代碼在你的AppDelegate,看看你是否有以下幾點:

在你- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

你應該有

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];

在你didReceiveRemoteNotification試試這個代碼,看看當你發生了什麼收到一個APN:

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{ 
NSLog(@"remote notification: %@",[userInfo description]); 
NSDictionary *apsInfo = [userInfo objectForKey:@"aps"]; 

NSString *alert = [apsInfo objectForKey:@"alert"]; 
NSLog(@"Received Push Alert: %@", alert); 

NSString *sound = [apsInfo objectForKey:@"sound"]; 
NSLog(@"Received Push Sound: %@", sound); 

NSString *badge = [apsInfo objectForKey:@"badge"]; 
NSLog(@"Received Push Badge: %@", badge); 
} 

最後確保您確實成功充分註冊接收的APN:

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken { 
NSLog(@"My token is: %@", deviceToken); 
} 

包括該代碼的情況下,你會得到一個錯誤的APN註冊:

- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error { 
NSLog(@"Failed to get token, error: %@", error); 
} 
+0

當應用程序處於前景時,所有內容都會進行雙重檢查並正常工作。感謝您的時間和精力。 –

+0

你有關於如何處理傳入的APN的代碼?請記住,如果您的應用程序位於後臺,則只會播放聲音並更新徽章數量。一旦你的應用程序在前臺,你將不得不處理任何更新/同步服務器端。 – sangony

+0

是的,我知道並且我在收到推送請求時會爲該客戶端請求服務器更新,但問題是應該在手機上顯示通知(在通知中心滑塊中),警報(在用戶指定的設置樣式應用程序/通知),聲音和徽章,並且當應用程序處於後臺時都不會顯示,因此用戶從未意識到有新的東西(當他打開應用程序時,它會向服務器請求更新)。 –

2

固定。在創建有效載荷時,我使用了一個簡單的數組,而不是使用['aps']鍵的數組。服務器端問題。我不知道爲什麼蘋果發送的通知沒有形成,當文件說不會。這個細節讓我覺得服務器端是好的,這就是爲什麼我沒有粘貼代碼,對此抱歉。

錯誤:

$payload = array('alert' => $this->code->getText(), 
        'sound' => 'default', 
        'badge' => '1'); 
    $message['payload'] = json_encode($payload); 

右:

$body['aps'] = array(
       'alert' => $this->code->getText(), 
       'sound' => 'default', 
       'badge' => '1' 
      ); 
      $message['payload'] = json_encode($body); 

和發送代碼...

if ($this->sendNotification($message['device_token'], 
           $message['payload'])) {  
    } else { // failed to deliver 
     $this->reconnectToAPNS(); 
    }