0

Ich versuche eine mobile Web-App mit phonegap aufzubauen und Push-Benachrichtigungen durch Amazon SNS zu implementieren.
Ich teste gerade auf Android und ich schaffte es, die Benachrichtigungen funktionieren zu lassen, während die App im Hintergrund oder im Vordergrund ist, aber wenn ich die App komplett kille, werden die Benachrichtigungen nicht empfangen. Sobald ich die App starte, erhält sie die "ausstehenden" Benachrichtigungen.
Ich habe umfangreiche Suchen, aber habe keine Lösung gefunden, da ich die Benachrichtigung im Hintergrund und Vordergrund und ich bekomme keinen Fehler von AWS, ich denke, die Registrierung des Geräts und der Server-Seite sind korrekt.Keine Push-Benachrichtigung bei geschlossener App erhalten

Wie kann ich Benachrichtigungen in der Standardstatusleiste erhalten, auch wenn die App vollständig heruntergefahren ist?

Hier einige Code:

CLIENT

jQuery(document).ready(function($) { 
     document.addEventListener("deviceready", onDeviceReady, false); 
    }); 

    function onDeviceReady(){ 
     pushNotificationFlow(); 
     function pushNotificationFlow(){ 
     var pushNotification = window.plugins.pushNotification; 
     window.GCMsenderID = '123456789'; 

     if(isMobile.Android()){ 

      //android 
      pushNotification.register(successHandler, errorHandler,{"senderID": window.GCMsenderID,"ecb":"onNotificationGCM"}); 
     } 
     else{ 

      //ios 
      pushNotification.register(tokenHandler, errorHandler,{ 
      "badge":"true", 
      "sound":"true", 
      "alert":"true", 
      "ecb":"onNotificationAPNS" }); 
     } 
     function tokenHandler (result) { 

      var idUser=getLocalUser(); 
      if (result.length > 0){ 
       $.post('http://myserver.com/my_serverside_registration.php', { 
        token: result, 
        shop: window.shop, 
        type: 'APNS', 
        id_user: idUser 
       },function(data) { 

       }); 
      } 

     } 
     function successHandler (result) { 

     } 
     function errorHandler (error) { 

     } 
    } 
function onNotificationGCM (e) { 

    $.post('http://pointcard.stayted.com/pushTest.php', { 
      log: JSON.stringify(e) 
     }); 

    switch(e.event) 
    { 
     case 'registered': 
      if (e.regid.length > 0) 
      { 
       var idUser=getLocalUser(); 

       $.post('http://myserver.com/my_serverside_registration.php', { 
        token: e.regid, 
        shop: window.shop, 
        type: 'GCM', 
        id_user: idUser 
       },function(data) { 

       }); 
      } 
      break; 

     case 'message': 
      // this is the actual push notification. its format depends on the data model from the push server 

      alert('message = '+e.message+' msgcnt = '+e.msgcnt); 
      break; 

     case 'error': 

      break; 

     default: 

      break; 
    } 
} 
function onNotificationAPNS (e) { 

    if (e.alert) 
    { 
      chocolatApp.addNotification({ 
       title: 'mytitle', 
       message: e.alert, 
       media: '<img width="44" height="44" style="border-radius:100%" src="dist/img/appIcon.png">' 
      }); 
    } 

    if (e.sound) 
    { 
     var snd = new Media(e.sound); 
     snd.play(); 
    } 

    if (e.badge) 
    { 
     pushNotification.setApplicationIconBadgeNumber(successHandler, errorHandler, e.badge); 
    }} 

SERVER

//create amazon SNS client 
    require_once dirname(__FILE__).'/vendor/autoload.php'; 
    use Aws\Sns\SnsClient; 

    $message = 'test message '.date('d/m/Y G:i',time()); 
    $title= 'mytitle'; 

    $AWS_apiKey = 'my_apiKey'; 
    $AWS_apiSecret = 'my_apiSecret'; 
    $region = 'region'; 
    $topicArn = 'my_topicArn'; 
    $endpointArn = 'my_endpointArn'; 

    // Instantiate with your AWS credentials 
    $client = SnsClient::factory(array(
      'credentials' => array(
       'key' => $AWS_apiKey, 
       'secret' => $AWS_apiSecret, 
      ), 
      'region' => $region 
     )); 

    //Publish 
    try{ 
     $array = array(
      //'TopicArn' => $topicArn, 
      'TargetArn' => $endpointArn, 
      // Message is required 
      'Message' => json_encode(array(
       'default' => 'default', 
       'APNS' => json_encode(array(
        'aps' => array(
         'alert' => $message, 
         "sound" => "default", 
        ), 
       )), 
       'APNS_SANDBOX' => json_encode(array(
        'aps' => array(
         'alert' => $message, 
         "sound" => "default", 
        ), 
       )), 
       'GCM' => json_encode(array(
        'data' => array(
         'message' => $message, 
         'title' => $title, 
        ) 
       )), 
      )), 
      'MessageStructure' => 'json', 
      'MessageAttributes' => array(
       // Associative array of custom 'String' key names 
       'String' => array(
        // DataType is required 
        'DataType' => 'String', 
        'StringValue' => 'String' 
        //'BinaryValue' => 'String', 
       ), 
      ), 
     ); 
     $messageID = $client->publish($array); 

    }catch (\Exception $e) { 
     $error = $e->getMessage(); 
    } 

    if(!empty($error)){ 
     $alert.="<div class=\"alert alert-danger\"> 
      <strong>Error</strong>: ".print_r($error,true)." 
     </div>"; 
    } 
    elseif(!empty($message) AND empty($alert)){ 
     $alert.="<div class=\"alert alert-success\"> 
      <strong>Ok.</strong> success. 
     </div>"; 
    } 
} 

EDIT: Ich bin von 'recents' nicht um Kraft zu stoppen sie von Einstellungen Schließen der App beziehe - > apps

+1

Mögliche Duplikat [GCM Push-Benachrichtigung funktioniert nach ca. Force-Stopp?] (Http://stackoverflow.com/questions/20838415/gcm-push-notification-works-after-app -force-stop) –

+1

Es ist das erwartete android Verhalten nicht zu empfangen, wenn die App tot ist, seit Android 3.1. Siehe die akzeptierte Antwort des verknüpften Beitrags. Prost! :) –

+1

Ich implementierte Push-Benachrichtigungen mit Google Cloud Messaging und ich bekomme die Nachrichten, selbst wenn die Anwendung vollständig heruntergefahren ist. Vielleicht können Sie versuchen, die Time-to-live auf der Serverseite Ihrer Nachricht auf 0 oder eine andere Variable zu setzen. Im Fall von GCM müssen Sie einen GCMListenerService implementieren, der auch dann ausgeführt wird, wenn die App vollständig heruntergefahren ist. BEARBEITEN: hängt davon ab, was Sie mit vollständig geschlossen meinen, wenn Sie das Herunterfahren in der Einstellung erzwingen, wird es nicht funktionieren, aber wenn Sie es nur in den "letzten Apps" töten, sollte es noch funktionieren. – Allinone51

Antwort

2

Versuchen Sie es mit einigen leicht verfügbaren Plattformen für Push-Benachrichtigungen von Serverseite wie PubNub: https://www.pubnub.com/blog/2015-06-23-getting-started-with-gcm-android-push-notifications-and-pubnub/ https://www.pubnub.com/blog/2015-06-24-sending-receiving-android-push-notifications-with-gcm-google-cloud-messaging/ Ich benutze sie auch, sie funktionieren gut.

+0

getötet Ich kann versuchen, aber ich denke, mein Problem ist mit der Client-Seite – Riccardo

+0

besuchen Sie einfach diesen Link, den sie mit dem Code zur Client-Seite zur Verfügung gestellt haben auch. –

1

Versuchen Sie es mit

<uses-permission android:name="android.permission.WAKE_LOCK" /> 
Verwandte Themen