2015-07-13 9 views
5

Ich arbeite an Hintergrund-Benachrichtigungen zu arbeiten auf IOS mit GCM - Nicht-Hintergrund-Benachrichtigungen funktionieren bereits. Hier sind meine Schritte Hintergrund-Benachrichtigungen zu integrieren:IOS GCM Push-Benachrichtigungen nicht im Hintergrund mit PHP-Absender und Swift empfangen

  1. Aktivieren Sie die Remote-Benachrichtigungen Tag in UIBackgroundmodes
  2. Fügen Sie den Inhalt verfügbare Schlüssel zu meiner Benachrichtigung Nutzlast.
  3. Schreiben Sie die Anwendung: didRecieveRemoteNotification: fetchCompletionHandler: in meinem Delegaten. Hier

ist der Code für die Delegatfunktion:

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);  
} 

Dies ist der Code für den On-Server PHP-Skript:

<?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; 
} 
?> 

habe ich versucht, den Inhalt verfügbare Flagge Senden sowohl durch das innere "Daten" -Array als auch durch das äußere "Post" -Array, das ich durch Hinzufügen zu beiden angegeben habe.

Die Nachricht wird nicht von der fetchCompletionHandler-Funktion empfangen, sondern wartet, bis die App wieder aktiv ist und von der normalen Anwendung empfangen wird: didRecieveRemoteNotification-Funktion. Was könnte der Grund sein, dass meine Benachrichtigung nicht über die Hintergrundfunktionalität empfangen wurde?

Antwort

2

Sie sollten content_available zu GCM, nicht inhalt verfügbar (wie in APNs) liefern und Sie werden Push-Benachrichtigungen im Hintergrund erhalten können.

https://developers.google.com/cloud-messaging/server-ref#send-downstream

P. S. - Vor weniger als fünf Minuten hatte ich absolut dasselbe Problem. Wir sollten Dokumente besser lesen ...

+0

Vielen Dank! Dies war definitiv ein Problem - jedoch, wenn ich das richtige Tag hinzufüge, ruft jetzt keine der Empfängerfunktionen auf. Irgendeine Idee warum? –

+1

@JohnSzymanski sollten Sie auch ein 'fetch'-Tag zu UIBackgroundModes hinzufügen. –

+0

scheint nichts zu ändern. . . –

Verwandte Themen