Как отписаться от iOS-устройства в теме Amazon SNS?
Я разрабатываю приложение для iOS с Simple Notification Service (SNS) от Amazon Web Services. На этом этапе приложение регистрирует устройство в теме и может получать push-уведомления, которые публикуются в теме. Можно подписать устройство на множество тем.
Сейчас я пытаюсь отписать устройство от определенной темы, но для запроса SNSUnsubscribeRequest требуется подписка ARN. Я пытался использовать EndpointARN с устройства, но, похоже, мне нужно использовать дополнительную SubscriptionARN для комбинации EndpointARN и TopicARN. Как мне получить этот ARN?
В этом посте:Как вы получаете арн подписки? они запрашивают полный список подписчиков и сравнивают каждый EndpointARN с EndpointARN устройства. Это не может быть правильным способом, я думаю.
Подписаться на тему
// Check if endpoint exist
if (endpointARN == nil) {
dispatch_async(dispatch_get_main_queue(), ^{
[[self universalAlertsWithTitle:@"endpointARN not found!" andMessage:@"Please create an endpoint for this device before subscribe to topic"] show];
});
return NO;
}
// Create topic if not exist
NSString *topicARN = [self findTopicARNFor:topic];
if (!topicARN) {
[self createTopic:topic];
topicARN = [self findTopicARNFor:topic];
}
// Subscribe to topic if exist
if (topicARN) {
SNSSubscribeRequest *subscribeRequest = [[SNSSubscribeRequest alloc] initWithTopicArn:topicARN andProtocol:@"application" andEndpoint:endpointARN];
SNSSubscribeResponse *subscribeResponse = [snsClient subscribe:subscribeRequest];
if (subscribeResponse.error != nil) {
NSLog(@"Error: %@", subscribeResponse.error);
dispatch_async(dispatch_get_main_queue(), ^{
[[self universalAlertsWithTitle:@"Subscription Error" andMessage:subscribeResponse.error.userInfo.description] show];
});
return NO;
}
}
return YES;
Метод findTopicARNForTopic уже выполняет итерации по списку тем и сравнивает суффикс с названием темы. Я действительно не знаю, является ли это лучшей практикой.
Отписаться от темы
NSString *topicARN = [self findTopicARNFor:topic];
if (topicARN) {
SNSUnsubscribeRequest *unsubscribeRequest = [[SNSUnsubscribeRequest alloc] initWithSubscriptionArn:topicARN];
SNSUnsubscribeResponse *unsubscribeResponse = [snsClient unsubscribe:unsubscribeRequest];
if (unsubscribeResponse.error) {
NSLog(@"Error: %@", unsubscribeResponse.error);
}
}