Я работаю над тем, чтобы получать фоновые уведомления для работы с IOS с помощью GCM. Уже не работают фоновые уведомления. Вот мои шаги по интеграции фоновых уведомлений:
Вот код функции делегата:
func application( application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler handler: (UIBackgroundFetchResult) -> Void) { println("Notification received2: \(userInfo)") GCMService.sharedInstance().appDidReceiveMessage(userInfo); NSNotificationCenter.defaultCenter().postNotificationName(messageKey, object: nil, userInfo: userInfo) handler(UIBackgroundFetchResult.NoData); }
Это код скрипта php на сервере:
<?php $regId = $_GET["regId"]; $message = $_GET["message"]; $data = array( 'price' => $message, 'sound' => 'default', 'body' => 'helloworld', 'title' => 'default', 'badge' => 12, 'content-available' => 1); $ids = array( $regId); sendGoogleCloudMessage( $data, $ids ); function sendGoogleCloudMessage( $data, $ids ) { $apiKey = THE-API-KEY-THAT-I-AM-USING; $url = 'https://android.googleapis.com/gcm/send'; $post = array( 'registration_ids' => $ids, 'data' => $data, 'content-available' => 1, ); $headers = array( 'Authorization: key=' . $apiKey, 'Content-Type: application/json' ); $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $url ); curl_setopt( $ch, CURLOPT_POST, true ); curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $post ) ); $result = curl_exec( $ch ); if ( curl_errno( $ch ) ) { echo 'GCM error: ' . curl_error( $ch ); } curl_close( $ch ); echo $result; } ?>
Я попытался отправить флаг доступности контента через внутренний массив «data» и внешний массив «post», который я указал, добавив его к обоим.
Сообщение не получено функцией fetchCompletionHandler, а ожидает, что приложение снова будет активным и будет получено обычным приложением: функция doRecieveRemoteNotification. Что может быть причиной того, что мое уведомление не получено через функциональность фона?
Вы должны предоставить content_available для GCM, а не для контента (например, в APN), и вы сможете получать push-уведомления в фоновом режиме.
https://developers.google.com/cloud-messaging/server-ref#send-downstream
PS – Меньше, чем пять минут назад у меня была такая же проблема. Мы должны внимательно читать документы …