Amazon Pinpointをモバイルアプリに導入して、とりあえずプッシュ通知が送れるようになるまで：AWS編

この記事は [iRidge Advent Calendar 2018](https://qiita.com/advent-calendar/2018/iridge) の20日目です。

## はじめに
Amazon Pinpointを導入してAndroidアプリへプッシュ配信を実装するまでを書いていきます。
今回はAWSのセットアップ方法を解説していきます。アプリの実装については[21日目の記事](https://qiita.com/ginyolith/items/62d6efd6e01d23b461e8)を参照してください。

## Pinpointとは
Pinpointはアプリユーザーに対してEメールやプッシュ通知を送信することができるサービスになります。
配信速度の設定や開封率の分析、A/Bテストなども可能です。
公式ドキュメントは以下になります。
https://aws.amazon.com/jp/pinpoint/features/?nc=nsb&pg=ln

## Pinpointのセットアップ
はじめにAWSマネジメントコンソールにログインして、Pinpointのコンソール画面を開きます。

プロジェクト名を決めて、 `Create a project` ボタンをクリックします。
Pinpointはまだ東京リージョンで利用できないので、バージニアリージョンで作成します。

![pinpoint1.png](https://qiita-image-store.s3.amazonaws.com/0/141134/9d55cddc-45d3-acaf-7d0d-9ba5e6423b59.png)

プロジェクトを作成すると、設定画面に遷移します。
今回はPush通知を送信することがゴールなので、 `Push notifications` を選択します。

![pinpoint2.png](https://qiita-image-store.s3.amazonaws.com/0/141134/187bde4a-9c44-f583-f3c6-c6a8ef04a8ec.png)

設定画面ではモバイルプッシュおよびWebプッシュを設定することができます。
`Endpoints` には各プラットフォームへの組み込み方法が記載されています。

![pinpoint3.png](https://qiita-image-store.s3.amazonaws.com/0/141134/da046f79-a9ed-41b0-b31f-44e7ab65c426.png)

Androidアプリへのプッシュ通知を実装するので、FirebaseのサーバーキーをPinpointに設定します。

![pinpoint4.png](https://qiita-image-store.s3.amazonaws.com/0/141134/331aa463-ed70-70f2-e0c6-63e562f92bcf.png)

設定が完了すると `Firebase Cloud Messaging` の項目が `Enabled` になります。

![pinpoint5.png](https://qiita-image-store.s3.amazonaws.com/0/141134/b413bbb7-a87b-d54f-bde3-7eb74a877d8b.png)

アプリはCognito identity poolに対して認証を行い、イベントの生成やエンドポイントの登録を行うので、Cognito identity poolを作成します。

![pinpoint6.png](https://qiita-image-store.s3.amazonaws.com/0/141134/dcb503ca-1b18-25e8-664c-c87f7fb59a39.png)

適当なIDプール名を設定します。今回の認証プロバイダーにはCoginito user poolを設定しました。

![pinpoint7.png](https://qiita-image-store.s3.amazonaws.com/0/141134/900b43d0-36b5-8ab2-9f12-ea5c00670ffa.png)

作成したらCognitoにIAMポリシーを設定します。設定するポリシーは以下になります。

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "mobiletargeting:PutEvents"
      ],
      "Resource": [
        "arn:aws:mobiletargeting:us-east-1:xxx:apps/xxx"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
          "mobiletargeting:UpdateEndpoint"
      ],
      "Resource": [
          "arn:aws:mobiletargeting:us-east-1:xxx:apps/xxx"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
          "mobileanalytics:PutEvents"
      ],
      "Resource": [
          "*"
      ]
    }
  ]
}
```

ポリシーを反映したらこれまでの設定を `awsconfiguration.json` にまとめてアプリに連携します。

awsconfiguration.json

```json
  		 {
  		     "Version": "1.0",
  		     "CredentialsProvider": {
  		         "CognitoIdentity": {
  		             "Default": {
  		                 "PoolId": "xxx",
  		                 "Region": "us-east-1"
  		             }
  		         }
  		     },
  		     "IdentityManager" : {
  		       "Default" : {

  		       }
  		     },
  		     "PinpointAnalytics": {
  		         "Default": {
  		           "AppId": "xxx",
  		           "Region": "us-east-1"
  		         }
  		       },
  		     "PinpointTargeting": {
  		       "Default": {
  		         "Region": "us-east-1"
  		       }
  		     }
  		 }
```


## まとめ
アプリにプッシュ通知を配信するためのAmazon Pinpointの設定を行いました。
今後はアナリティクスなどの機能も試してみたいです。

## 最後に
今回の作業はアイリッジのエンジニア制度の一つであるFryhigh Fridayを活用しました。
詳しくは[4日目の記事](https://qiita.com/jumpyoshim/items/1e2df958ed4021b61132)を参考にしてください。