私は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
可能な重複使用してみてください[GCMのプッシュ通知アプリを強制停止した後に動作しますか?](http://stackoverflow.com/questions/20838415/gcm-push-notification-works-after-app -force-stop) –
Android 3.1以降、アプリが完全に死んでいる場合は、アンドロイドの動作が期待できません。リンク先の投稿の回答を参照してください。乾杯! :) –
Google Cloud Messagingでプッシュ通知を実装していて、アプリケーションが完全にシャットダウンしてもメッセージが表示されます。おそらく、あなたのメッセージのサーバー側の生存時間を0または別の変数に設定しようとすることができます。 GCMの場合、GCMListenerServiceを実装する必要があり、アプリケーションが完全にシャットダウンされても実行され続けます。編集:それは動作しませんが、 "最近のアプリ"でそれを殺すだけで動作する設定をシャットダウンする場合は、完全に閉じて何を意味するかによって異なります。 – Allinone51