程序员Android开发经验谈Android技术知识

Android接入firebase遇到的坑及解决方案

2020-01-02  本文已影响0人  小鹿啊小鹿

➤ 1、登录firebase账号后,判断token是否失效不起作用,错误代码如下

 FirebaseAuth mainAuth = FirebaseAuth.getInstance(CommonApplication.getPolycentsApp());
 FirebaseUser  mUser = mainAuth.getCurrentUser();
 mUser.getIdToken(false).addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
     public void onComplete(@NonNull Task<GetTokenResult> task) {
        if (task.isSuccessful()) {
            String idToken = task.getResult().getToken();
            long expressionTime = task.getResult().getExpirationTimestamp();
               if (System.currentTimeMillis() > expressionTime * 1000){
                //token过期,退出到登录界面
                ToastUtils.showShort(SplashActivity.this,getResources().getString(R.string.token_has_out));
                                                signOut();
                }else{
               //token未过期
                }
            } else {
             // Handle error -> task.getException();
            //token验证异常
        }
                                        
     }
 });

☞ 1 的修改方法

红框中的代码应该为图2绿框中,firebase用户信息需要在获取token前重新加载

错误示范 正确示范

➤2、对firebase Cloud FireStore数据库一次增/删/查/改操作大于500条数据时,操作失败

firebase数据库使用Cloud fireStore时,大量数据库操作支持使用batch,但是batch操作有一个限制,一次batch上传的数据不可以超过500条,不然batch会直接回滚成0条数据,造成数据丢失;


image.png

☞ 2 的解决方案

遍历需要操作的数据,判断是否大于500条,分批上传


简单示例

➤3、对同一部分数据,先向firebase执行上传数据操作,后立刻执行下载该部分数据,导致一直获取不到返回结果(此时并不知道上一步的上传数据操作是否完成)。由于firebase对数据库的操作是异步线程的,所以当两个异步线程同时读写同一数据时,需等待上个线程释放完改数据之后才可以访问。

☞ 3 解决方案,建议所有读写操作判断每一步完成之后在进行下一步操作

✍︎更新中......

上一篇下一篇

猜你喜欢

热点阅读