我有一个包含两个组件的应用程序:一个使用 FCM Go Adming SDK 发送推送通知的服务器;一个使用 FCM Web SDK 接收生成注册令牌和接收推送通知的 Web 客户端。
但是,当我尝试从服务器端发送消息时;尽管两个SDK都在同一个Firebase项目中注册,但它还是给了我以下错误:
http error status: 403; reason: sender id does not match regisration token; code: mismatched-credential
服务器组件详细信息
我将 Firebase 管理员 SDK 添加到我的服务器,并使用服务帐号凭据对其进行了初始化。用于启动的serviceAccountKey.json
如下所示:
{
"type": "service_account",
"project_id": "myproject",
"private_key_id": "<PRIVATE_KEY_ID>",
"private_key": "<PRIVATE_KEY>",
"client_email": "firebase-adminsdk-yg8ah@myproject.iam.gserviceaccount.com",
"client_id": "<CLIENT_ID>",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://accounts.google.com/o/oauth2/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-yg8ah%40myproject.iam.gserviceaccount.com"
}
用于发送通知的服务器端代码如下所示:
app, err := firebase.NewApp(context.Background(), nil, option.WithCredentialsFile("./resources/serviceAccountKey.json"))
if err != nil {
log.Fatalf("Failed to initialize the notifications server: %vn", err)
}
// Obtain a messaging.Client from the App.
ctx := context.Background()
client, err := app.Messaging(ctx)
// The message payload.
message := &messaging.Message{
Data: map[string]string{},
Notification: &messaging.Notification{Title: "Title", Body: "Body"},
Token: "<Registration_Token>",
}
// Send a message to the device corresponding to the provided registration token.
response, err := client.Send(ctx, message)
if err != nil {
log.Fatalf("Failed to send the push notification: %vn", err)
}
客户端组件详细信息
对于 Web 客户端,我在将messaging.usePublicVapidKey('<YOUR_PUBLIC_VAPID_KEY_HERE>');
行更改为 messaging.usePublicVapidKey('<MY_PUBLIC_VAPID_KEY_HERE>');
后,使用 FCM Web SDK 示例代码创建了Web Push certificates
VAPID 密钥对进行消息传递
此外,网络客户端应用托管在 Firebase 托管中。
您可能尚未为项目启用 FCM API。有关更多上下文,请参阅 https://github.com/firebase/firebase-admin-go/issues/116。该错误消息令人困惑,将在将来的版本中修复以提供更多详细信息。