AWS SDK for PHP v3でEndpointArnを取得するまでの道のり

  • 0
    いいね
  • 0
    コメント

    AWS SNSを使ってMobile Pushするときに必要な技です。

    • createPlatformEndpointは登録済みのTokenを渡すと発行済みのendpointArnを返します。
    • しかし、endpointArnに対してCustomUserDataがセットされてる場合、TokenCustomUserDataが完全一致しない限り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];
    }