Firebase通知未在Azure函数中发送

yqkkidmi  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(104)

我们正在开发一个系统,需要从Event Hubs队列中读取事件,使用Azure函数进行处理,并通过Firebase发送推送通知。
当我们在Azure之外的本地模式下调试这个系统时,它工作得很好,通知到达,当我们调用firebase服务时得到的响应是通常的,例如:
“projects/magonclabfb-57b13/messages/0:1695297973467228%67026b8f67026b8f”

string response = await FirebaseMessaging.DefaultInstance.SendAsync(message);

        return true;

我们的Azure函数服务不在任何Azure中,并且没有连接限制。

我怀疑这个问题来自于Azure内部与Firebase服务的连接问题,但我不知道如何解决它。
我们所做的另一个测试是,AppService中的相同代码可以完美地工作。
有人处理过这个问题吗?

xienkqul

xienkqul1#

我想我已经找到解决问题的办法了。
我们通过使用. NET的Firebase库创建连接对象来调用Firebase。有时,示例化为FirebaseApp的对象被初始化为null,我理解该对象一次只应该存在一个示例,函数的异步性质不能很好地处理这个问题。
我们选择通过对Firebase API进行REST调用来创建通知,并解决了问题

GoogleCredential gc = GoogleCredential.FromJson(googleJson);
string tok = await gc.CreateScoped("https://www.googleapis.com/auth/firebase.messaging https://www.googleapis.com/auth/cloud-platform").UnderlyingCredential.GetAccessTokenForRequestAsync();

HttpClient httpCli = new HttpClient() { BaseAddress = new Uri("https://fcm.googleapis.com/v1/projects/xxxxxx-57b13/messages:send"), };
httpCli.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tok);
var content = new StringContent(m, Encoding.UTF8, "application/json");

using HttpResponseMessage response = await httpCli.PostAsync("", content);

相关问题