Firebase的一些小坑

作者: 小草凡 | 来源:发表于2019-06-04 17:52 被阅读8次

    当你再也没有什么可以失去的时候,就是你开始得到的时候。

    @[toc]
    当前我们公司开发的应用用到了google的firebase。在使用中发现了一些坑,在此做一个记录

    1号坑----Firebase字段重命名

    日常开发server返回的字段名可能会修改,比如server_res字段改成serverRes。这种修改对客户端往往影响巨大,客户端为了将这种修改后的影响降低到最小,往往会使用SerializedName注解。比如下面的一段代码。

    @Data
    public class ServerRes {
        @SerializedName("big_icon")//server返回的字段是big_icon
        public String bigIcon;
    }
    

    我们使用了lombok注解避免重复的get/set方法,同时用SerializedName注解将server真正返回的big_icon字段重命名为bigIcon,这样带来的的好处是如果server在后续版本迭代中将big_icon重命名为big_ic,客户端只用修改成@SerializedName("big_ic")即可,其余的逻辑不用改动,保证了最小改动。

    在使用firebase的过程中,我也尝试遵循上述原则,但发现每次解析firebase的字段都返回空。多次失败后才发现是我用SerializedName注解导致的,查询文档后发现firebase提供跟@SerializedName类似的@PropertyName("xxx")注解方法,但如果要配合lombok的@Data注解还是不工作。
    具体原因在下面这个link里有说明:

    https://stackoverflow.com/questions/45306168/firebase-serialization-names

    如果要考虑到兼顾字段变更,那么可以如下修改:

    public class ServerRes {
        @PropertyName("big_icon")
        public String bigIcon;
    
        @PropertyName("big_icon")
        public String getBigIcon() {
            return bigIcon;
        }
    }
    

    2号坑----Firebase配置Map类型的数据结构

    Firebase也可以配置Map结构的数据,如下图:


    在这里插入图片描述

    我们想定一个key为1,value包含的big/small属性的对象。但最终出来的数据格式却如下图:


    在这里插入图片描述
    key为1直接不见了,反而多了一个null,Firebase将其按照数组来解析了,并不是我们想要的,这个问题折腾了我好久才找到原因。这个的解决办法是key不要定义成纯数字,比如我们定义key为“_1”:
    在这里插入图片描述

    就可以最终解析成了我们想要的


    在这里插入图片描述
    总体来讲firebase还是挺好用的,如果你的应用面向国外用户,推荐集成它。

    相关文章

      网友评论

        本文标题:Firebase的一些小坑

        本文链接:https://www.haomeiwen.com/subject/jdurxctx.html