2015-06-11 55 views
8

我試圖通過iOS設備中的主題系統推送通知,使用爲iOS設備設計的Google雲消息傳遞新API。輕鬆取消訂閱與GCM訂閱的所有主題(iOS設備)

我擁有正確的證書,因此我可以從創建的主題接收通知。我的訂閱主題的代碼如下:

if (_registrationToken && _connectedToGCM) { 
    [[GCMPubSub sharedInstance] subscribeWithToken:_registrationToken 
              topic:topicToSubscribe 
              options:nil 
              handler:^(NSError *error) { 
               if (error) { 
               //handle error here 
               } else { 
                self.subscribedToTopic = true; 
               } 
              }]; 
} 

我知道取消訂閱的等效函數,但此函數需要主題名稱。 有沒有辦法在訂閱前檢索我的應用可能訂閱了未註冊的所有主題?

+0

我不認爲有一個函數來檢索您的應用程序已訂閱的所有主題。您可以在本地創建一個數組,以表示您的應用程序訂閱的主題列表。因此,您可以在製作'CCMPubSub'訂閱或取消訂閱調用之前檢查數組中是否已經存在一個主題。 – ztan

回答

7

無法從Google雲消息服務檢索您的應用程序訂閱的主題列表。

您必須跟蹤列表並將其保存在您的應用程序(硬編碼,存儲在首選項,數據庫,文件等)或您的服務器上。

當你決定讓用戶退訂,檢索主題從您存儲它的列表,並將其傳遞給unsubscribeWithToken:令牌:主題:選擇:處理器Implementing Topic Messaging頁上提到

+0

謝謝,我做了一些研究,它證實了你的答案。我會盡你所能地做 – Meitneshi

6

另外,當收到消息時,你可以檢查誰是'來自'的消息。如果它來自您不再感興趣的主題,則可以取消訂閱而不處理該消息。

0

如果你想從所有主題退訂只需執行:

GGLInstanceID *iid = [GGLInstanceID sharedInstance]; 

GGLInstanceIDDeleteHandler deleteHandler = ^void(NSError *error) { 
    if (error) { 
    // failed to delete the identity for the app 
    // do an exponential backoff and retry again. 
    } else { 
    // try to get a new ID 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     GGLInstanceIDHandler handler = 
      ^void(NSString *identity, NSError *error) { 
       if (error) { 
       // failed to get the identity for the app 
       // handle error 
       } else { 
       NSString *instanceID = identity; 
       // handle InstanceID for the app 
       } 
      } 
     [iid getIDWithHandler:handler]; 
    }); 
    } 
} 

[iid deleteIDWithHandler:deleteHandler]; 

More info

不要忘記刷新TOKEN!