2014-10-01 15 views
7

Sử dụng AWS SDK dành cho iOS v2.0.8AWS SNS Lỗi tham số không hợp lệ: Lý do Mã: Endpoint XXX đã tồn tại với Token tương tự, nhưng thuộc tính khác nhau

câu hỏi nhanh:

Làm thế nào để [snsClient deleteEndpoint:request], khi tôi không biết arn của thiết bị đầu cuối này? Tôi có deviceToken.

Chi tiết:

Tôi nhận được lỗi Token Reason: Endpoint arn:aws:sns:...c6 already exists with the same Token, but different attributes khi tôi cố gắng để tạo ra một thiết bị đầu cuối cho iPhone của tôi:

// 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; 
}]; 

Khi tôi tạo ra các thiết bị đầu cuối tôi không thiết lập các attributes, tôi thiết lập customUserData dựa trên dữ liệu khách hàng có thể thay đổi. Trong các SDK docs cho customUserData nó nói: Dữ liệu người dùng tùy ý để liên kết với điểm cuối. Amazon SNS không sử dụng dữ liệu này. Dữ liệu phải ở định dạng UTF-8 và nhỏ hơn 2KB.

Khi tôi xóa điểm cuối khỏi bảng điều khiển SNS, tôi có thể nhận điểm cuối mới. Vì vậy, làm thế nào để tôi xóaEndpoint, khi tôi không biết arn của thiết bị đầu cuối này? Tôi có thể thấy arn trong việc ghi nhật ký AWS, nhưng không phải trong đối tượng lỗi BFTask *.

Tôi đã xem giải pháp ruby ​​tại 19551067, nhưng tôi không thấy cách đọc thư, ví dụ ruby ​​đọc thông báo từ ngoại lệ, task.exception == nil trong trường hợp của tôi. Tôi nhận được từ AWS ghi chi tiết:

Sử dụng AWS logging:

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> 
] 

Những gì tôi có thể nhận được từ (BFTask nhiệm vụ *) .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) 

** Cập nhật 2014/10/01 **

iPad phát triển của tôi đã bắt đầu thực hiện việc này ngay sau khi cập nhật lên iOS 8.0.2. Tôi làm thêm số phiên bản vào customUserData - nhưng Amazon SNS không sử dụng trường này ... phải không?

** Cập nhật 2014/01/01 19:06 GMT-07: 00 **

Added task.error.userInfo vào khối lỗi. Tôi sẽ phân tích cú pháp tin nhắn và xóa điểm cuối khi điều này xuất hiện. Một tùy chọn trong AWSSNSCreatePlatformEndpointInput để ghi đè lỗi này, cập nhật điểm cuối và trả về điểm cuối sẽ là tốt đẹp;)

cảm ơn bạn!

Bảng điều khiển hiện có:

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

Có bản cập nhật nào về điều này không? Phân tích lỗi có vẻ như là một giải pháp không ổn định vì Amazon có thể thay đổi thông báo lỗi theo ý muốn. – Zigglzworth

+1

@Zigglzworth Không, tôi hiện đang phân tích cú pháp điểm cuối từ thư. Cho đến nay, nó đã sống sót sau 3 cập nhật API;) Tôi đã gửi yêu cầu thêm cờ "xóa điểm cuối nếu tồn tại" trong đối tượng yêu cầu. – Kent

+0

Ok. Tôi đã làm như vậy (phân tích cú pháp thông báo lỗi).Tôi sẽ theo dõi khách hàng tiềm năng của bạn và gửi yêu cầu liên quan đến điều này :) – Zigglzworth

Trả lời

1

Thuộc tính của task.erroruserInfo nên chứa một đại diện điển của XML lỗi.

Các vấn đề liên quan