取消订阅使用 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];
别忘了刷新你的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 找到更多信息。
我正在尝试通过 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];
别忘了刷新你的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 找到更多信息。