(Ошибка = MissingRegistration) Я хочу отправить FCM pu sh с использованием libwebsockets - PullRequest
0 голосов
/ 13 апреля 2020

Я использовал переводчик Google. Извините.

Я пытаюсь отправить FCM pu sh на смартфон android, используя libwebsockets. Я видел и создал несколько примеров, но я получаю ответ «Error = MissingRegistration».

Тело отправлено, как показано ниже, (я попробовал Postmand, и это сработало.)

{
  "registration_ids": [
    "cxtrQat-PAw: APA .....- QN-Sz"
  ],
  "priority": "high",
  "data": {
    "detail": {
      "body": "push body",
      "title": "push title"
    }
  }
}

В функции обратного вызова libwebsockets я установил ее следующим образом.

static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len)
{
unsigned char buf[LWS_PRE + 4096];
unsigned char* start = &buf[LWS_PRE];
unsigned char* pos = start;
unsigned char* end = &buf[sizeof(buf) - LWS_PRE - 1];
switch (reason)
{
/* ...Skip... */
case LWS_CALLBACK_CLIENT_HTTP_WRITEABLE:
    case LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER:
        printf("** LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER\n");
        if (!lws_http_is_redirected_to_get(wsi))    // POST
        {
            printf("%s: doing POST flow\n", __func__);
            unsigned char** pos = (unsigned char**)in;
            unsigned char* end = (*pos) + len;
            if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE, (unsigned char *)"application/json", 16, pos, end))
            {   
                printf("lws_add_http_header_by_token : WSI_TOKEN_HTTP_CONTENT_TYPE\n");
                return -1;
            }
            printf("pss->nbody : %d\n", pss->nbody);
            if(lws_add_http_header_content_length(wsi, pss->nbody, pos, end))
            {
                printf("lws_add_http_header_content_length\n");
                return -1;
            }
            if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_AUTHORIZATION, (const unsigned char*)pss->auth, strlen(pss->auth), pos, end))
            {   
                printf("lws_add_http_header_by_token : WSI_TOKEN_HTTP_AUTHORIZATION\n");
                return -1;
            }
        } else  // GET
            printf("%s: doing GET flow\n", __func__);
        break;
    case LWS_CALLBACK_CLIENT_HTTP_WRITEABLE:
        printf("** LWS_CALLBACK_CLIENT_HTTP_WRITEABLE\n");
        strcpy(buf+LWS_PRE, pss->body);
        if(0 > lws_write(wsi, (unsigned char*)&buf[LWS_PRE], strlen(&buf[LWS_PRE]), LWS_WRITE_HTTP_FINAL))
        {
            printf("## Error Write body\n");
            return -1;
        }
        lws_client_http_body_pending(wsi, 0);

        return 0;

Вы видите, почему приходит ответ "Error = MissingRegistration"?

Могу ли я получить пример отправки fcm pu sh используя libwebsockets?

Спасибо.

...