今天更新到 Jetpack Compose a-08 并遇到问题。在以前的版本中我使用了权重修改器,但现在我找不到它。发生了什么或者有什么替代方案?在变更日志中我没有找到有关它的信息。
我正在使用 Firebase FCM 将通知从我的服务器发送给用户。
当用户第一次安装应用程序时,我在MessagingService.java中捕获了新鲜的令牌:
@Override
public void onNewToken(@NonNull String tkn) {
super.onNewToken(tkn);
sendTokenToServer(tkn);
}
Run Code Online (Sandbox Code Playgroud)
问题来了,当用户关闭会话(不卸载应用程序)时,SharedPreferences 被删除。新的会话开始;但onNewToken()没有被调用。因此,我必须手动检索MainActivity中的令牌才能将其发送到服务器。我正在使用这段代码获取更新的令牌:
FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(MainActivity.this, new OnSuccessListener<InstanceIdResult>() {
@Override
public void onSuccess(InstanceIdResult instanceIdResult) {
sendTokenToServer(instanceIdResult.getToken());
}
});
Run Code Online (Sandbox Code Playgroud)
如您所知,该代码已被弃用,应该避免使用。相反,我尝试用这段代码替换它,但没有成功:
FirebaseInstallations.getInstance().getToken(true).addOnCompleteListener(new OnCompleteListener<InstallationTokenResult>() {
@Override
public void onComplete(@NonNull Task<InstallationTokenResult> task) {
if(task.isSuccessful()) {
String token = task.getResult().getToken();
}
}
});
Run Code Online (Sandbox Code Playgroud)
在 onNewToken() 中获得的令牌长度是 163。在已弃用的调用中获得的令牌长度是 163(完美,但已弃用)。在 FirebaseInstallations 中获取的令牌长度为 316。
我在服务器端的 firebase API 无法使用 316 长度的代码发送通知。有人知道我做错了什么吗?或者为什么我会得到那些不同长度的令牌?
更新:
服务器端Python,从数据库检索令牌并发送通知,如下所示。请注意,当 token len 为 163 时,此代码有效。
from pyfcm import …Run Code Online (Sandbox Code Playgroud)