我现在正在处理从Unity Editor到Firebase云消息和Firebase实时数据库的RestAPI调用。这是我用来创建一个分数相乘的令牌的代码。
private static readonly string[] _scores = new[]
{
"https://www.googleapis.com/auth/userinfo.email",
"https://www.googleapis.com/auth/firebase.database",
"https://www.googleapis.com/auth/firebase.messaging"
};
public string CreateToken(DateTimeOffset now, string[] scores)
{
var nowSeconds = now.ToUnixTimeSeconds();
var inOneHour = GetExpirationTime(now);
var scope = string.Join(",", scores);
var payload = new Dictionary<string, object>
{
{ "iss", _serviceAccountData.ClientEmail },
{ "scope", scope },
{ "aud", _serviceAccountData.TokenUri },
{ "iat", nowSeconds },
{ "exp", inOneHour }
};
return SignToken(payload);
}
但这不起作用,对https://fcm.googleapis.com/v1/projects/{0}/messages:send
的调用返回401 Unauthorized。如果我只传递https://www.googleapis.com/auth/firebase.messaging
作为作用域,那么一切都会起作用。但我仍然需要调用firebase实时数据库。是否可以使用相同的承载令牌来调用两个API,或者我需要有两个不同的令牌来进行这种行为?
我有";firebase_admin_sdk.json";项目和Jose.JWT签署请求。
修复了从作用域中删除逗号以及为消息传递和实时数据库拆分令牌的问题。