【发布时间】:2021-03-31 11:50:44
【问题描述】:
我的应用程序在 Flutter 上,我正在使用离线持久性,因为我的用户最多可以停留 4 小时,然后才能再次连接互联网。我读过刷新令牌是长期存在的,理论上“永不过期”,但是在我的测试中,我注意到 IOS 和 Android 会话之间存在很大差异:
我正在做的测试如下:
- 我通过 Internet 连接打开应用程序并继续进行身份验证过程(Firebase Auth 后面)。
- 我使用应用程序,然后激活离线模式
- 我最小化应用程序
- 我激活了飞行模式,所以设备没有互联网连接(离线模式)
- 稍后我会检查应用程序是否仍在会话中,以便我可以继续在离线模式下输入数据。
我目前得到的结果是:
在 IOS 上:
会话在离线模式下保持活动状态。我已经测试了 75 分钟、120 分钟,最后一次测试了 4 小时。我不能保证会话永远不会过期,但它似乎确实是持久的。
在 Android 上:
如果我在 25 分钟之前进入,会话将保持活动状态。
我可以在离线时保持会话处于活动状态,只要我每 25 分钟至少操作一次应用程序(我尝试了 5 个 25 分钟周期的序列)
如果已最小化并离线超过 30 分钟,它会再次要求我提供凭据(因为我处于离线状态,所以无法获取)
我的问题是:
1.操作系统为IOS或Android时,Firebase认证后离线会话时长有什么区别?
2。设备离线时 Firebase 身份验证会话持续多长时间是否有实际测量值?
3。有没有办法修改这个参数以获得更长的会话?我想要至少 12 小时,否则它永远不会过期。
附件:
测试设备:
IOS:Iphone X。IOS 版本 14.2
Android:三星 J2 Android 版本 8.1.0
颤振代码:
我使用提供程序对用户进行身份验证的方式如下:
class UsuarioProvider {
final FirebaseAuth _firebaseAuth;
DatabaseReference db = FirebaseDatabase.instance.reference();
UsuarioProvider({FirebaseAuth firebaseAuth})
: _firebaseAuth = firebaseAuth ?? FirebaseAuth.instance;
Future <Map<String, dynamic>> signIn(String email, String password) async {
try {
UserCredential result = await FirebaseAuth.instance.signInWithEmailAndPassword(email: email, password: password);
User user = result.user;
return {'ok' : true, 'localId': user.uid, 'email' : user.email};
} catch (e) {
print(e);
return {'ok': false, 'code': '${e.code}', 'mensaje': '${e.message}' };
}
}
我用来调用firebase的方式是:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
FirebaseDatabase database;
database = FirebaseDatabase.instance;
database.setPersistenceEnabled(true);
database.setPersistenceCacheSizeBytes(10000000);
runApp(MyApp());
}
【问题讨论】:
标签: android ios flutter firebase-authentication