所以,FirebaseInstanceIdService
发出一个警告,它是折旧和过时的。
OnTokenRefresh()
不再工作了,我们应该使用:
public void onNewToken(String s) {
Log.d("FCM_TOKEN", s);
// save in SharedPreference for future use
}
但是 - 为了在MainActivity中获取令牌,我之前使用过:
FirebaseInstanceId.Instance.Token
这也是不推荐使用的,我只能找到Java解决方案:
FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener( MyActivity.this, new OnSuccessListener<InstanceIdResult>() {
@Override
public void onSuccess(InstanceIdResult instanceIdResult) {
String token = instanceIdResult.getToken();
Log.d("FCM_TOKEN",token);
}
});
能告诉我如何在C#(Xamarin)中获取当前令牌?
问题2:这是C#中OnNewToken()
的正常实现:
public class MessagingService : FirebaseMessagingService
{
const string TAG = "MyFirebaseMsgService";
public override void OnNewToken(string token)
{
Log.Debug(TAG, "Refreshed token: " + token);
SendToServer(token);
}
}
谢谢你!
1)我也在为我的项目使用Firebase云消息传递。我认为FirebaseInstanceId.Instance.Token
不被弃用有两个原因。首先,我没有你所说的任何警告。其次,微软的FCM Notifications Walkthrough最近更新了,并没有提到该属性已被弃用。
2)FirebaseMessagingService
用于处理收到的通知(或消息),而不是处理令牌。例如,如果您的应用服务器正在向客户端(设备)发送消息(how to send a message),则FirebaseMessagingService
是您在客户端接收和处理消息的位置。此外,如果您右键单击FirebaseMessagingService类 - >“转到定义”,您会看到没有要覆盖的OnNewToken()
。
Q1和Q2汇集在一起,我猜你想要下面的东西来检索注册令牌并将其发送到你的应用服务器。
[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)
{
// send token to app server
}
}
上面的代码是从演练中提取的。我的解释简短而且不完整。您应该阅读演练以更好地理解。