2

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 メッセージング アカウントとキーが正しく設定されていることがわかります。しかし、何らかの理由で、通知が発行されたときにアプリがフォーカスされていないと、予期しない結果が表示されます。

4

2 に答える 2

0

4 つのシナリオはすべて、期待どおりに機能します。
Worklight v5.0.6.1 および付随する PushNotifications プロジェクトでテスト済み。

GCM キーと GCM ID を使用してプロジェクトをセットアップした後、アダプターとアプリケーションをデプロイし、Android 4.2.2 を実行している Galaxy S4 でアプリを起動します。

  1. ログインし、購読し、通知を送信しました
  2. ログインして購読し、ホームボタンをタップしてアプリをバックグラウンドに送り、通知を送信しました
  3. ログインし、登録し、[戻る] ボタンをタップしてアプリを閉じ、通知を送信しました
  4. ログイン、購読、アプリの終了、デバイスの電源オフを行いました

  1. アプリがフォアグラウンドにある間、受信した通知のダイアログが表示されました
  2. アプリがバックグラウンドにある間に、通知バーに通知を受け取りました。タップするとアプリがフォアグラウンドになり、受信した通知のダイアログが表示されました
  3. アプリを閉じている間に、通知バーに通知が届きました。タップするとアプリが起動し、ログイン後、受信した通知のダイアログが表示されました
  4. デバイスの電源を入れ、ネットワークに接続されるのを待ったところ、通知バーに通知が届きました。タップするとアプリが起動し、ログイン後、受信した通知のダイアログが表示されました

これが自分で作成したプッシュ通知アプリである場合は、コードを確認することをお勧めします。サンプル アプリをガイダンスとして使用できます。

于 2013-07-11T06:00:08.017 に答える