#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. Я не думаю, что это проблема в этой области. Если вы можете попробовать это, пожалуйста, свяжитесь со мной.