Firebase と React Native
2016年7月28日木曜日
[この記事は Jacob Wenger、ソフトウェア エンジニアによる Firebase Blog の記事 "Firebase and React Native" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]
継続的にフィードバックをお寄せいただいているおかげで、JavaScript SDK のバージョン 3.1.0 で Firebase の React Native サポートが強化されました。それだけではありません。このバージョンでは、Node.js SDK からの認証されていないアクセスも追加されているため、サービス アカウントなしにアプリを初期化できるようになっています。これにはどのような意味があるのでしょうか。詳しく見ていきましょう。
3.1.0 SDK のアップデートでは、React Native でほぼすべての JavaScript SDK の機能がスムーズに動作するようになっています。ただし、いくつかの注意点があります。
サービス アカウントがない場合、他の未認証クライアントと同様に Realtime Database へのアクセスは制限されます。
Posted by Yoshifumi Yamaguchi - Developer Relations Team
Jacob Wenger
ソフトウェア エンジニアReact Native のサポート
Google I/O で Firebase 3.x SDK がリリースされた際、SDK の認証部分は React Native と互換性がなくなっていました。リリース 3.1.0 では、ブラウザ固有の API を置き換えることによって、再び Firebase に React Native との互換性を持たせています。さらに、アプリの再起動をまたぐ認証状態の永続化など、React Native で Firebase を使用する際に問題となってきた点が修正されています。これによって、その他の JavaScript アプリと同様、Firebase プロジェクトを初期化するだけでよくなります。import ReactNative from "react-native"; import firebase from "firebase"; // Initialize Firebase const firebaseConfig = { apiKey: "<YOUR-API-KEY>", authDomain: "<YOUR-AUTH-DOMAIN>", databaseURL: "<YOUR-DATABASE-URL>", storageBucket: "<YOUR-STORAGE-BUCKET>" }; firebase.initializeApp(firebaseConfig);
3.1.0 SDK のアップデートでは、React Native でほぼすべての JavaScript SDK の機能がスムーズに動作するようになっています。ただし、いくつかの注意点があります。
-
signInWithPopup()
、signInWithRedirect()
、linkWithPopup()
、linkWithRedirect()
などの「ヘッドフル」な認証メソッドは、React Native では動作しません(この点は Cordova でも同様です)。ただし、signInWithCredential()
と任意のプロバイダからの OAuth トークンを利用することで、フェデレーションに対応したプロバイダにログインしたり、リンクすることができます。 - React Native は File や Blob タイプをサポートしていないので、この環境では Firebase Storage へのアップロードは動作しません。ファイルのダウンロードは問題なく動作します。
未認証アクセス
リリース 3.1.0 のもう 1 つの特徴は、Node.js SDK で未認証アクセスがサポートされていることです。以前は、Node.js SDK を利用するにはサービス アカウントが必須でした。そのため、Firebase Console でのサービス アカウント キーの作成、サーバーへのダウンロード、コードからファイルを参照して認証、という作業を行う必要がありました。トークンの作成や検証には依然としてサービス アカウントが必要ですが、Node.js のユースケースによっては、サービス アカウントを使わないで済むこともあります。最新の SDK では、この要件を緩和してデータベース URL だけでアプリを初期化できるようにしています。import firebase from "firebase"; firebase.initializeApp({ databaseURL: "<YOUR-DATABASE-URL>", });
サービス アカウントがない場合、他の未認証クライアントと同様に Realtime Database へのアクセスは制限されます。
フィードバックをお待ちしています
Slack のチームや Google Group、その他のサポート窓口より意見をお寄せいただき、ありがとうございました。新しい SDK で何か問題が発生した場合は、こちらからご連絡ください。React Native や Firebase に関して皆さまからのご意見をお待ちしています。Posted by Yoshifumi Yamaguchi - Developer Relations Team