0

私はphonegapビルドとアマゾンSNSを通じてプッシュ通知を実装したモバイルWebアプリケーションを開発しようとしています。
私は現在アンドロイドでテストしています。アプリがバックグラウンドまたはフォアグラウンドで動作している間に通知を行うことができましたが、アプリが完全に終了すると、通知は受信されません。 アプリを起動するとすぐに、「保留中」の通知が届きます。
私は広範囲な検索を行ったが、解決策を見つけられなかった。なぜなら私はバックグラウンドとフォアグラウンドで通知を受け取り、AWSから何のエラーも受け取らないから、デバイスとサーバー側の登録が正しいと思う。閉鎖したアプリケーションでプッシュ通知を受け取っていません

アプリが完全にシャットダウンされても、標準ステータスバーに通知を受け取る方法を教えてください。

ここにいくつかのコードです:

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

サーバ

//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>"; 
    } 
} 

編集:私は設定から​​それを止める力について '更新ムービー' ではないから、アプリを閉じるに参照のうえだが - > apps

+1

可能な重複使用してみてください[GCMのプッシュ通知アプリを強制停止した後に動作しますか?](http://stackoverflow.com/questions/20838415/gcm-push-notification-works-after-app -force-stop) –

+1

Android 3.1以降、アプリが完全に死んでいる場合は、アンドロイドの動作が期待できません。リンク先の投稿の回答を参照してください。乾杯! :) –

+1

Google Cloud Messagingでプッシュ通知を実装していて、アプリケーションが完全にシャットダウンしてもメッセージが表示されます。おそらく、あなたのメッセージのサーバー側の生存時間を0または別の変数に設定しようとすることができます。 GCMの場合、GCMListenerServiceを実装する必要があり、アプリケーションが完全にシャットダウンされても実行され続けます。編集:それは動作しませんが、 "最近のアプリ"でそれを殺すだけで動作する設定をシャットダウンする場合は、完全に閉じて何を意味するかによって異なります。 – Allinone51

答えて

2

プッシュ通知のための簡単に利用可能なプラットフォームを試してみてください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/ 私もそれらを使用しています、彼らは正常に動作します。

+0

私は問題はクライアント側と考えています – Riccardo

+0

クライアントサイドを処理するためのコードを提供しています同じように。 –

1

<uses-permission android:name="android.permission.WAKE_LOCK" /> 
関連する問題