Ich entwickle eine iOS-Anwendung mit Simple Notification Service (SNS) von Amazon Web Services. An dieser Stelle registriert die App das Gerät zu einem Thema und kann Push-Benachrichtigungen erhalten, die im Thema veröffentlicht werden. Es ist möglich, ein Gerät für viele Themen zu abonnieren.Wie kann ich ein iOS-Gerät von einem amazon SNS-Thema abmelden?
Jetzt versuche ich ein Gerät von einem bestimmten Thema abzumelden, aber die SNSUnsubscribeRequest benötigt eine SubscriptionARN. Ich habe versucht, die EndpointARN von dem Gerät zu verwenden, aber es scheint, dass ich ein extra SubscriptionARN für die Kombination von EndpointARN und TopicARN verwenden muss. Wie bekomme ich diesen ARN?
In diesem Beitrag: How do you get the arn of a subscription? fragen sie nach der ganzen Liste der Abonnenten und vergleichen jedes EndpointARN mit dem EndpointARN des Geräts. Das kann nicht der richtige Weg sein, denke ich.
abonnieren Thema
// 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;
Die Methode findTopicARNForTopic bereits iteriert über die Liste der Themen und das Suffix mit dem Themennamen vergleichen. Ich weiß wirklich nicht, ob dies die beste Vorgehensweise ist.
abmelden Thema
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);
}
}
Jetzt bitte ich um die gesamte Abonnentenliste und vergleiche die EndpointARN mit der EndpointARN des Gerätes. Ich werde den Code nach dem Warten auf 8 Stunden posten ... –
Ich hatte das gleiche Problem und wiederholte durch die Abonnentenliste Art von es behoben. Mein Anliegen ist Sicherheit: Wie können wir sicher sein, dass nur das aktuelle Gerät abgemeldet wird? Ist es möglich, dass andere Geräte abgemeldet werden? – tharkay
Auch: eine Antwort mit Ihrer Lösung und der neue Code könnte für andere hilfreich sein. – tharkay