AWS SNSを使ってMobile Pushするときに必要な技です。
-
createPlatformEndpoint
は登録済みのToken
を渡すと発行済みのendpointArn
を返します。 - しかし、
endpointArn
に対してCustomUserData
がセットされてる場合、Token
とCustomUserData
が完全一致しない限りcreatePlatformEndpoint
が失敗(Aws\Sns\Exception\SnsException
)します。 -
endpointArn
に紐づくCustomUserData
を知るにはgetEndpointAttributes
を使いますがendpointArn
が必要です。 -
Token
からendpointArn
を知る方法はcreatePlatformEndpoint
しかありません。
そう、缶切りは缶詰の中にはいっているのです(´・ω・`)
公式ドキュメントによるとExceptionをキャプチャして解析する必要があるみたいなのでEndPointArnを取得するメモを残します。
try {
$platform = $client->createPlatformEndpoint([
'PlatformApplicationArn' => '*****',
'Token' => '*****',
]);
$endpointArn = $platform['EndpointArn'];
}catch(Aws\Sns\Exception\SnsException $e){
$message = $e->getMessage();
if( !preg_match('#^.+(<ErrorResponse\s.+?</ErrorResponse>)#s',$message,$match) ) throw $e;
$xml = new SimpleXMLElement($match[1]);
$message = $xml->Error->Message;
if( !preg_match('/Endpoint (arn:aws:sns[^ ]+)/',$message,$match) ) throw new Exception($message);
$endpointArn = $match[1];
}