1

私のアプリケーションはACSプッシュ通知を使用しています。アプリケーションにアプリバッジを実装しました。ただし、問題は、プッシュ通知の受信中にappBadgeが自動的にインクリメントされないことです。私は自分のアプリで次のコードを使用しました

var deviceToken;
Titanium.Network.registerForPushNotifications({
        types: [
            Titanium.Network.NOTIFICATION_TYPE_BADGE,
            Titanium.Network.NOTIFICATION_TYPE_ALERT,
            Titanium.Network.NOTIFICATION_TYPE_SOUND
        ],
        success:function(e)
        {
            deviceToken = e.deviceToken;
            SubscribeToPush(channelName, deviceToken, type);
        },
        error:function(e)
        {
            alert("Error: "+ ((e.error && e.message) || JSON.stringify(e.error)));
        },
        callback:function(e)
        {
            var badgeCount = Ti.UI.iPhone.getAppBadge();
            badgeCount = badgeCount + 1;
            Ti.UI.iPhone.setAppBadge(badgeCount);
        }
    });

ここで、新しいプッシュ通知を受信したときに呼び出される「コールバック関数」を読みました。そこで、バッジをインクリメントするためのコールバックとして次のコードを設定しました。

callback:function(e)
{
     var badgeCount = Ti.UI.iPhone.getAppBadge(); //Will return the app badges
     badgeCount = badgeCount + 1;                 //Incrementing the appbadge
     Ti.UI.iPhone.setAppBadge(badgeCount);        //Setting new appbadge
}

アプリが開いている間は機能し、通知を受信するとコールバックが発生し、アプリがバックグラウンドに移行するとバッジが表示されます。ただし、アプリがバックグラウンドにあるとき、または終了したときにバッジ番号を増やしたいのですが。誰かがこの問題を解決するのを手伝ってもらえますか?

4

1 に答える 1

1

多くの調査の後、サーバーのプッシュ通知を受信しながら appBadge をインクリメントするサンプル アプリケーションを作成しました。コードはIncrement the ios appBadge Titaniumからダウンロードできます。resources フォルダーをダウンロードした後、手順に従ってください。

  1. Titanium で新しいモバイル アプリケーション プロジェクトを作成します。
  2. resources フォルダーをダウンロードしたものに置き換えます。
  3. www.appcelerator.com にログインし、アプリに移動してから、ACS の管理に移動します。
  4. 管理者として新しいユーザーを作成し、ユーザーを管理者として設定します
  5. admin ユーザーを使用して新しいアクセス制御リスト (ACS) を作成し、ACL 名を「SampleApp」として指定します。
  6. プッシュ通知用の p12 証明書をアップロードする
  7. アプリケーションを iPhone にインストールし、アプリケーションを実行します...

アプリの各ユーザーには、通知の数を格納するカスタム オブジェクトが必要です。プッシュを送信しながらそれらを更新し、アプリケーションを再開/開いている間にそれをクリアします。iPhone デバイスでテストしたところ、完璧に動作しました。ただし、ACS を複数回呼び出す必要があるため、多少の遅延が発生します。

更新 : 最新の Titanium SDK は、デフォルトでこの機能をサポートしています。

必要なことは、ペイロードを次のように変更することです。

var payload = {"alert":"Hi, This is a test notification", badge: "+1"};
/*+1 will increment the current appbadge by 1, number of appbadge will be saved in the ACS*/
Cloud.PushNotifications.notify({
    channel: 'friend_request',
    payload: payload
}, function (e) {
    if (e.success) {
       alert('Success');
    } else {
        alert('Error:\n' +
        ((e.error && e.message) || JSON.stringify(e)));
    }
});

これにより、appbadge が 1 つ増えます。また、次のようにアプリケーションを再開/開くときに appbadge をリセットする必要があります。

Cloud.PushNotifications.resetBadge({
   device_token : myDeviceToken
}, function(e){
       if(e.success){
             Ti.UI.iPhone.setAppBadge(0);
       } else {
             //Error callback
       }
})
于 2013-04-29T04:11:26.137 に答える