Как отписаться от 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);
    }
}

Ответы на вопрос(2)

Ваш ответ на вопрос