我正在开发 C# Sharp 项目,我想为令牌已经过时或过期的设备创建一个新的 FCM 令牌。但条件是使用 FirebaseAdmin。
或者如何手动更新FCM Token的过期时间?
使用 nuget FirbaseAdmin 3.0.1 创建了一个示例项目。在这里,我检查了令牌是否有效,而无需触发设备上的通知。如果令牌无效,我想创建新令牌并在 FCM 上更新它们。
static void Main(string[] args)
{
var fba = FirebaseApp.Create(new AppOptions()
{
Credential = GoogleCredential.FromFile("key.json")
});
string[] tokens = new string[]
{
"eSPXl7bJFTM:APA91bF-kjpN31aNuUxdQh-_0QW5zHxnczq--1IIhvDLCQRfTmvmy7pxDWVA8lPrkx0Rd0PxsqS_Zf-VJgVxEW-TpbyBmOuwNgDBb8xF_MrePva2a1d1CDg3ZC3rWmyqbHXP34QE-Eyq",
"eHlZfQJ24UbUm2sj9w3SyW:APA91bGBy4zRN63U6nkMmyithmQsjZPZDpSPBHI72AB6CE3Pk7anvpQeDN42YUb1sbLMxD8v7DbmzP9xEbG6FyOQvzuJwMRlw8FZ3H7-yOrItVA835b-4FuT1vhRxkUcBltn_8jXnjl7",
"eurtRHNs5o8:APA91bF79IFE5NLReK1xnTWHLP2GTGT5JBRCljK78KpjhdbRUdea2pg2reC-cS1LWuDjWiFYm086EZedwzr-I4nVWWbosilqTN2G6QpcfFkey89ZGeZ3ijzPRk3P6lxd7Zn_BHI1_0_P"
};
var dryRun = true;
var response = SendNotification(tokens, dryRun).Result;
Console.WriteLine($"Sucessfully sent[{response.SuccessCount}] notification(s), failures [{response.FailureCount}]");
int index = 0;
foreach (var tokenReponse in response.Responses)
{
if (tokenReponse.IsSuccess)
{
Console.WriteLine($"Token at index {index} is valid");
}
else
{
Console.WriteLine($"Token at index {index} is not valid. Message: {tokenReponse.Exception.HttpResponse.ReasonPhrase}");
}
index++;
}
}
}
虽然您可以管理在服务器上发送哪些令牌,但会在客户端上检索令牌并发出生成请求。为了达到您想要的效果您应该让客户每月更新他们的令牌或者让他们在离开一段时间后重新连接时自动检索新的令牌。
来自该文档:
“当过时令牌达到 270 天不活动状态时,FCM 会将其视为过期令牌。令牌过期后,FCM 将其标记为无效并拒绝向其发送。但是,在极少数情况下,FCM 会为应用程序实例颁发新令牌设备再次连接并打开应用程序。”
假设您的应用程序配置为向服务器发送新颁发的令牌,则运行该应用程序的用户将获得新令牌,而未运行该应用程序的用户则不会。