J'ai obtenu le message d'erreur "x.509 certificate signed by unknown authority" lorsque j'ai essayé d'envoyer des notifications au serveur Expo Push Notification.
Mon serveur écrit en Golang stocke les jetons expo push. Puis, il charge ces jetons et construit expo.PushMessage
et les pousser en utilisant PublishMultiple
fonction.
J'ai deux serveurs, un pour les tests et l'autre pour la production. Cela fonctionne bien sur le serveur de test. J'ai reçu une notification push sur mon téléphone de test. Donc, j'ai mis à jour mon serveur de production, puis le serveur de production produit x.509 certificate signed by unknown authority
message.
Tout d'abord, je soupçonne que mon jeton de poussée expo a été corrompu, mais le jeton de poussée fonctionne bien lorsque j'ai utilisé Outil de notifications push de l'Expo .
Je ne sais pas où chercher une solution. Quelqu'un peut-il m'aider ? Je vais revoir la question si vous voulez connaître le code ou les paramètres de mon serveur. Pour l'instant, je ne suis pas sûr de la partie du code ou des paramètres à fournir pour trouver une solution.
Les codes suivants sont à peu près le seul endroit où l'erreur peut se produire.
import (
expo "github.com/oliveroneill/exponent-server-sdk-golang/sdk"
"github.com/pkg/errors"
)
type Client struct {
PushClient *expo.PushClient
}
func NewClient() *Client {
client := expo.NewPushClient(nil)
return &Client{PushClient: client}
}
func (c *Client) PushNotifications(deviceKeys []string, title string, body string) (error, map[string]string) {
messages := make([]expo.PushMessage, 0)
for _, deviceKey := range deviceKeys {
pushToken, err := expo.NewExponentPushToken(deviceKey)
if err != nil {
continue
}
messages = append(messages, expo.PushMessage{
To: pushToken,
Body: body,
Data: nil,
Sound: "default",
Title: title,
Priority: expo.DefaultPriority,
ChannelID: "default",
})
}
// This is only place the error can occur
// PublishMultiple function is a part of the Expo SDK
responses, err := c.PushClient.PublishMultiple(messages)
if err != nil {
return errors.WithStack(err), nil
}
sentErrors := make(map[string]string)
for index, response := range responses {
err := response.ValidateResponse()
if err != nil && index >= len(deviceKeys) {
sentErrors[deviceKeys[index]] = err.Error()
}
}
return nil, sentErrors
}
Un fichier docker pour construire mon serveur de production :
FROM golang:1.13-alpine as builder
WORKDIR /usr/src/app
ARG app
COPY . .
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -mod vendor -a -ldflags '-s' -o main ./apps/$app
FROM scratch
COPY --from=builder /usr/src/app/main /app/main
WORKDIR /app
CMD ["./main"]