2013-03-05 127 views
10

有沒有更新徽章中的號碼而不顯示提醒或打開應用的方法?iOS推送通知 - 無警報更新徽章?

我正在寫一個應該總是顯示圖標徽章中未讀郵件的當前數量的應用程序,但我想這樣做而不會向用戶顯示任何警報。

我正在爲iOS 5.0+開發。

編輯:爲了更清楚,我正在問一個方法來做到這一點當應用程序未運行。我希望服務器在不顯示警報的情況下推送新的徽章號碼。這可能嗎?

+0

AFAIK其完全由操作系統處理。你有什麼具體的原因你不想顯示警報? – Anupdas 2013-03-05 14:09:13

+0

應用程序是建立一個非常高的消息的頻率,我不希望錯誤的用戶。所以,根據你說的話 - 如果用戶進入到通知中心,並禁用提醒我只能做到這種行爲? – 2013-03-05 14:12:48

+0

@ Pandu1251不理解你的最後一次感嘆。你在說什麼邏輯? – 2013-03-05 14:26:11

回答

23

你可以做到。 可以在沒有提示的情況下發送推送通知。 您甚至可以將您的應用程序註冊爲徽章通知,在這種情況下,提供商服務器甚至無法發送警報或聲音。

通知有效載荷

每個推送通知與它攜帶的有效載荷。有效載荷 指定如何警告用戶將等待下載到客戶端應用程序的數據 。 通知有效負載允許的最大大小爲256字節; Apple推送通知服務 拒絕任何超出此限制的通知。請記住, 通知的傳遞是「盡力而爲」,不保證。

對於每個通知,提供者都必須編寫嚴格遵守RFC 4627的JSON字典對象 。此字典必須包含 另一個由關鍵字aps標識的字典。在APS字典 包含說明以下動作的一個或多個性質:

警報消息顯示給用戶

一個數字到徽章的應用程序圖標與

要播放的聲音

請注意,它說one or more of the properties。警報屬​​性是可選的。您甚至可以使用空的aps字典發送通知(即只發送自定義屬性)。

實施例5:以下示例顯示了一個空的aps字典; 由於徽章屬性丟失,應用程序圖標上顯示的任何當前徽章號碼 已被刪除。 acme2定製屬性是兩個整數的數組。

{ 

    "aps" : { 

    }, 

    "acme2" : [ 5, 8 ] 

} 

唯一提醒用戶會看到它,詢問他警告/她是否允許推送通知。該警報只會在安裝後第一次啓動應用程序時顯示。

在這個例子中,你註冊到非警報通知(徽章,只有聲音):

Listing 2-3 Registering for remote notifications 

- (void)applicationDidFinishLaunching:(UIApplication *)app { 

    // other setup tasks here.... 

    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)]; 

} 



// Delegation methods 

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken { 

    const void *devTokenBytes = [devToken bytes]; 

    self.registered = YES; 

    [self sendProviderDeviceToken:devTokenBytes]; // custom method 

} 



- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err { 

    NSLog(@"Error in registration. Error: %@", err); 

} 

所有的報價都來自蘋果當地採取和推送通知編程指南。

+0

伊蘭,我有一個後續問題。如果我的應用程序正在後臺監控用戶位置運行,那麼應用程序是否可以接收通知並執行一些代碼,而無需用戶知道或打開應用程序?我希望的應用,如果它收到一個推送通知其位置發送到服務器... – Trj 2013-03-08 07:54:29

+0

是有可能與出證件號碼發送推送通知的有效載荷,bcoz我不希望使用徽章概念。或者我是否需要設置徽章號碼「0」。 – siva 2014-06-04 11:15:14

+0

@siva當然這是可能的。徽章參數是可選的。 – Eran 2014-06-04 14:45:51

1

您可以使用

[UIApplication sharedApplication].applicationIconBadgeNumber = aNumber; 
+0

對不起,我不清楚,我的意思是應用程序關閉時。看我的編輯。 – 2013-03-05 14:07:11

1

你應該使用applicationIconBadgeNumber局部處理您的應用程序徽章號

[UIApplication sharedApplication].applicationIconBadgeNumber = number_of_notifications; 

我不認爲這是可能的,至今沒有警覺,做如添加徽章計數器從遠程通知。你應該閱讀有關APN Service,你的情況可能會爲UIRemoteNotificationTypeBadge註冊你應該閱讀有關Local & Push Notification Programming guide

+0

對不起,我不清楚,我的意思是應用程序關閉時。看我的編輯。 – 2013-03-05 14:06:53

+0

在這種情況下,你將有法didReceiveRemoteNotification,你可以做任何你想做這種方法 – nsgulliver 2013-03-05 14:08:04

+0

內我不想運行的應用程序的用戶更新徽章,它沒有價值,我如果用戶已打開的應用程序。 有點像iOS內置的郵件應用程序。 – 2013-03-05 14:09:44

1
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 

{ 

    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; 
} 

使用這種方法....這將幫助ü。

+0

看到我的編輯/其他讚揚... – 2013-03-05 14:08:27