проблема с getExpoPushTokenAsync с ошибкой «Не удалось получить токен GCM для устройства»

#javascript #react-native #google-cloud-messaging #expo #react-native-fcm

#javascript #react-native #google-облако-обмен сообщениями #выставка #react-native-fcm

Вопрос:

Я много искал об этой ошибке, но я продолжаю получать «Не удалось получить токен GCM для устройства»

1- Я попытался запустить expo, а затем запустить проект 2- Я вошел в свою учетную запись expo и вижу свое имя в инструментах разработки expo, но без разницы 3- Я добавил FCM в свой проект и отправил сервисный ключ FCM на серверы expo 4- Я удалил папку с модулем узла и запустил установку npm 5- Я работаю на устройстве Android

Заранее благодарю вас

Packages.js :

   {
    "main": "node_modules/expo/AppEntry.js",
    "scripts": {
      "start": "expo start",
      "android": "expo start --android",
      "ios": "expo start --ios",
      "eject": "expo eject"
    },
    "dependencies": {
      "expo": "^32.0.0",
      "react": "16.5.0",
      "react-native": "https://github.com/expo/react-native/archive/sdk-32.0.0.tar.gz"
    },
    "devDependencies": {
      "babel-preset-expo": "^5.0.0"
    },
    "private": true
  }
  

App.js запрашивающий код токена :

     const { status: existingStatus } = await Permissions.getAsync(
      Permissions.NOTIFICATIONS
    );
    let finalStatus = existingStatus;

    // only ask if permissions have not already been determined, because
    // iOS won't necessarily prompt the user a second time.
    if (existingStatus !== 'granted') {
      // Android remote notification permissions are granted during the app
      // install, so this will only ask on iOS
      const { status } = await Permissions.askAsync(Permissions.NOTIFICATIONS);
      finalStatus = status;

    }

    // Stop here if the user did not grant permissions
    if (finalStatus !== 'granted') {
      return;
    }

    // Get the token that uniquely identifies this device
    let token = await Notifications.getExpoPushTokenAsync();
    console.log(token);
    this.setState({token })
  }
  

app.json:

 {
  "expo": {
    "name": "hamid",
    "slug": "expo_test3",
    "privacy": "public",
    "sdkVersion": "32.0.0",
    "platforms": [
      "ios",
      "android"
    ],
    "version": "1.0.0",
    "orientation": "portrait",
    "icon": "./assets/icon.png",
    "splash": {
      "image": "./assets/splash.png",
      "resizeMode": "contain",
      "backgroundColor": "#ffffff"
    },
    "updates": {
      "fallbackToCacheTimeout": 0
    },
    "android": {
    "googleServicesFile" :  "./google-services.json",
    "package": "com.yourcompany.hamidtestapp"
  },

    "assetBundlePatterns": [
      "**/*"
    ],
    "ios": {
      "supportsTablet": true
    }
  }
}


  

Комментарии:

1. Вы используете настоящий телефон Android?

2. @hongdevelop , да, я подключил свой телефон Android к ПК и, как правило, я не использую эмулятор.

3. Просто чтобы убедиться, загрузили ли вы свой ключ FCM через expo push:android:upload --api-key your-token-here , а также для ясности, это не извлеченный проект, правильно?

4. @hongdevelop , да, я загрузил свой ключ, а затем попытался получить токен своего устройства. Просто чтобы убедиться, вы видели мой App.js коды? В коде нет ничего плохого, верно?

Ответ №1:

можете ли вы попробовать этот код?

 export async function registerForPushNotificationsAsync(token) {

  const { status: existingStatus } = await Permissions.getAsync(
    Permissions.NOTIFICATIONS
  );
  let finalStatus = existingStatus;

  // Only ask if permissions have not already been determined, for iOS.
  if (existingStatus !== 'granted') {
    const { status } = await Permissions.askAsync(Permissions.NOTIFICATIONS);
    finalStatus = status;
  }

  // Stop here if the user did not grant permissions
  if (finalStatus !== 'granted') {
    return;
  }

  // Get the push token that uniquely identifies this device
  let expoToken = await Notifications.getExpoPushTokenAsync();

  return expoToken

}
  

Комментарии:

1. к сожалению, эфир не работает. Должен ли я сначала создать автономное приложение, а затем попробовать?

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