var storageRef = firebase.storage.ref("folderName/file.jpg");
var fileUpload = document.getElementById("fileUpload");
fileUpload.on(‘change’, function(evt) {
var firstFile = evt.target.file[0]; // get the first file uploaded
var uploadTask = storageRef.put(firstFile);
});
iOS
let storageRef = FIRStorage.reference().child("folderName/file.jpg");
let localFile: NSURL = // get a file;
// Upload the file to the path "folderName/file.jpg"
let uploadTask = storageRef.putFile(localFile, metadata: nil)
var storageRef = firebase.storage.ref("folderName/file.jpg");
var fileUpload = document.getElementById("fileUpload");
fileUpload.on(‘change’, function(evt) {
var firstFile = evt.target.file[0]; // get the first file uploaded
var uploadTask = storageRef.put(firstFile);
uploadTask.on(‘state_changed’, function progress(snapshot) {
console.log(snapshot.totalBytesTransferred); // progress of upload
});
});
iOS
let storageRef = FIRStorage.reference().child("folderName/file.jpg");
let localFile: NSURL = // get a file;
// Upload the file to the path "folderName/file.jpg"
let uploadTask = storageRef.putFile(localFile, metadata: nil)
let observer = uploadTask.observeStatus(.Progress) { snapshot in
print(snapshot.progress) // NSProgress object
}
var storageRef = firebase.storage.ref("folderName/file.jpg");
storageRef.getDownloadURL().then(function(url) {
console.log(url);
});
iOS
let storageRef = FIRStorage.reference().child("folderName/file.jpg");
storageRef.downloadURLWithCompletion { (URL, error) -> Void in
if (error != nil) {
// Handle any errors
} else {
// Get the download URL for 'images/stars.jpg'
}
}
Android
StorageReference storageRef = FirebaseStorage.getInstance().reference().child("folderName/file.jpg");
storageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener() {
@Override
public void onSuccess(Uri uri) {
// Got the download URL for 'users/me/profile.png'
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Handle any errors
}
});
// Only a user can upload their profile picture, but anyone can view it
service firebase.storage {
match /b//o {
match /users/{userId}/profilePicture.png {
allow read;
allow write: if request.auth.uid == userId;
}
}
}
臨場感のある 3D アニメーションの制作は難しく、コストもかかります。キーフレームを設定してスプライン補間を行う複雑なソフトウェアや、俳優の動きをライブでトラッキングするための高価なモーション キャプチャを必要とします。プロのアニメーターは、自然で表現力の高いシーケンスを作るためにかなりの労力を費やします。
できる限り広いマーケットにアプリやウェブ コンテンツを提供し、それらが問題なく利用されるように、すべての主要な OS のバージョンをカバーします。さらに、対象マーケットの仮想端末や実際の端末でテストするというベスト プラクティスにも従います。ネイティブ Android アプリには、必要となる最小限の SDK と、対象 SDK を適切に設定します。さらに、低価格の携帯端末は RAM のサイズが小さいことも意識します。そのため、アプリのメモリ使用量が適切になるよう調整し、バックグラウンドでの動作も最小限にとどめます。APK サイズの最小化についての詳しい情報は、こちらのMedium の投稿をご覧ください。ウェブでは、JavaScript の CPU 使用量を最適化し、ラスター画像によるレンダリングを控え、リソースのリクエストを最小限にとどめます。詳しい情報は、こちらをご覧ください。
バッテリー消費量の削減
一般的に、携帯端末の価格が安いと、バッテリーの寿命も短くなります。ユーザーはバッテリー消費レベルに敏感で、バッテリーの消費が激しいと、アプリがアンインストールされやすくなったり、サイトが閲覧されなくなったりします。ベンチマーク テストを行って他のページやアプリとバッテリー消費量を比較するか、Battery Historian などのツールを使って、長時間動き続けてバッテリーを消費するプロセスをなくします。
モバイル アプリケーションのテストを効率化するために、Google は Firebase Test Lab for Android を導入しました。これは、Google が自身の製品をテストする際に使用するツールと同じものを使ってテストを自動化できるプラットフォームです。これによって、いくつかの簡単なステップで Google の物理端末上でテストを起動し、できる限り高品質なアプリケーションを保証します。
あなたのテストを Google の端末で
通常、Android アプリケーションのテストを行う場合は、アプリとのインタラクションを記述した計測テストを書きます。既に Espresso、UI Automator 2.0、Robotium のいずれかでテストを記述している場合は、Firebase Test Lab にホストされた端末上ですぐにテストを実行できます。
テストを記録し、書く手間を削減
Android Studio 2.2(以降)では、新しい Espresso テスト レコーダー ツールを使って簡単に計測テストを作成することができます。アプリをレコーディング モードで起動するだけで、アプリを監視しているテスト レコーダーがインタラクションをすべて記憶し、それを再現する Espresso テストコードを生成してくれます。このようにして作成したテストは、Firebase Test Lab で実行できます。
テストを書かなくてもテストが可能
Firebase Test Lab は独自のテストを書かなくても利用できます。Robo テストと呼ばれる完全に自動化されたインテリジェントなテストが、アプリをクロールしてユーザー インターフェースのインタラクションをテストします。コードを 1 行も書かなくても、自動的にすべての範囲をテストしてくれるツールのメリットを活用できます。
端末を選択して大規模なテストを実施
テストを実行するたびに、さまざまな端末のメーカーやモデル、Android のバージョン、設定(仮想端末もベータ版として利用できるようになりました)を選択できます。その後、Firebase Test Lab は、選択した複数の端末上でテストを同時にできるだけ早く実行します。テストが完了すると、Firebase プロジェクトにテスト結果が保存されます。
開発初期段階から何度もテストを実施
テストは、Google Play にアプリをリリースする直前だけではなく、開発プロセス全体で行うと最も効果的です。テストプロセスをシンプルにするために、Android Studio や Firebase Console などの既存のツールから直接 Firebase Test Lab のテストを起動できます。コマンドライン インターフェースを使うと、継続的インテグレーション環境でテストを実行することもできます。さらに、Google Play デベロッパー コンソールのリリース前レポートを受信するようにオプトインすると、アルファ チャンネルやベータ チャンネルにアプリの新しいバージョンをリリースするたびに 5 分間の Robo テストを無料で利用できます。このテスト結果は、Play Store デベロッパー コンソールに表示されます。
Firebase Test Lab でテストを始めるのは簡単です。初めてのテストを実行するさまざまなシナリオが説明されているコードラボの手順をご覧ください。こちらから詳細なドキュメントをご覧いただくこともできます。不明点がある場合や、問題が発生した場合は、Firebase Google グループで質問できます。
Snapshot API では、アプリから簡単にユーザーの現在の状況についての情報をリクエストできます。たとえば、「ユーザーの現在いる場所と、現在の天候を教えてください」というようなリクエストが可能です。
Fence API では、ユーザーの状況が変化した際や、ある条件に該当した際にアプリを反応させることができます。たとえば、「ユーザーがヘッドフォンをさしたまま歩いているときは教えてください」というようなリクエストが可能です。Geofencing API と同じように、認識フェンスを登録することによって、アプリが実行されていない場合も含め、コールバックが送信されるようになります。
Awareness API は単一のシンプルなインターフェースであり、以前にはできなかった新しい方法で最適な処理が行われた状況シグナルを組み合わています。バッテリーを節約し、帯域幅を最低限に抑えるようにシステム リソースを管理しつつ、正確で実態に即した状況シグナルを提供します。
Google は、何社かのパートナーと密接に連携してきました。そのようなパートナーは、既に驚くような方法で状況認識をアプリに組み込んでいます。
オンライン住宅不動産サイトの Truliaは、Fence API を使って自由に見学できる家を提案しています。天気が良く、ユーザーが興味のある家のそばを歩いていると、Trulia は立ち寄ってみることをうながす通知を送信します。このようなカスタマイズした通知によって、ユーザーが都合の良いときに家を見学してくれる可能性が増加します。
また、SuperPlayer Music は Snapshot API と Fence API を使って、ユーザーのムードにぴったりの音楽を提案しています。ランニングを終えたり、ストレッチを始めたり、長時間のドライブに出かけたり、ジムに到着したようなとき、アプリはその状況を認識して、最適なプレイリストを提案します。
基本的なシグナルとすばらしいパートナーとともに Awareness API はスタートしたばかりです。Google Awareness API デベロッパー ドキュメントや Google I/O セッションを参考にして Awareness API を使い、あなたのアプリでもユーザーに最高の体験を提供しましょう。
「たった半日で認証を実装することができました。以前は、独自のソリューションの作成には何週間もかかり、プロバイダの API に変更が発生するたびにアップデートしなければなりませんでした」- Amine Laadhari, Fabulous CTO
Malang Studio が Firebase Authentication で商品化までの時間を月単位で短縮
Chu-Day(Android と iOS に対応)は、カップルが重要な日を忘れないようにするためのアプリケーションです。このアプリは、キャラクター中心のゲーム型ライフスタイル アプリケーションを開発している韓国企業 Malang Studio が作成しました。
一般的に、カウントダウンや記念日関係のアプリはユーザーのログインを要求しません。Malang Studio は、カップルをつないで特別な記念日をともにカウントダウンできるようにすることで、Chu-day を特別なアプリにして差別化を図りたいと考えました。しかしこれにはログイン機能が必要で、ユーザーの脱落を防ぐシームレスなログイン プロセスも必要でした。
Malang Studio は、Facebook や Google のログインを利用することで、 1 日で初回起動フローをアプリに組み込むことができました。サーバー側の開発やデータベースについて考える必要はなく、Firebase User Management Console を活用し、ログイン実装の開発やテスト、ユーザーの管理を行うこともできました。
「Firebase Authentication は最低限の設定しか必要としないので、短時間で簡単にソーシャル アカウントへのサインアップが実装できました。コンソールで提供されるユーザー管理機能もすばらしく、簡単に認証システムを実装できました」- Marc Yeongho Kim, Malang Studio CEO 兼 創立者
Google が Google Play デベロッパー向けにリリースしたアプリは、これで 2 つ目になります。Google Play Developer Console アプリを使うと、移動中であっても、アプリのパフォーマンス統計や財務データの確認、アプリのステータスや公開状況の変更の通知、ユーザー レビューの確認や返信ができるようになります。
Charles Tommo 氏は、マラリアを予防する方法を教えてくれる「Dr Malaria」というアプリを作成しました。
Google がデザインしたコースでは、アプリの構築に使えるスキルを身につけ、現実世界の問題解決につなげることができます。Android Studio(Android アプリ開発用の Google の公式ツール)を使ったアプリのユーザー インターフェースのデザインや、Java プログラミング言語を使ったユーザー インタラクションの実装を自分のペースで学べます。