AWS SDK for Androidを使ってDynamoDBを操作する

Android端末から直接AWSにアクセスできるAWS SDK for Androidを使ってみたのですがあまり情報がみつからなかったのでメモ。
なお今回は予めAWSの管理画面でDynamoDBのテーブルを作成しておき、そのテーブルにアクセスする手順を書きます。

まずSDKのjarファイルを自分のプロジェクトに取り入れます。
aws-android-sdk-***.jar
aws-android-sdk-***-debug.jar
aws-android-sdk-***-core.jar
など沢山のjarファイルがありますが

  1. 開発時にはaws-android-sdk-***-debug.jarを使用する(ログを沢山吐くので)
  2. 本番ではaws-android-sdk-***.jarを使用する
  3. もしS3など特定のサービスしか使わないのであればaws-android-sdk-***-core.jarとaws-android-sdk-***-s3.jarを使用する

と使い分けるらしいです。

DynamoDBClient作成
AWSCredentials credentials = new BasicAWSCredentials(ACCESS_KEY_ID, SECRET_KEY);
AmazonDynamoDBClient dynamoDBClient = new AmazonDynamoDBClient(credentials);

ACCESS_KEY_ID, SECRET_KEYにはAWS管理画面で取得した値を入れます。
※上記方式ではSECRET_KEYをアプリに埋め込むのでセキュリティ的によろしくないです。公開するアプリではTVMを使用しましょう(参照:http://www.atmarkit.co.jp/ait/articles/1202/03/news132.html

テーブルから値を取得
Map<String, AttributeValue> key = new HashMap<String, AttributeValue>();
key.put("hashtag", new AttributeValue().withS("aaa"));

GetItemRequest getItemRequest = new GetItemRequest().withTableName(TABLE_NAME).withKey(key).withAttributesToGet(Arrays.asList("hashtag", "used"));
GetItemResult result = dynamoDBClient.getItem(getItemRequest);

TABLE_NAMEにはDynamoDBで作成したテーブル名を入れてください。
上記は"TABLE_NAME"テーブルから"hashtag"項目が"aaa"というデータの"hashtag", "used"項目を取り出してます。

テーブルの値を更新
Map<String, AttributeValueUpdate> updateItems = new HashMap<String, AttributeValueUpdate>();
updateItems.put("used", new AttributeValueUpdate().withAction(AttributeAction.PUT).withValue(new AttributeValue().withN("1")));

UpdateItemRequest updateItemRequest = new UpdateItemRequest().withTableName(TABLE_NAME).withKey(key).withAttributeUpdates(updateItems);
dynamoDBClient.updateItem(updateItemRequest);

※keyは「テーブルから値を取得」で作成したもの使用してます
上記では"TABLE_NAME"テーブルの"hashtag"項目が"aaa"というデータの"use"項目の値を1に変更してます。

cocos2d-xでGoogle Analyticsを使う(iOS版)

現在開発しているアプリはcocos2d-xを使用しているのですがGoogle Analyticsに対応しようとしたところ、ちょっとつまずいたのでメモ。

基本的にはこちら(http://d.hatena.ne.jp/okahiro_p/20130111/1357903603)を参考にしたのですが
Google Analyticsのバージョンが上がりNativeCodeLauncher_objc.mにて

[[[GAI sharedInstance] defaultTracker] trackView:view];

のtrackViewが実装されてないと怒られちゃうのでこいつを

id<GAITracker> tracker = [[GAI sharedInstance] trackerWithTrackingId:@"UA-XXXXXXXX-X"];
[tracker set:kGAIScreenName value:@"Home Screen"];
    
[tracker send:[[GAIDictionaryBuilder createAppView]  build]];

と書き換えます。

で「kGAIScreenNameが定義されない!」と言われたらヘッダーファイルで

#import "GAIDictionaryBuilder.h"
#import "GAIFields.h"

こいつらをimportすればOK。

開発したアプリ紹介1

カウントアップメモ

http://a1.mzstatic.com/jp/r30/Purple4/v4/84/c3/4c/84c34cb7-c105-49cd-d742-dc21c318177a/screen568x568.jpeg

https://itunes.apple.com/jp/app/kauntoappumemo/id660038932?mt=8&ign-mpt=uo%3D4

 

自分が開発したアプリの中で一番良く使ってるアプリ。

自分の写真を背景に設定できる所が気に入ってたりします。

 

自動並び替え機能を付けたいんですがUI的に良い案がないので(ボタンはあまり追加したくない)どうしようかなーと思ってます。