简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网

我猜去全部机翻+个人修改补充+demo测试的形式,对expo进行一次大补血!欢迎加入expo兴趣学习交流群:597732981

【之前我写过一些列关于expo和rn入门配置的东i西,大家可以点击这里查看:从零学习rn开发

相关文章:

Expo大作战(一)--什么是expo,如何安装expo clinet和xde,xde如何使用

Expo大作战(二)--expo的生命周期,expo社区交流方式,expo学习必备资源,开发使用expo时关注的一些问题

Expo大作战(三)--针对已经开发过react native项目开发人员有针对性的介绍了expo,expo的局限性,开发时项目选型注意点等

Expo大作战(四)--快速用expo构建一个app,expo中的关键术语

Expo大作战(五)--expo中app.json 文件的配置信息

Expo大作战(六)--expo开发模式,expo中exp命令行工具,expo中如何查看日志log,expo中的调试方式

Expo大作战(七)--expo如何使用Genymotion模拟器

Expo大作战(八)--expo中的publish以及expo中的link,对link这块东西没有详细看,大家可以来和我交流

更多>>

接下来就开始撸码


使用Firebase

Firebase数据库是一款流行的NoSQL云数据库,它允许开发人员实时同步实时数据。通过多平台支持,在用户和客户端之间同步数据是非常无缝的,但如果您不关心实时更新,它也可以更普遍地用作通用持久性NoSQL数据支持。它具有非常灵活的规则语法,可以对数据访问进行微小的控制。

幸运的是,从3.1+版本开始的Firebase JavaScript SDK几乎全面支持React Native,因此将其添加到我们的expo应用程序中非常简单。本指南后面介绍的一点是,通常由Firebase SDK提供的用户登录组件不适用于React Native,因此我们必须解决它。

有关更多一般信息,请参阅firebase.google.com/docs/database,并且官方Firebase博客文章宣布React Native兼容性

注意:本指南仅涵盖Firebase实时数据库,并不包含Google Firebase规模较大的其他服务。 Firebase云存储目前不受支持,但我们正在努力将Blob实现上行到React Native,从而使其成为可能。有关为什么不支持其他Firebase服务的更多背景信息,请阅读Brent Vatne对Canny的回复

1. Firebase SDK设置

首先,我们需要设置Firebase帐户并创建一个新项目。 我们将使用Firebase提供的JavaScript SDK,将其纳入您的expo项目。

npm install --save firebase

Firebase控制台会为您提供一个API密钥以及您的项目初始化所需的其他标识符。firebase-web-start详细描述了每个字段在控制台中的含义以及在哪里可以找到它们。

  1. import * as firebase from 'firebase';
  2.  
  3. // Initialize Firebase
  4. const firebaseConfig = {
  5. apiKey: "<YOUR-API-KEY>",
  6. authDomain: "<YOUR-AUTH-DOMAIN>",
  7. databaseURL: "<YOUR-DATABASE-URL>",
  8. storageBucket: "<YOUR-STORAGE-BUCKET>"
  9. };
  10.  
  11. firebase.initializeApp(firebaseConfig);

临时绕过默认安全规则(Temporarily Bypass Default Security Rules)

默认情况下,Firebase数据库具有安全规则设置,以便所有访问您数据的设备都必须通过身份验证。 我们显然还没有设置任何身份验证,所以我们现在可以在我们设置应用程序的其余部分时禁用它。

进入Firebase的数据库控制台,在“规则”选项卡下,您应该看到已经为您提供的一组默认规则。 将规则更改为:

  1. {
  2. "rules": {
  3. ".read": true,
  4. ".write": true
  5. }
  6. }

请参阅示例Firebase规则以获取适用于您的数据的良好规则集,包括未经身份验证的规则。

注意重要的是要注意,这对于开发来说是暂时的,在发布应用程序之前应对这些规则进行彻底评估。

2.存储数据和接收更新

通过Firebase存储数据可能非常简单。 想象一下,我们正在创建一个高分存储在Firebase中供所有人查看的游戏。 我们可以在每个用户引用的数据中创建一个用户存储桶。 设置他们的高分将是直截了当的。

  1. function storeHighScore(userId, score) {
  2. firebase.database().ref('users/' + userId).set({
  3. highscore: score
  4. });
  5. }

现在让我们假设我们希望另一个客户端收听特定用户的高分的更新。 借助Firebase,我们可以针对特定的数据引用设置侦听器,并在每次更新数据时收到通知。 在下面的示例中,每次为给定用户更新高分时,它都会将其打印到控制台。

  1. setupHighscoreListener(userId) {
  2. firebase.database().ref('users/' + userId).on('value', (snapshot) => {
  3. const highscore = snapshot.val().highscore;
  4. console.log("New high score: " + highscore);
  5. });
  6. }

用户认证

这非常简单,而且Firebase JavaScript SDK提供的功能相当不错。但有一点需要注意。我们在开始时简化了验证规则。 Firebase SDK为开发人员提供了身份验证方法,因此他们不必重新实现通用登录系统,例如Google或Facebook登录。

这包括Firebase的Web,Android和iOS SDK版本中的UI元素,但是,这些UI组件不适用于React Native,因此不应调用。值得庆幸的是,由于我们自己提供用户身份验证,Firebase为我们提供了验证数据访问的方法。

登录方法

我们可以选择对我们的应用程序有意义的不同登录方法。登录方法选择与Firebase数据库访问权限正交,但是,我们需要让Firebase知道我们如何设置我们的登录系统,以便它可以正确分配与我们的用户帐户匹配的身份验证令牌以进行数据访问控制。你可以使用任何你想要的东西,推出你自己的定制登录系统,或者如果你的所有用户都可以不受限制的访问,甚至可以放弃它。

Facebook登入

许多开发人员选择的通用登录系统是用户已熟悉的简单Facebook登录。expo已经提供了一个伟大的Facebook登录组件,所以我们只需要插入即可。

有关如何设置这些信息,请参阅我们文档的Facebook部分。这与Google和其他人一样合适。

将登录提供商与Firebase绑定

一旦您将Facebook登录添加到您的expo用程序中,我们需要调整Firebase控制台进行检查。在登录方法选项卡中的控制台的身份验证部分下,启用Facebook作为登录提供程序。

  1. {
  2. "rules": {
  3. "users": {
  4. "$uid": {
  5. ".read": true,
  6. ".write": "$uid === auth.uid"
  7. }
  8. }
  9. }
  10. }

监听身份验证
我们现在准备将Facebook登录代码与我们的Firebase数据库实现连接起来。

  1. firebase.initializeApp(config);
  2.  
  3. // Listen for authentication state to change.
  4. firebase.auth().onAuthStateChanged((user) => {
  5. if (user != null) {
  6. console.log("We are authenticated now!");
  7. }
  8.  
  9. // Do other things
  10. });
  11.  
  12. async function loginWithFacebook() {
  13. const { type, token } = await Expo.Facebook.logInWithReadPermissionsAsync(
  14. '<APP_ID>',
  15. { permissions: ['public_profile'] }
  16. );
  17.  
  18. if (type === 'success') {
  19. // Build Firebase credential with the Facebook access token.
  20. const credential = firebase.auth.FacebookAuthProvider.credential(token);
  21.  
  22. // Sign in with credential from the Facebook user.
  23. firebase.auth().signInWithCredential(credential).catch((error) => {
  24. // Handle Errors here.
  25. });
  26. }
  27. }

Facebook登录方法与您在Facebook登录指南中看到的方法类似,但是,我们从成功登录中收到的令牌可以传递给Firebase SDK,以通过firebase.auth.FacebookAuthProvider.credential向我们提供Firebase凭据。 然后,我们可以通过firebase.auth()。signInWithCredential使用此凭据进行登录。

firebase.auth()。onAuthStateChanged事件允许我们在认证状态发生变化时设置监听器,因此在我们的情况下,当使用Facebook凭证成功登录Firebase时,我们会得到一个可以使用的用户对象 用于验证数据访问。

经过身份验证的数据更新

既然我们有一个用于我们认证用户的用户对象,我们可以调整我们以前的storeHighScore()方法来使用用户对象的uid作为我们的用户参考。 由于user.uid是由Firebase自动为经过身份验证的用户生成的,因此这是引用用户存储区的好方法。

  1. function storeHighScore(user, score) {
  2. if (user != null) {
  3. firebase.database().ref('users/' + user.uid).set({
  4. highscore: score
  5. });
  6. }
  7. }

下一张继续介绍,这一篇主要介绍了:expo结合firebase 一个nosql数据库(本章令我惊讶但又失望!), 欢迎大家关注我的微信公众号,这篇文章是否被大家认可,我的衡量标准就是公众号粉丝增长人数。欢迎大家转载,但必须保留本人博客链接!

Expo大作战(十六)--expo结合firebase 一个nosql数据库(本章令我惊讶但又失望!)的更多相关文章

  1. Expo大作战(十九)--expo打包后,发布分用程序到商店的注意事项

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  2. Expo大作战(十八)--expo如何发布成独立应用程序,打包成apk或者ipa,发布到对应应用商店

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  3. Expo大作战(十五)--expo中splash启动页的详细机制

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  4. Expo大作战(十四)--expo中消息推送的实现

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  5. Expo大作战(十二)--expo中的自定义样式Custom font,以及expo中的路由Route&Navigation

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  6. Expo大作战(十)--expo中的App Icon,expo中的Assets,expo中的ErrorHandling错误处理

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  7. Expo大作战(三十七)--expo sdk api之 GLView,GestureHandler,Font,Fingerprint,DeviceMotion,Brightness

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  8. Expo大作战(三十三)--expo sdk api之MapView(地图),MailComposer(磁力传感计),Lottie(动画)

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  9. Expo大作战(三十一)--expo sdk api之Payments(expo中的支付),翻译这篇文章傻逼了,完全不符合国内用户,我只负责翻译大家可以略过!

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

随机推荐

  1. (转)python3-staticmethod与classmethod

    原文:https://blog.csdn.net/youngbit007/article/details/68957848 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...

  2. Redis学习系列六ZSet(有序列表)及Redis数据结构的过期

    一.简介 ZSet可以说是Redis中最有趣的数据结构了,因为他兼具了Hash集合和Set的双重特性,也是用的最多的,保证了value值的唯一性的同时,,同时又保证了高性能,最主要的是还可以给每个Va ...

  3. Maven内置属性,pom属性

    内置属性(Maven预定义,用户可以直接使用) ${basedir}表示项目根目录,即包含pom.xml文件的目录; ${version}表示项目版本; ${project.basedir}同${ba ...

  4. JVM(一)JVM的概述与运行流程

    1.基本概念 JVM和普通虚拟机: 大家常用的两种虚拟机是VMWare和Visual Box,用来操作cpu指令. JVM是程序自己独立的运行环境,对堆栈.寄存器.字符码指令等操作. Java.JRu ...

  5. Javac中的nullcheck

    Javac会通过调用引用对象的getClass()来判空,主要有几处: (1)JCMethodInvocation()方法中,如下实例: class A{ class B{} } public cla ...

  6. Kafka中的zookeeper-shell.sh

    连接 zookeeper bin/zookeeper-shell. 常用命令 connect host:port get path [watch] ls path [watch] set path d ...

  7. 22-hadoop-hive搭建

    1, hive简介 hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行. 其优点是 ...

  8. Tomcat学习总结(15)—— Tomcat优化时的参数分析

    (1).maxHttpHeaderSize=”8192” 此选项用于配置:来自于客户端请求的Request和Response的HTTP header 的最大长度,以字节计算.如果不设置,该属性为409 ...

  9. 在Bootstrap框架中,form-control的效果

    在Bootstrap框架中,通过定制了一个类名`form-control`,也就是说,如果这几个元素使用了类名“form-control”,将会实现一些设计上的定制效果. 1.宽度变成了100% 2. ...

  10. 数据存储之偏好设置NSUserDefaults

    NSUserDefaults做数据存储也是比较常用,适合轻量级的本地数据存储,读取也很方便. 一.支持的数据类型如下图(NSString.NSArray.NSDictionary.NSData.NSI ...