取消订阅使用 GCM 订阅的所有主题的简便方法(iOS 设备)

Easy way to unsubscribe for all topic subscribed with GCM (iOS device)

我正在尝试通过 iOS 设备中的主题系统推送通知,其中 API 的 Google 云消息传递专为 iOS 设备设计。

我有正确的证书,所以我可以从创建的主题接收通知。我订阅主题的代码如下:

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

我知道取消订阅的等效函数,但此函数需要一个主题名称。 有没有办法检索我的应用程序可能订阅的所有主题,在订阅之前取消注册?

无法从 Google 云消息服务检索您的应用订阅的主题列表。

您必须跟踪列表并将其保存在您的应用程序(硬编码、存储在首选项、数据库、文件等中)或您的服务器上。

当您决定让用户取消订阅时,从存储它的位置检索主题列表并将其传递给 unsubscribeWithToken:token:topic:options:handler,如上所述Implementing Topic Messaging

或者,当您收到消息时,您可以查看消息的发件人'from'。如果它来自您不再感兴趣的主题,您可以退订而不是处理消息。

如果您想退订所有主题,只需执行:

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!

如果您拥有注册令牌,则可以使用 https://iid.googleapis.com/iid/info/IID_TOKEN(在 header 中使用授权密钥)获取设备订阅的主题。其中 IID_TOKEN 是注册令牌。

https://developers.google.com/instance-id/reference/server#get_information_about_app_instances 找到更多信息。