Android で Push を使用する単純な Worklight V6 アプリがあります。アプリが起動すると、SampleAppRealm に対してフォーム ベースのログインが行われます。次に、必要に応じてサブスクライブします。
function checkSubscribed() {
var subscribed = WL.Client.Push.isSubscribed("myPush");
alert("Is subscribed: " + subscribed);
return subscribed;
}
WL.Client.Push.onReadyToSubscribe = function() {
WL.Client.Push.registerEventSourceCallback("myPush", "PushAdapter",
"MyEventSource", function(props, payload) {
alert("Received message: " + props.alert);
});
if (!checkSubscribed()) {
WL.Client.Push.subscribe("myPush", {
onSuccess : function() {
alert("subscription succeeded!");
},
onFailure : function() {
alert("subscription failed!");
}
});
}
};
これはすべてうまくいきます。アプリが起動し、ログインし、onReadyToSubscribe() が起動し、コールバックが登録され、サブスクリプションがチェックされ (false)、サブスクライブされます (成功)。
Worklight コンソールでクライアントのサブスクリプションを確認できます。アダプターを呼び出すと、アプリで通知を受け取ります。
電話で何か他のことをするためにホームボタンを押してからアプリに戻った場合でも、アプリは購読されていることを認識しています。アプリがバックグラウンドにあるときにメッセージをプッシュすると、Android の通知領域に表示され、アプリに戻るとアプリに表示されます。すべて良い。
問題は、アプリを実行していて、サブスクライブしていて、Android の戻るボタンを押したときです。アプリは閉じますが、管理コンソールにはまだサブスクライブしているクライアントが表示されます。実際、アプリを閉じた状態でメッセージをプッシュすると、Android の通知領域に表示されます。(ここまでは順調ですね)
しかし、アプリを起動すると、認証手順が実行され、onReadyToSubscribe() が起動し、checkSubscribe() が呼び出され、WLClient.Push.isSubscribe() が false を返します。
アプリをサブスクライブした状態で電話を再起動すると、アプリの再起動時に WLClient.Push.isSubscribe() が false を返します。
アプリの再起動時に正しいサブスクリプション状態を取得するにはどうすればよいですか?