Я получил сообщение об ошибке «Сертификат x.509, подписанный неизвестным органом», когда я попытался отправить уведомления на Expo Pu sh Сервер уведомлений.
Мой сервер, написанный на Golang, хранит expo pu sh жетонов. Затем он загружает эти токены и строит expo.PushMessage
список и sh их, используя функцию PublishMultiple
.
У меня есть два сервера, один для тестирования, а другой для производства. Хорошо работает на тестовом сервере. Я получил уведомление о pu sh на моем тестовом телефоне. Итак, я обновил свой производственный сервер, затем производственный сервер выдает сообщение x.509 certificate signed by unknown authority
.
Во-первых, я подозреваю, что мой токен expo pu sh был поврежден, но токен pu sh работает хорошо, когда Я использовал Expo pu sh инструмент уведомлений .
Я не уверен, где искать решение. Может кто-нибудь помочь мне? Я исправлю вопрос, если вы хотите узнать о моем серверном коде или настройках. На данный момент я не уверен, какая часть кода или настроек должна быть предоставлена для поиска решения.
Следующие коды - единственное место, где может возникнуть ошибка.
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
}
Dockerfile для сборки моего рабочего сервера:
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"]