2015-10-12 5 views
3

Я включил фоновые режимы в xcode и проверил «Удаленные уведомления».Уведомления GCM push не работают для iOS, когда приложение неактивно

Должен ли я включить «Push Notifications»? для GCM

здесь полезная нагрузка от моего отдыха клиента

{ 
    "data": { 


      "displayMessage": { 
       "message": "Package delivered", 

      } 

    }, 
    "registration_ids": [ 
     "dgfdghdfghgfhhfjhgjghjghjhjghjghjghjghjghjghjhgggh" 
    ], 
    "content-available" : true, 
    "priority": "high" 
} 

Это работает, когда приложение находится на переднем плане и не работает, когда приложение не на переднем плане.

Любая помощь для получения этого GCM для работы с ios была бы высоко оценена.

+1

Взгляните на этот вопрос, хотя http://stackoverflow.com/questions/33192145/gcm-push-notification-when-ios-app- is-in-the-background – mojo

+0

Возможный дубликат [Уведомления GCM не принимаются, когда приложение находится в фоновом режиме в iOS] (http://stackoverflow.com/questions/34704736/gcm-notifications-not-receiving-when-app- is-in-background-mode-in-ios) –

ответ

0

Я хотел бы предложить, чтобы проверить формат сообщения, как это упомянуто здесь:

Making GCM work for iOS device in the background

+0

Я пробовал это, прежде чем публиковать этот вопрос без успеха. Можете ли вы придумать что-нибудь еще, что я могу пропустить? –

+0

Я полагаю, что это связано с серверной стороной, а не с клиентом, можете ли вы предоставить некоторый код, чтобы показать, как вы делаете запросы к GCM? @SanthoshAdari –

+0

Я просто пользователь остальное клиент под названием "Advanced Rest Client" для Google Chrome –

0

Ваш ключ является неправильным. Использовать content_available, а не content-available.

Кроме того, ваш JSON недействителен. В частности, это:

"message": "Package delivered",

не должно быть запятой в конце.

+0

content_available всегда будет давать мне «InternalServerError». Я прочитал документацию, и я согласен с тем, что она просит нас использовать content_available для gcm. –

+0

Я использую GCM для подключения к устройствам iOS, он работает для меня. Я использую content_available. –

+0

можете ли вы сообщить мне, какой клиент для отдыха вы используете? –

0

Эта проблема возникла с сервера. Тело сообщения уведомления должно быть таким.

{ 
    "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...", 
    "content_available" : "true" 
    "notification" : { 
    "body" : "great match!", 
    "title" : "Portugal vs. Denmark" 
    } 
} 

Вот код, который я внедрил и работает нормально.

<?php 

// Message to send 
$notificationTitle = "Notification title"; 
$notificationtBody = "Notification arrived"; 

$registrationId = 'GCM_DEVICE_TOKEN'; 
$apiKey = "GCM_SERVER_KEY"; 

$response = sendNotification( 
       $apiKey, 
       $registrationId, 
       array( 
        'sound' => "default", 
        'badge' => 1, 
        'body' => $notificationtBody, 
        'title' => $notificationTitle 
       ) 
      );    

echo $response; 


function sendNotification($apiKey, $registrationId, $messageData) 
{ 
    $headers = array("Content-Type:" . "application/json", "Authorization:" . "key=" . $apiKey); 
    $data = array(
     'to' => $registrationId, 
     'content_available' => true, 
     'notification' => $messageData 
    ); 

    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($ch, CURLOPT_URL, "https://android.googleapis.com/gcm/send"); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); 

    $response = curl_exec($ch); 
    curl_close($ch); 

    return $response; 
} 
0

Это уведомление работал для меня

{ 
    "to":"ID", 
    "notification":{ 
    "sound":"default", 
    "title":"TITLE", 
    "body":"BODY" 
    }, 
    "priority": "high" 
}