2014-10-01 3 views
7

Mit AWS SDK für iOS v2.0.8AWS SNS Fehler ungültige Parameter: Token Grund: Endpoint xxx bereits mit dem gleichen Token existiert, aber verschiedene Attribute

Kurze Frage:

Wie [snsClient deleteEndpoint:request] ich, wenn ich kenne den Endpunkt dieses Endpunkts nicht? Ich habe das DeviceToken.

Detail:

Ich erhalte den Fehler Token Reason: Endpoint arn:aws:sns:...c6 already exists with the same Token, but different attributes, wenn ich einen Endpunkt für mein iPhone zu erstellen versuchen:

// Async call to create the platform endpoint 
[[[_awsSnsClient createPlatformEndpoint:request] continueWithSuccessBlock:^id(BFTask *task) { 
    // success 
    _awsPlatformEndpoint = task.result; // Save off the endpoint data 
    [self awsUsubscribeAllSubscriptions]; 
    return nil; 
}] continueWithBlock:^id(BFTask *task) { 
    if (task.error) { 
     // failed with error 
     ALog(@"Error: Code:%li localizedDesc:%@ Exception:%@", (long)task.error.code, task.error.localizedDescription, task.exception); 
     if(task.error.code == 7) { 
      // delete offending endpoint and create it again? 
     } 
    } 
    return nil; 
}]; 

Wenn ich den Endpunkt erstellen Ich habe nicht das attributes, ich richte customUserData basierend auf Kundendaten, die sich ändern können. In der SDK docs für customUserData heißt es: Beliebige Benutzerdaten, die dem Endpunkt zugeordnet werden. Amazon SNS verwendet diese Daten nicht. Die Daten müssen im UTF-8-Format und weniger als 2 KB sein.

Wenn ich den Endpunkt von der SNS-Konsole lösche, kann ich einen neuen Endpunkt erhalten. Wie lösche ich Endpoint, wenn ich den Endpunkt dieses Endpunkts nicht kenne? Ich kann das ARN in der AWS-Protokollierung aber nicht in dem BFTask * -Fehlerobjekt sehen.

Ich habe die Ruby-Lösung bei 19551067 gesehen, aber ich sehe keine Möglichkeit, die Nachricht zu lesen, das Ruby-Beispiel liest die Nachricht von der Ausnahme, task.exception == nil in meinem Fall. Ich erhielt von AWS ausführliche Protokollierung:

AWS Protokollierung verwenden:

2014-10-01 06:48:54.489 myApp[1665:1345740] AWSiOSSDKv2 [Verbose] AWSURLResponseSerialization.m line:244 | -[AWSXMLResponseSerializer responseObjectForResponse:originalRequest:currentRequest:data:error:] | Response body: [<ErrorResponse xmlns="http://sns.amazonaws.com/doc/2010-03-31/"> 
    <Error> 
    <Type>Sender</Type> 
    <Code>InvalidParameter</Code> 
    <Message>Invalid parameter: Token Reason: Endpoint arn:aws:sns:us-west-2:245211809793:endpoint/APNS_SANDBOX/myApp-Dev/7bxxx-xxxx-xxxx-xxxc6 already exists with the same Token, but different attributes.</Message> 
    </Error> 
    <RequestId>d874ac10-e6de-5a4d-805e-e0b6ee58e5b7</RequestId> 
</ErrorResponse> 
] 

Was kann ich bekommen von (BFTask * Aufgabe) .error:

2014-10-01 06:48:54.494 myApp[1665:1345740] __46-[AppDelegate_Shared awsStartWithDeviceToken:]_block_invoke1279 [Line 3558] Error: 
    Code:7 
    localizedDesc:The operation couldn’t be completed. (com.amazonaws.AWSSNSErrorDomain error 7.) 
    Exception:(null) 

** Update 2014.10.01 **

Meine Entwicklung iPad begann dies gerade nach Aktualisierung auf iOS 8.0.2. I tun fügen Sie die Versionsnummer in die customUserData - aber Amazon SNS verwendet dieses Feld nicht ... richtig?

** Update 2014.01.01 19.06 GMT-07: 00 **

hinzugefügt task.error.userInfo an den Fehlerblock. Ich werde die Nachricht analysieren und den Endpunkt löschen, wenn dies auftritt. Eine Option in AWSSNSCreatePlatformEndpointInput diesen Fehler zu überschreiben, den Endpunkt zu aktualisieren und den Endpunkt zurückzugeben wäre nett;)

danke!

Konsole hat jetzt:

2014-10-01 18:58:50.836 iFlightBag[1862:1493821] __46-[AppDelegate_Shared  awsStartWithDeviceToken:]_block_invoke1281 [Line 3559] Error: 
Code:7 
localDesc:The operation couldn’t be completed. (com.amazonaws.AWSSNSErrorDomain error 7.) 
Exception:(null) 
userInfo:{ 
    Code = InvalidParameter; 
    Message = "Invalid parameter: Token Reason: Endpoint arn:aws:sns:us-west-2:245211809793:endpoint/APNS_SANDBOX/LevelFlightMobile-Dev/7b70d2c4-846e-3afd-a1ba-eedaa00f7ac6 already exists with the same Token, but different attributes."; 
    Type = Sender; 
    "__text" =  (
     "\n ", 
     "\n ", 
     "\n ", 
     "\n " 
    ); 
} 
+0

Gibt es ein Update dazu? Das Parsen des Fehlers scheint eine instabile Lösung zu sein, da Amazon die Fehlermeldung nach Belieben ändern konnte. – Zigglzworth

+1

@Zigglzworth Nein, ich analysiere gerade den Endpunkt von der Nachricht. Bisher hat es 3 API-Updates überstanden;) Ich habe eine Anfrage zum Hinzufügen eines Flags "Endpunkt löschen, wenn vorhanden" im Anfrageobjekt gesendet. – Kent

+0

Ok. Ich habe das selbe gemacht (die Fehlermeldung geparst).Ich folge deinem Lead und sende eine Anfrage dazu :) – Zigglzworth

Antwort

1

Die userInfo Eigenschaft task.error sollte enthält ein Wörterbuch Darstellung des Fehlers XML.

Verwandte Themen