使用 Flutter 将 Firebase 令牌转换为字符串



我有一个应用程序,它应该将Firebase Token从我的Flutter应用程序发送到 ASP.Net 应用程序服务器。应用服务器上的端点工作 - 从 Flutter 应用到应用服务器的请求不起作用。

它不起作用的原因是,当我尝试发送令牌时,令牌似乎尚未到达 - 它的类型为 Future。当令牌最终到达时,如何将它转换为字符串?

我尝试过在fcmStream.Listen函数中将令牌直接转换为字符串,我也尝试使用_firebaseMessaging.getToken将其转换为字符串。他们都不起作用

FirebaseMessaging _firebaseMessaging = new FirebaseMessaging();
@override
void initState() {
// TODO: implement initState
super.initState();
location.onLocationChanged().listen((value) {
if (this.mounted) {
setState(() {
currentLocation = value;
});
}
});
_firebaseMessaging.configure(
onMessage: (Map<String, dynamic> message) {
print('on message $message');
},
onResume: (Map<String, dynamic> message) {
print('on resume $message');
},
onLaunch: (Map<String, dynamic> message) {
print('on launch $message');
},
);
_firebaseMessaging.requestNotificationPermissions(
const IosNotificationSettings(sound: true, badge: true, alert: true));
String clientToken = _firebaseMessaging.getToken().then((token) {
print("Token Init: " + token.toString());
}
).toString();

BackendService.postToken(clientToken.toString(), "email@gmail.com");
@override
Stream<String> fcmStream = _firebaseMessaging.onTokenRefresh;
fcmStream.listen((token) {
/*print("Token On Refresh: " + token);
BackendService.postToken(token.toString(), "email@gmail.com");*/
}
);
fcmStream.toString();
class BackendService {
static Future<String> postToken(String token, String hostEmail) async {
final responseBody = (await http.get(
'realurlomitted/.../Meets/RegisterDevice?token=$token&hostEmail=$hostEmail')).body;
print(" Response: " + responseBody.toString());
return responseBody.toString();
}
}

每当 token.toString 打印时,它都会很好地打印令牌 - 我可以看到这一点。似乎每当它尝试使用 http 发布帖子时,令牌都没有来自任何 getToken 。

如果我可以通过等待它或其他东西将该 Futrure 转换为字符串,它将解决我的问题,以便 $token 参数是字符串形式的令牌。

更具体地说,我的请求 URL 应如下所示:

https://-----/Meets/RegisterDevice?token=c6V49umapn0:Jdsf90832094890s324&hostEmail=email@gmail.com

但它看起来像:

https://-----/Meets/RegisterDevice?token=instance of Future<Dynamic>&hostEmail=email@gmail.com

在颤振调试器中

正如你所说,等待未来将解决你的问题。您可以编写一个async函数并将代码放入其中的initState并使用await,或者您可以这样做:

_firebaseMessaging.getToken().then((token) {
final tokenStr = token.toString();
// do whatever you want with the token here
}
);

此样式现已可用

FirebaseAuth.instance.currentUser().then((user) {
if (user != null) {
user.getIdToken().then((token) {
Map<dynamic,dynamic> tokenMap = token.claims;
print(tokenMap['sub']);
});
}
});

所以这个完整的代码

@override
void initState() {

FirebaseAuth.instance.currentUser().then((user) {
if (user != null) {
user.getIdToken().then((token) {
Map<dynamic,dynamic> tokenMap = token.claims;
print(tokenMap['sub']);
});
}
});
super.initState();
}

相关内容

  • 没有找到相关文章

最新更新