Ошибка: нет действительных регистрационных идентификаторов iOS FCM - PullRequest
0 голосов
/ 24 апреля 2018

Итак, я работаю над push-уведомлениями и следовал этому учебнику , и я могу успешно отправлять push-уведомления из моего проекта Firebase на мой телефон. Теперь я пытаюсь реализовать отправку сообщений группам устройств, как показано в этом руководстве Google .

Теперь я получаю токен устройства, используя этот метод:

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)
{
    let   tokenString = deviceToken.reduce("", {$0 + String(format: "%02X",    $1)})
    print("deviceToken: \(tokenString)")
}

и я пытаюсь добавить его в группу устройств (на стороне сервера) следующим образом:

public static String addDeviceToGroup(String userKeyName, List<String> deviceToken, String notificationKey) throws IOException, JSONException {

    String result = "";
    URL url = new URL(API_URL_FCM_GROUP);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();

    conn.setUseCaches(false);
    conn.setDoInput(true);
    conn.setDoOutput(true);

    conn.setRequestMethod("POST");
    conn.setRequestProperty("Authorization", "key=" + AUTH_KEY_FCM);
    conn.setRequestProperty("Content-Type", "application/json");
    conn.setRequestProperty("project_id", SENDER_ID);

    JSONObject json = new JSONObject();
    json.put("registration_ids",deviceToken);
    json.put("operation","add");
    json.put("notification_key_name",userKeyName.trim());
    json.put("notification_key",notificationKey.trim());

    try {
        OutputStreamWriter wr = new OutputStreamWriter(
                conn.getOutputStream());
        wr.write(json.toString());
        wr.flush();

        int responseCode = conn.getResponseCode();
        System.out.print("RESPONSE CODE in addDeviceToGroup IS: " + responseCode  + "\n");
        BufferedReader br = null;
        if (responseCode == 200)
            br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        else
            br = new BufferedReader(new InputStreamReader(conn.getErrorStream()));

        String output;
        System.out.println("Output from Server .... \n");
        while ((output = br.readLine()) != null) {
            System.out.println(output);
        }
        result = SUCCESS;
    } catch (Exception e) {
        e.printStackTrace();
        result = FAILURE;
    }
    System.out.println("FCM Notification added device to group successfully RESULT IS " + result);

    return result;
}

Я продолжаю получать 400 в качестве кода ответа, и я получаю эту ошибку:

{"error":"no valid registration ids"}

Я также получаю ту же ошибку при попытке удалить из deviceGroup.

РЕДАКТИРОВАТЬ: Однако, когда я получаю токен с этим:

let secondToken = InstanceID.instanceID().token()!

токен успешно добавлен в группу устройств, и когда я отправляю пользователю msg на ключ уведомления, принадлежащий устройству, в моей консоли показывается, что он доставлен:

{"success":2,"failure":0}

но оно не появляется на моем устройстве.

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 10 мая 2018

Я не знаю, нужна ли вам еще помощь в этом, но чтобы избавиться от ошибки, вы должны поместить токен устройства в массив.

  let postparameters = ["operation": "create",
                          "notification_key_name": name,
                          "registration_ids": [devicetoken]] as [String : Any]
...