1

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 を返します。

アプリの再起動時に正しいサブスクリプション状態を取得するにはどうすればよいですか?

4

1 に答える 1

0

私自身の質問に答えます。

問題は、アプリが起動時に WL.Client.login("SampleAppRealm") を明示的に呼び出していたことであることが判明しました。環境でのセキュリティ テストのアプリケーション記述子環境設定が構成されていませんでした。

セキュリティ テストをアプリケーション記述子に追加すると、アプリの再起動後に isSubscribe() が正しい回答を返します。面白い点は、Push に関係する他のすべてが、単に WL.Client.login() によってトリガーされる認証で問題なく機能したことです。

アプリケーション記述子の設定に関するこの要件に関するドキュメントが見つからないため、これがユーザー エラーであるかどうかを判断するのは困難です。少なくとも、ドキュメントはこの領域で強化される可能性があります。

于 2013-08-14T21:19:25.093 に答える