Amazon SNS用Amazon AWS Ruby SDKを使用していますが、既に登録されているデバイスに問題があります。デバイスが再び登録されると、AWS::SNS::Errors::InvalidParameter Invalid parameter: Token Reason: Endpoint arn:aws:sns:us-east-1:**** already exists with the same Token, but different attributes.
のようなエラーが発生することがあります。エンドポイントがすでに存在しているかどうかを確認する方法、さらに重要なことは、特定のトークンのエンドポイントを取得する方法です。モバイルデバイスが既に登録されているかどうかを確認する方法
答えて
BvdBijlのアイデアを借りて、見つかった場合は既存のものを削除して追加する拡張メソッドを作成しました。
using System;
using System.Text.RegularExpressions;
using Amazon.SimpleNotificationService;
using Amazon.SimpleNotificationService.Model;
namespace Amazon.SimpleNotificationService
{
public static class AmazonSimpleNotificationServiceClientExtensions
{
private const string existingEndpointRegexString = "Reason: Endpoint (.+) already exists with the same Token";
private static Regex existingEndpointRegex = new Regex(existingEndpointRegexString);
public static CreatePlatformEndpointResponse CreatePlatformEndpointIdempotent(
this AmazonSimpleNotificationServiceClient client,
CreatePlatformEndpointRequest request)
{
try
{
var result = client.CreatePlatformEndpoint(request);
return result;
}
catch (AmazonSimpleNotificationServiceException e)
{
if (e.ErrorCode == "InvalidParameter")
{
var match = existingEndpointRegex.Match(e.Message);
if (match.Success) {
string arn = match.Groups[1].Value;
client.DeleteEndpoint(new DeleteEndpointRequest
{
EndpointArn = arn,
});
return client.CreatePlatformEndpoint(request);
}
}
throw;
}
}
}
}
これは文字通り私が見ることができる唯一の方法ですそれだけでなく。代わりに、あなただけ呼び出すことができます削除し、プラットフォームのエンドポイントを作成する – chadkouse
: SetEndpointAttributes を属性 '有効= true'に – Kamil
では、将来変更される可能性があり、エラーメッセージのうち、これを解析する必要が不思議な感じ。私たちに重複したエンドポイントを戻すだけではないというばかげたことがあります。 – user3344977
これはamazoneがこの問題を解決したようです。私はRoRのを使用して登録しようとGCMのコードを既存のときに、同じ問題を抱えているために使用しています 私は属性と同じ(空の)使用が
"AWS::SNS::Errors::InvalidParameter Invalid parameter: Token Reason: Endpoint arn:aws:sns:us-east-1:**** already exists with the same Token, but different attributes."
というエラーメッセージが表示されました。現在、既存のGCMコード(元の属性と同じ属性)を送信すると、エラーメッセージではなく、エンドポイントarnが取得されます。
ListEndpointsByPlatformApplicationは100個のエンドポイントしか返しません。さらに取得するにはnextTokenを使用する必要があります。ここに私の実装があります。
public void deleteEndpoint(string token, string PlatformApplicationArn)
{
ListEndpointsByPlatformApplicationRequest listRequest = new ListEndpointsByPlatformApplicationRequest();
listRequest.PlatformApplicationArn = PlatformApplicationArn;
Logger.Info("Deleting endpoint with token -> " + token);
var list = snsClient.ListEndpointsByPlatformApplication(listRequest);
do
{
foreach (var x in list.Endpoints.Where(x => x.Attributes["Token"] == token))
{
snsClient.DeleteEndpoint(new DeleteEndpointRequest() { EndpointArn = x.EndpointArn });
Logger.Info("Endpoint removed-> " + x.EndpointArn);
return;
}
listRequest.NextToken = list.NextToken;
list = snsClient.ListEndpointsByPlatformApplication(listRequest);
}
while (list.NextToken != null);
}
私は多くの終点が1ラフを意味すると考えると、このプロセスでは、合計エンドポイントでトークンをチェックするために何らかの遅延が発生します。処理なしでエンドポイントを直接削除する方法はありますか? –
- 1. DLLが既に登録されているか確認してください。
- 2. ユーザがすでに登録されているかどうかを確認
- 3. は、performSelector:withObject:afterDelay:が登録されているかどうかを確認する方法はありますか?
- 4. Zend Framework。 Front Controllerプラグインが登録されているかどうかを確認する方法は?
- 5. ログインフォームに既に登録されているユーザーがデータベースに存在するかどうかを確認するにはどうすればよいですか?
- 6. 再利用識別子が既にUITableViewに登録されているかどうかを確認するにはどうすればよいですか?
- 7. リモートチャネルが既に登録されているかどうかを判断する方法
- 8. PHPユーザーが既に登録されているか確認してください
- 9. プロセスがモバイルデバイス上で実行されているかどうかを確認する方法
- 10. 既に登録されているSharePointイベントレシーバーの登録
- 11. HealthKitが承認されているかどうかを確認する方法
- 12. クラスIDの確認方法は登録されていますか?
- 13. USERがデータベースに既に作成されているかどうかを確認する方法は?
- 14. AlarmManagerに既にアラームが設定されているかどうかを確認する方法は?
- 15. Twitter-bootstrap:ポップオーバーが既に表示されているかどうかを確認する方法は?
- 16. Expression Encoder 4が既にインストールされているかどうかを確認する方法は?
- 17. BLASとATLASが既にインストールされているかどうかを確認する方法
- 18. urlが既にブックマークされているかどうかを確認する方法
- 19. rubyスクリプトが既に実行されているかどうかを確認
- 20. Android搭載端末でステレオ録音がサポートされているかどうかを確認する方法
- 21. フォームがドッキングされているかどうかを確認する方法は?
- 22. アラームが設定されているかどうかを確認する方法
- 23. イベントが防止されているかどうかを確認する方法
- 24. glibcが使用されているかどうかを確認する方法
- 25. window.confirm()がサポートされているかどうかを確認する方法は?
- 26. ラジオボタンがチェックされているかどうかを確認する方法
- 27. バックボーンビューがレンダリングされているかどうかを確認する方法は?
- 28. カーソルスタイルがサポートされているかどうかを確認する方法
- 29. mithril.jsがロードされているかどうかを確認する方法は?
- 30. 左マウスボタンが押されているかどうかを確認する方法
node.jsにSNSと同じ問題があります。あなたはこれにいくつかの解決策を見つけましたか? –
.net libを使用していますが、再度登録しようとするとエラーが発生しません。 –
登録に関連する追加属性を保存し、後で別のセット属性の –