今回紹介しているのは以下のものです、同じくキーをコピーすれば、すぐ動くものです。5分で試せるもの、是非!
概要
- ニフティクラウドmobile backendの『ファイルストア機能』を利用して、「撮った写真をクラウドに保存する」内容を実装したサンプルプロジェクトです
- 簡単な操作ですぐに ニフティクラウドmobile backendの機能を体験いただけます
ニフティクラウドmobile backendって何??
スマートフォンアプリのバックエンド機能(プッシュ通知・データストア・会員管理・ファイルストア・SNS連携・位置情報検索・スクリプト)が開発不要、しかも基本無料(注1)で使えるクラウドサービス!今回はデータストアを体験します
注1:詳しくはこちらをご覧ください
動作環境
- Windows 7 Professional
- Android Studio 1.5
- Android ver 4x,5x
- このサンプルアプリは、端末のカメラを使用するため、実機が必要です
※上記内容で動作確認をしています
手順
1. ニフティクラウドmobile backendの会員登録とログイン→アプリ作成
- 上記リンクから会員登録(無料)をします登録ができたらログインをすると下図のように「アプリの新規作成」画面が出るのでアプリを作成します
- アプリ作成されると下図のような画面になります
- この2種類のAPIキー(アプリケーションキーとクライアントキー)は先ほどインポートしたAndroidStudioで作成するAndroidアプリにニフティクラウドmobile backendの紐付けるため、あとで使います
- 動作確認後に写真(画像)が保存される場所も確認しておきましょう
2. GitHubからサンプルプロジェクトのダウンロード
- プロジェクトのGithubページから「Clone or download」>「Download ZIP」をクリックします
- プロジェクトを解凍します
3. AndroidStudioでアプリを起動
- AndroidStudioを開き、解凍したプロジェクトを選択します
- プロジェクトを開きます
4. APIキーの設定
-
MainActivity.java
を編集します - 先程ニフティクラウドmobile backendのダッシュボード上で確認したAPIキーを貼り付けます
- それぞれ
YOUR_APP_KEY
とYOUR_CLIENT_KEY
の部分を書き換えます- このとき、ダブルクォーテーション(
"
)を消さないように注意してください!
- このとき、ダブルクォーテーション(
5. 動作確認
- アプリが起動したら、①「CAMERA」ボタンをタップして、写真を撮影します
- 次に、②「保存」ボタンをタップして、保存します(今回はファイル名固定:
test.png
) - 保存された画像が起動画面に表示されます
- 保存に成功したら、ニフティクラウドmobile backendのダッシュボードから「ファイルストア」を確認してみましょう!
- 簡単に写真がクラウドに保存できました☆★
解説
サンプルプロジェクトに実装済みの内容のご紹介
SDKのインポートと初期設定
- ニフティクラウドmobile backend のドキュメント(クイックスタート)をご用意していますので、ご活用ください
ロジック
-
activity_main.xml
でデザインを作成し、MainActivity.java
にロジックを書いています - 写真をクラウドに保存する処理は以下のように記述されます
1)ファイルストアへのアップロード
- mBaaSのAndroid SDKが提供する、ファイルストア機能を利用する場合はNCMBFileを使用します
- ファイルストアへのアップロードするには、このクラスが提供するsaveInBackgroundメソッドを利用します
- saveInBackground()を実施することで、非同期に保存が行われます非同期実施するため、DoneCallBack()を使って、成功・失敗処理を指定します
- ファイル保存に成功した場合は、ファイルの取得を行います(今回保存したファイル名:
test.png
) - ファイル保存に失敗した場合、アラートで保存失敗を表示します
- ファイル保存に成功した場合は、ファイルの取得を行います(今回保存したファイル名:
- ファイル名を固定しているため、新しくファイル(画像)を保存すると上書きされます
2)アップロードしたファイルを取得
- ファイルストアに保存したものを取得するには、fetchメソッドを利用します
- fetchInBackgroundメソッドでの非同期処理も可能です(今回利用)
- ファイルの取得時には、ファイル名を先に取得する必要があります(今回保存したファイル名:
test.png
) - ファイル取得に成功した場合は、ファイル取得・表示します
- ファイル取得に失敗した場合、アラートで失敗を表示します
- ファイルの取得時には、ファイル名を先に取得する必要があります(今回保存したファイル名:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (data == null || data.getExtras() == null) {
return;
} else {
Bitmap bp = (Bitmap) data.getExtras().get("data");
//******* NCMB file upload *******
ByteArrayOutputStream byteArrayStream = new ByteArrayOutputStream();
bp.compress(Bitmap.CompressFormat.PNG, 0, byteArrayStream);
byte[] dataByte = byteArrayStream.toByteArray();
//ACL 読み込み:可 , 書き込み:可
NCMBAcl acl = new NCMBAcl();
acl.setPublicReadAccess(true);
acl.setPublicWriteAccess(true);
//通信実施
final NCMBFile file = new NCMBFile("test.png", dataByte, acl);
file.saveInBackground(new DoneCallback() {
@Override
public void done(NCMBException e) {
String result;
if (e != null) {
//保存失敗
new AlertDialog.Builder(MainActivity.this)
.setTitle("Notification from Nifty")
.setMessage("Error:" + e.getMessage())
.setPositiveButton("OK", null)
.show();
} else {
//******* NCMB file download *******
NCMBFile file = new NCMBFile("test.png");
file.fetchInBackground(new FetchFileCallback() {
@Override
public void done(byte[] dataFetch, NCMBException er) {
if (er != null) {
//失敗処理
new AlertDialog.Builder(MainActivity.this)
.setTitle("Notification from Nifty")
.setMessage("Error:" + er.getMessage())
.setPositiveButton("OK", null)
.show();
} else {
//成功処理
Bitmap bMap = BitmapFactory.decodeByteArray(dataFetch, 0, dataFetch.length);
iv.setImageBitmap(bMap);
}
}
});
}
}
});
}
}
参考
- ニフティクラウドmobile backend のドキュメント(ファイルストア(Android))をご用意していますので、ご活用ください