2009-12-21 232 views
23

我一直在向我的應用程序實施推送服務,並且我一直在考慮應用程序的徽章。我的應用程序是一個郵件應用程序(sorta),我想通過推送添加到收件箱的新郵件來通知用戶,我希望收件箱中的徽章=新郵件數量。推送通知徽章自動增量

我想到做服務器端(提供商)檢查新消息併發送號碼作爲徽章。

問題是: 有沒有辦法自動遞增應用程序的徽章,而不必計算徽章值服務器端,然後將其作爲推送負載的一部分發送給APSN?

也許有一種方法可以在JSON徽章字段中發送一些像「++」或類似的變量。 任何破解?或者我需要去與計數系統服務器端?

+2

自動增量仍然不可能嗎?我正在構建一個名爲[AcaniChat]的聊天應用程序(https://github.com/acani/AcaniChat)。與iPhone本機Messages應用程序一樣,徽章計數等於新(未讀)消息的數量,並且您會收到每條新消息的推送通知。所以,如果可以自動增加,我不必在服務器上存儲每個設備令牌的徽章數量。 – ma11hew28 2012-09-16 00:17:53

回答

28

不,你必須在服務器端跟蹤這個。如果您不包含徽章的任何價值,它將被完全刪除。

當然,只有當用戶收到通知並且應用程序沒有運行時,他們纔會選擇不啓動它。如果用戶啓動應用程序或已經運行了應用程序,則可以根據需要進行增加操作。

更新2014年3月:查看可能的更新的評論。我好幾年沒有做過推,所以還沒有能夠自己驗證這一點。

+0

這就是我的想法。 我已經想到了一個系統,但是它讓我想起了Apple這次可能會更聰明一點 - 並且自己想到了。 謝謝你清理那個。 – natanavra 2009-12-22 19:24:27

+1

爲什麼不通過緩存在應用程序中維護徽章號碼(例如NSUserDefaults) – msk 2012-06-12 07:24:09

+2

@MSK維護客戶端上的徽章號碼如何解決此問題?無論如何,如果你想獲得徽章號碼,你可以''UIApplication sharedApplication] .applicationIconBadgeNumber',不需要將它緩存在'NSUserDefaults'中。 – ma11hew28 2012-09-16 00:24:28

1

這是有點可能,但有一個權衡。

作爲推送有效負載的一部分,您始終可以將未讀總數作爲附加JSON值發送(推送忽略它不明確理解的鍵)。一旦用戶打開應用程序,讀取值並通過UIApplication的applicationIconBadgeNumber屬性以編程方式自行調整徽章。

這樣做的問題在於即使用戶沒有打開應用程序(即,當他們收到通知並且用戶點擊'取消'而不是'查看'),推送也會調整徽章值。在這些情況下,徽章不會改變,但只要他們運行應用程序(如果他們點擊'查看'),那麼您的應用程序就可以設置正確。

+1

這不是一個真正的答案......你說我可以將它添加爲JSON的有效載荷,但這是我已經可以做的,我的意思是 - 有沒有一種方法可以每次推動時自動遞增徽章... 答案它看起來是 - 不是。 我將不得不在服務器上管理它,然後發送一個數字作爲aps =>徽章... 每當用戶進入應用程序時自己重新設置標誌,並且每當用戶獲取數據時也重新設置服務器上的計數器。 無論如何感謝。 – natanavra 2009-12-22 19:23:30

+0

這裏的另一個問題是,只有在用戶訪問應用程序後更新徽章數量,我們纔會失去參與不太活躍用戶的機會。 – Zorayr 2017-03-08 23:41:19

1

您可以嘗試App42後端服務,它提供服務器端維護的推送徽章計數的自動增量。欲瞭解更多詳情,你可以點擊鏈接blog。以下是博文的內容:

以下是可通過App42推送通知中的自動增量徽章計數實現的少數用例。

對於推送徽章自動增加1,您需要發送推送消息,如下所示。

PushNotificationService pushNotificationService = App42API.BuildPushNotificationService(); // Initializing PushNotification Service. 
string userName = "UserName"; 
string message= "{'badge':'increment'}"; 
pushNotificationService.SendPushMessageToUser(userName,message, new UnityCallBack()) 

N.B:樣品解釋爲統一/ C#,但相同的處理可以對他人也被應用。

如果要爲徽章規定任何編號或想要將徽章數減少到零,則可以使用此方法在用戶點擊通知時更新計數。在這種情況下,您必須調用updatePushBadgeforDevice或updatePushBadgeforUser。

PushNotificationService pushNotificationService = App42API.BuildPushNotificationService(); // Initializing PushNotification Service. 
string userName = "UserName"; 
string deviceToken = "DeviceToken"; 
int badges = 10; // For clear count make it 0 
pushNotificationService.UpdatePushBadgeforDevice(userName, deviceToken, badges, new UnityCallBack()); 

PushNotificationService pushNotificationService = App42API.BuildPushNotificationService(); // Initializing PushNotification Service. 
string userName = "UserName"; 
int badges = 10; // For clear count make it 0 
pushNotificationService.UpdatePushBadgeforUser(userName, badges, new UnityCallBack()); 

updatePushBadgeforDevice - 此方法用於更新用戶註冊的特定設備的推送標誌計數。

updatePushBadgeforUser - 此方法用於更新用戶採購的所有設備的推送標誌計數。在這種情況下,我們假設用戶有多個設備以他的名字註冊。

-10

發送+1作爲徽章計數,這會自動將徽章數增加1.

+0

這是APNS協議中的新內容嗎?你自己測試過了嗎? – natanavra 2015-07-15 08:42:47

+2

這根本不起作用。將徽章設置爲+1時,通知甚至不會將其發送到設備。 – 2015-08-20 15:35:55