我正在尝试设置一个与 NodeJS REST API 通信的 Android 应用程序,该 API 与 Firebase 通信,但似乎 firebase 令牌对我不起作用。
我现在在本地运行一个本地 nodejs 服务器和一个 Android 模拟来测试它,它是这样的:
安卓方法:
@Override
public void onNewToken(String token) {
Log.i(TAG, "Refreshed token: " + token);
postRegistrationToken(token);
}
Run Code Online (Sandbox Code Playgroud)
这会正确生成并发送到 REST API。
日志显示:
Refreshed token: "MY_TOKEN_STRING"
Run Code Online (Sandbox Code Playgroud)
在 NodeJS 中:
app.post('/api/token/get', (req, res) => {
const token = req.body.registrationToken;
LOG.info(`Acquired token: ${token}`);
admin.auth().verifyIdToken(token)
.then((decodedToken) => {
LOG.info(`Successfully validated registrationToken ${token}`);
//stuff
})
.catch((err) => {
LOG.error(err)
});
});
Run Code Online (Sandbox Code Playgroud)
verifyIdToken 失败,但令牌与 Android 客户端中生成的令牌相同:
Acquired token: "MY_TOKEN_STRING"
Error: Decoding …Run Code Online (Sandbox Code Playgroud) android jwt firebase firebase-authentication firebase-cloud-messaging
有没有办法实现类似下面我的代码类似的东西,而不必避免重复自己,同时保持低处理?
List<String> alist = new ArrayList<>();
alist.add("hello");
alist.add("hello2");
if(verbose) {
alist.stream()
.peek(System.out::println)
.forEach(/*dostuff*/);
}
else {
alist.stream().forEach(/*dostuff*/);
}
Run Code Online (Sandbox Code Playgroud)
如上所示,我被迫通过在if或者其他情况下处理流来重复自己,如果流变得有点长,看起来有点难看.
还有另一种选择,在我看来看起来更干净,但应该是性能更差,因为它比较了列表中每个项目的详细布尔值.
List<String> alist = new ArrayList<>();
alist.add("helllo");
alist.add("hello2");
alist.stream()
.peek(this::printVerbose)
.forEach(/*dostuff*/);
}
private void printVerbose(String v) {
if(verbose) {
System.out.println(v);
}
Run Code Online (Sandbox Code Playgroud)
}