所以我让我的应用程序运行,并且通知工作正常。但过了一会儿它就停了。
我尝试通过Firebase控制台发送并返回成功,但应用程序未收到任何通知。该应用程序是在后台运行的,它工作得更早,在应用程序或服务器端都没有更改代码。
如果我重新安装了应用程序(获取新令牌),通知将恢复正常(按预期工作),但如果令牌过期,Firebase控制台是否应该返回错误(注册令牌错误或其他内容)?< / p>
自从我使用该应用程序以来只有几天,所以为什么令牌会过期(文档称令牌将在6个月后到期)? 而且我知道每次用户运行我的应用程序时实际强制执行令牌刷新都是一种糟糕的方法。
我做错了什么?因为如果我调试我的应用程序一切正常。得到令牌,收到通知。
是的,通过FCM控制台和服务器发送通知会产生相同的结果;成功,但没有通知。
onTokenRefresh代码看起来像这样:
namespace FCMClient
{
[Service]
[IntentFilter(new[] { "com.google.firebase.INSTANCE_ID_EVENT" })]
public class MyFirebaseIIDService : FirebaseInstanceIdService
{
const string TAG = "MyFirebaseIIDService";
public override void OnTokenRefresh()
{
var refreshedToken = FirebaseInstanceId.Instance.Token;
Log.Debug(TAG, "Refreshed token: " + refreshedToken);
SendRegistrationToServer(refreshedToken);
}
void SendRegistrationToServer(string token)
{
//a post request to my server
}
}
}
感谢您的任何见解。
答案 0 :(得分:0)
这总是发生在我身上,这是一种bug或其他东西,我每次必须清理和重建,这不会在发布时发生,你可以删除firebase实例并在每次运行应用程序时获取新令牌'r debugging。
你可以在你的oncreate上写这个
Task.Run(() => {
var instanceid = FirebaseInstanceId.Instance;
instanceid.DeleteInstanceId();
Log.Debug("TAG", "{0} {1}", instanceid.Token, instanceid.GetToken(this.GetString(Resource.String.gcm_defaultSenderId), Firebase.Messaging.FirebaseMessaging.InstanceIdScope)); });
答案 1 :(得分:0)
在Firebase控制台中添加调试指纹似乎可以解决问题。