Android で動作する基本的なプッシュ通知を備えた Worklight ハイブリッド アプリがあります。アプリが実行中で、通知がプッシュされたときにフォーカスがあれば、期待どおりに動作します。アプリの通知コールバックが呼び出され、SimpleDialog がポップアップします。 すべて良い。
ホームボタンをクリックしてアプリを閉じると、新しいメッセージが届くと、Android の通知領域に通知が表示され、Android の通知リストのアイテムをクリックすると、そのアイテムはリストから消えます (ただし、アプリにフォーカスが戻りません) [アプリ] メニューからアプリを起動すると、そのままの場所にアプリが残り、SimpleDialog が表示されます。(私の通知ハンドラが呼び出されました) ほとんどは良いですが、Android通知リストで通知を選択したときにアプリがフォーカスされることを期待していました.
戻るボタンをクリックしてアプリを閉じると、新しいメッセージが届くと、Android の通知領域に通知が表示され、Android の通知リストのアイテムをクリックすると、そのアイテムはリストから消えます (ただし、アプリはフォーカスに戻りません) その後、[アプリ] メニューからアプリを起動すると、アプリが新しく起動され (再度ログインする必要があります)、通知ハンドラーが呼び出されることはありません。 あまり良くない。
アプリを強制停止するか、通知の送信中に電話の電源を切ると (ただし、サブスクリプションはそのままにしておきます)、通知は電話に表示されません。電話を再起動しても Android 通知領域に表示されず、アプリを起動してもアプリの通知ハンドラーが呼び出されません。 非常に悪い。
これは予想される動作ですか?
私は Worklight 5.0.6.1 を使用しています。プラットフォーム 4.2.2 の Android エミュレーターとプラットフォーム 4.1.2 の物理電話でこの動作を確認しました。
EDT: コードを追加します。
アダプター:
WL.Server.createEventSource({
name : "MyPushEventSource",
securityTest: "MyApp-strong-mobile-securityTest"
});
function submitNotification(userId) {
var userSubscription = WL.Server.getUserNotificationSubscription(
'MyPushNotification.MyPushEventSource', userId);
if (userSubscription == null) {
return {
result : "No subscription found for user :: " + userId
};
}
var notification = WL.Server
.createDefaultNotification("There's work to be done!", 1, {});
WL.Server.notifyAllDevices(userSubscription, notification);
return {
result : "Notification sent to user :: " + userId
};
}
そしてアプリで:
WL.Client.Push.onReadyToSubscribe = function() {
var pushSubscribe_Success_Callback = function(response) {
WL.Logger.debug("Enter: pushSubscribe_Success_Callback");
};
var pushSubscribe_Fail_Callback = function(response) {
WL.Logger.debug("Enter: pushSubscribe_Fail_Callback");
};
var pushNotificationReceived = function(props, payload) {
WL.SimpleDialog.show("Notification", props.alert, [
{ text : "OK" }]);
};
WL.Client.Push.registerEventSourceCallback("myPush",
"MyPushNotification", "MyPushEventSource",
pushNotificationReceived);
if (!WL.Client.Push.isSubscribed("myPush")) {
WL.Client.Push.subscribe("myPush", {
onSuccess : pushSubscribe_Success_Callback,
onFailure : pushSubscribe_Fail_Callback
});
}
};
私が言ったように、アプリがフォーカスされている場合、これはすべて問題なく機能するため、Google メッセージング アカウントとキーが正しく設定されていることがわかります。しかし、何らかの理由で、通知が発行されたときにアプリがフォーカスされていないと、予期しない結果が表示されます。