Amazon SNSを利用してスマートフォンにプッシュ通知処理を実行したのに、プッシュ通知が配信されない件。

2016.08.06

先日頂いた案件で、Amazon SNSというAmazonが提供するプッシュ配信処理まわりを楽にするサービスを利用しました。

テスト段階や初期段階では想定どおり動作してましたが、運用段階になりプッシュ通知が配信されなくなりました。

当初の予想では、なんらかの理由で配信先のEndpoint(Endpoint=スマホ端末に相当する)が配信不可状態(enabledがfalse)になっているのかと疑っていたんですが。違いました。

原因はコレ

listEndpointsByPlatformApplication は100個しかEndpointを返却しない

//端末リストを取得

$model = $sns->listEndpointsByPlatformApplication(  array(‘PlatformApplicationArn’ => ARN_IOS  );

foreach ($model[‘Endpoints’] as $endpoint){

//配信処理

}

最初はこんな感じの処理を書いてました。

というか、ネットでググッて出てくるサンプルコードはこのような処理だったりするので罠だったりします。(いや、鵜呑みにする自分が悪い)

 

ですが、上記のようにlistEndpointsByPlatformApplicationは100個しか返却しません。

ですが、listEndpointsByPlatformApplicationの引き数に、次の100個のtokenを与えることで、次の100個のエンドポイントを取得できます

このように修正しました

 

$next = “”;

$model[‘NextToken’] = true;
while($model[‘NextToken’]){
  $model = $sns->listEndpointsByPlatformApplication(array(‘PlatformApplicationArn’ => ARN_IOS , ‘NextToken’ => $next));
  foreach ($model[‘Endpoints’] as $endpoint){

  //配信処理
  }

  $next = $model[‘NextToken’];
}

 

では

前の記事: cordova xcode でXCode: linker command failed with exit code 1 のとき

実機のテストで掲題のエラーが出る場合 Build settings > Enable Bitcode の欄を開いて(検索が便利) 「Yes」を「No」にする よろしく!...続きを読む