LoginSignup
2
2

More than 5 years have passed since last update.

AWS SDK for Android SamplesのAndroidPubSubを動かす

Last updated at Posted at 2018-11-25

モチベーション

AndroidアプリでIoTデバイスの操作をしたいと思い、
AWS SDK for Android SamplesのAndroidPubSubを動かしてみましたが、
READMEが英語版のページをもとに作成してあり、(個人的に)分かりづらかったので、
自分なりに日本語版ページでの操作方法をまとめ、備忘録として情報を残そうと思いました。
READMEの建付けにしたがって説明していきます。

前提条件

  • Android Studio(自分の場合はVer3.2.1)
  • Android API 10以上

各種設定

Android StudioにAndroidPubSubプロジェクトをインポートする

まずはプロジェクトのソースコードをダウンロードします。
Gitをインストールしていれば、下記のコマンドで任意のフォルダにダウンロードできます。

git clone https://github.com/awslabs/aws-sdk-android-samples.git

ダウンロードしたら、Android StudioでImport ProjectからAndroidPubSubのフォルダを選択して、インポートします。
import_androidpubsub_project.png

インポートするとGradleがビルドを始めますが、下記メッセージが出ると思うので
「Add Google Maven repository and sync project」をクリックして対処します。
gradle_build_failed_1.png
コンパイルするターゲットのAndroidSDKが見つからないと言われたら、
「Install missing platform(s) and sync project」をクリックしてインストールするか、
すでに別のバージョンがインストール済みなら、build.gradleに書いてある「compileSdkVersion」の数値を変更して、
もう一度ビルドします。
gradle_build_failed_2.png
gradle_build_failed_3.png
下記のようなメッセージが出たら、Updateしましょう。
gradle_build_failed_4.png
下記メッセージが出たら、build.gradleのdependenciesのcompileをimplementationに変更します。
buildToolsVersionを26.0.2から28.0.3に変更します(環境によって違うかも)。
gradle_build_failed_5.png
gradle_build_failed_6.png
下記メッセージが出たら、AndroidManifest.xmlに書いてある「uses-sdk」を削除します。
gradle_build_failed_7.png
gradle_build_failed_8.png
非推奨の書き方はまだ残っていると思いますが、自分の場合はここまででビルドエラーやワーニングはなくなりましたので先に進みます。

Cognitoの設定

AWS IoTにアクセスするためのCognito IDを作成します。
Amazon Cognito Consoleにアクセスして、「IDプールの管理」ボタンをクリックします。
IDプール名を入力します。任意の名前でOKです。
その後、「認証されていないIDに対してアクセスを有効にする」チェックボックスにチェックを入れます。
「プールの作成」ボタンをクリックします。
次の画面では、「詳細を表示」をクリックすると、2つのIAMロールの情報が現れます。
特に設定は必要ありませんので、そのまま「許可」ボタンを押します。
さらに次の画面では、下記のようなサンプルコードが生成されます。
このIDをメモしておきます(下記のap-northeast-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxの部分)。

// Amazon Cognito 認証情報プロバイダーを初期化します
CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
    getApplicationContext(),
    "ap-northeast-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", // ID プールの ID
    Regions.AP_NORTHEAST_1 // リージョン
);

Cognitoの設定は完了です。

IAMの設定

続いて、IAM Consoleにアクセスします。
IAMロールの一覧が表示されるので、先ほどのCognitoの設定で作成したIDプール名がついた、
認証されていないID用のロールをクリックします。
例えば、IDプール名が「TestAppName」なら「Cognito_TestAppNameUnauth_Role」をクリックします。
「インラインポリシーの追加」ボタンをクリックします。
「JSON」タブをクリックし、下記を入力します。
入力後、「Review policy」ボタンをクリックします。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:AttachPrincipalPolicy",
        "iot:CreateKeysAndCertificate"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

任意のポリシーの名前を入力して、「Create policy」ボタンをクリックします。
IAMの設定は完了です。

AWS IoTの設定

続いて、AWS IoT Consoleにアクセスします。
サイドパネルの「安全性」の中にある「ポリシー」をクリックします。
「作成」ボタンをクリックします。
次の画面で任意のポリシーの名前を入力します。このポリシー名をアプリ内に設定するので、メモしておきます。
「アドバンストモード」をクリックし、下記を入力します。
「作成」ボタンをクリックします。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iot:Connect",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "iot:Publish",
        "iot:Subscribe",
        "iot:Receive"
      ],
      "Resource": "*"
    }
  ]
}

続いて、サイドパネルの「設定」ボタンをクリックします。
アプリ内に設定するので、エンドポイントをメモしておきます。

AWS IoTの設定は完了です。

Androidアプリの設定

最後に、Androidアプリに通信に必要な項目を設定していきます。

CUSTOMER_SPECIFIC_ENDPOINTに、「AWS IoTの設定」でメモしておいたエンドポイントを設定します。

PubSubActivity.java
// AWS Iot CLI describe-endpoint call returns: XXXXXXXXXX.iot.<region>.amazonaws.com
private static final String CUSTOMER_SPECIFIC_ENDPOINT = "CHANGE_ME";

COGNITO_POOL_IDに、「Cognitoの設定」でメモしておいたプールIDを設定します。

PubSubActivity.java
// AWS IoT permissions.
private static final String COGNITO_POOL_ID = "CHANGE_ME";

AWS_IOT_POLICY_NAMEに、「AWS IoTの設定」でメモしておいたポリシー名を設定します。

PubSubActivity.java
// Name of the AWS IoT policy to attach to a newly created certificate
private static final String AWS_IOT_POLICY_NAME = "CHANGE_ME";

MY_REGIONに、リージョンを設定します。
エンドポイントがXXXXXXXXXX.iot.ap-northeast-1.amazonaws.comなら
「Regions.AP-NORTHEAST_1」を設定します。

PubSubActivity.java
// Region of AWS IoT
private static final Regions MY_REGION = Regions.US_EAST_1;

下記のKeyStoreファイルの名前やパスワード、証明書IDは任意でOKです。

PubSubActivity.java
// Filename of KeyStore file on the filesystem
private static final String KEYSTORE_NAME = "iot_keystore";
// Password for the private key in the KeyStore
private static final String KEYSTORE_PASSWORD = "password";
// Certificate and key aliases in the KeyStore
private static final String CERTIFICATE_ID = "default";

以上で設定はすべて完了です。

実機確認

証明書の設定が成功すると、「Connect」ボタンをクリックできるようになります。
「Connect」ボタンをクリックして、StatusがConnecting…→Connectedになることを確認します。
適当なトピック名を入力し、Subscribeしている状態にします。
さらに任意のメッセージをPublishし、Last Messageが更新されるのを確認します。
hello_pubsub.png

以上です。

2
2
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2