Описание:
Не могу получить pushToken, ни один пользователь ios на панели управления, я пробую все, воссоздаю сертификаты, ключи, использую инструменты подготовки, пробую на разных реальных устройствах.
На андроиде все работает как шарм.
Среда
latest 3.2.1
npm i --save react-native-onesignal
Version 9.3 (9E145)
мой package.json
Шаги по воспроизведению проблемы:
js код
export default class App extends Component {
componentWillMount() {
OneSignal.setLogLevel(7, 0);
OneSignal.init('here my ONESIGNAL APP ID - I checked it twenty times', { kOSSettingsKeyAutoPrompt: true });
OneSignal.setSubscription(true);
OneSignal.enableSound(true);
OneSignal.enableVibrate(true);
OneSignal.inFocusDisplaying(2);
OneSignal.getPermissionSubscriptionState((response) => {
console.log('Received permission subscription state: ', response);
});
}
Получил ответ от getPermissionSubscriptionState
:
{
emailAddress:null
emailSubscribed:false
emailUserId:null
hasPrompted:true
notificationsEnabled:true
pushToken:null
subscriptionEnabled:false
userId:null
userSubscriptionEnabled:true
}
Конечно, на панели управления нет ни одного пользователя ios.
Дополнительно я вижу логи в xcode
Called init with app ID: (null)
2018-05-14 11:21:03.636571+0300 rbtse[15320:6135130] Called init with app ID: xxxxxx-ea78-4b29-8b91-xxxxxxxxx (I changed app id)
2018-05-14 11:21:03.636758+0300 rbtse[15320:6135130] DEBUG: Downloading iOS parameters for this application
2018-05-14 11:21:03.642023+0300 rbtse[15320:6135181] VERBOSE: getNotificationTypes:mSubscriptionStatus: -1
2018-05-14 11:21:03.643531+0300 rbtse[15320:6135130] VERBOSE: registerForPushNotifications Called:waitingForApnsResponse: 1
2018-05-14 11:21:03.690752+0300 rbtse[15320:6135130] VERBOSE: oneSignalApplicationWillResignActive
2018-05-14 11:21:03.986984+0300 rbtse[15320:6135181] VERBOSE: network response (OSRequestGetIosParams): {
fba = 1;
}
2018-05-14 11:21:05.778574+0300 rbtse[15320:6135130] VERBOSE: oneSignalApplicationDidBecomeActive
2018-05-14 11:21:05.778918+0300 rbtse[15320:6135130] VERBOSE: getNotificationTypes:mSubscriptionStatus: -1
2018-05-14 11:21:05.792324+0300 rbtse[15320:6135130] VERBOSE: updateNotificationTypes called: 15
2018-05-14 11:21:05.792388+0300 rbtse[15320:6135130] VERBOSE: startedRegister: 1
Я обнаружил ту же проблему https://github.com/geektimecoil/react-native-onesignal/issues/502
Поэтому я пытаюсь перейти на https://github.com/geektimecoil/react-native-onesignal/tree/3.1.4 - выполните все шаги, и теперь все работает!
Итак, последняя версия не работает
Привет, когда вы устанавливаете последнюю версию react-native-onesignal (3.2.2) и запускаете react-native link react-native-onesignal
, можете ли вы открыть проект Xcode и убедиться, что RCTOneSignal правильно отображается как зависимость в вашем проекте, как это?
pushToken
и userId
являются нулевыми для меня на реальных устройствах (в режиме выпуска)
[email protected]:
version "3.2.2"
resolved "https://registry.yarnpkg.com/react-native-onesignal/-/react-native-onesignal-3.2.2.tgz#d1ae1e95cc301b940120de29a29ae90f478c9a97"
dependencies:
invariant "^2.2.2"
(на этот раз его нет в моем подфайле)
@ Jarred-Sumner Попробуйте удалить приложение со своего устройства, а затем переустановите его. Предлагает ли оно принять разрешения для push-уведомлений?
Кроме того, чтобы проверить, вы включили возможность push-уведомлений в Project Settings> Capabilities, правильно?
@ Jarred-Sumner Попробуйте удалить приложение со своего устройства, а затем переустановите его. Предлагает ли оно принять разрешения для push-уведомлений?
да
Кроме того, чтобы проверить, вы включили возможность push-уведомлений в Project Settings> Capabilities, правильно?
да
Я понизил рейтинг до v3.1.4
и теперь он отправляет pushToken
и userId
@ Jarred-Sumner Чтобы лучше понять эту проблему, идентификаторы равны нулю, но действительно ли работают push-уведомления? Они не должны, но я хотел дважды проверить.
Кроме того, вы можете попробовать обновиться до 3.2.2, инициализировать с помощью JS и вызвать OneSignal.setLogLevel(6, 0)
перед вызовом init. Можете ли вы сказать мне, видите ли вы какие-либо ошибки, выводимые на консоль?
Проблема сохраняется на 3.2.2.
Установка уровня журнала распечатывает следующие выходные данные
Вызывается init с идентификатором приложения: (null)
(Потом где-то внизу в логах)
Вызывается init с идентификатором приложения: (my-app-id)
Но userId по-прежнему равен нулю. Я включил библиотеку с использованием CocoaPods, если это помогает
@hhunaid ожидается, что идентификатор приложения будет нулевым в первый раз (возможно, нам следует удалить этот первый оператор журнала, чтобы избежать путаницы).
Также ожидается, что идентификатор пользователя будет нулевым, пока пользователь не примет разрешение push на реальном устройстве iOS. Вы можете подтвердить, что это так? Если да, можете ли вы опубликовать ссылку как минимум на 15 секунд вывода журнала из Xcode с этим уровнем журнала (обязательно вызовите setLogLevel перед вызовом init)
@ Nightsd01 это не просто инструкция LOG. На самом деле существует вызов инициализатора OneSignal с нулевым appId. Я только что проверил, что если я удалю эту строку инициализации в методе initOneSignal
все будет работать.
@hhunaid да, ожидается, что первый вызов инициализатора будет с нулевым идентификатором приложения, именно так работает наша оболочка SDK. Вы говорите, что если убрать этот первый вызов, «все заработает» ...?
Чтобы исключить другие изменения, которые вы могли внести, можете ли вы снова раскомментировать initOneSignal, чтобы убедиться, что он перестает работать ...?
Можете ли вы опубликовать свой package.json
чтобы я мог видеть, какие зависимости вы используете?
Я пробовал включать и выключать упомянутый фрагмент кода и без него, и теперь могу с уверенностью сказать, что это действительно виноват. По крайней мере, в моем приложении.
Его удаление дает мне действующий playerId, и мое устройство отображается на панели управления OneSignal. Чего раньше не было.
То же самое. PushToken всегда равен нулю. Скриншот ниже вставлю.
мой package.json выглядит как показано ниже.
"abortcontroller-polyfill": "^1.1.9",
"immutability-helper": "^2.7.0",
"mobx": "^4.2.1",
"mobx-react": "^5.1.2",
"moment": "^2.22.1",
"react": "^16.3.2",
"react-native": "^0.55.4",
"react-native-amplitude-analytics": "^0.1.15",
"react-native-animatable": "^1.2.4",
"react-native-audio-recorder-player": "^1.0.15",
"react-native-iap": "^1.0.1",
"react-native-image-picker": "^0.26.10",
"react-native-linear-gradient": "^2.4.0",
"react-native-loading-spinner-overlay": "^0.5.2",
"react-native-localization": "^1.0.7",
"react-native-marquee": "^0.3.1",
"react-native-modalbox": "^1.4.2",
"react-native-onesignal": "^3.2.2",
"react-native-permissions": "^1.1.1",
"react-native-pinch-zoom-view": "^0.1.6",
"react-native-sentry": "^0.36.0",
"react-native-status-bar-height": "^2.0.0",
"react-native-swiper": "^1.5.13",
"react-navigation": "^2.0.1",
"serializr": "^1.2.0"
@dooboolab Вы используете инициализацию JS, верно?
Можете ли вы сказать мне, в каком месте вашего проекта вы вызываете OneSignal.init()
?
На всю жизнь я _не могу_ воспроизвести эту проблему. Если бы кто-то мог воспроизвести эту проблему в демонстрационном проекте и опубликовать ее, мы бы смогли решить эту проблему намного быстрее.
@tavriaforever привет, значит, перейти на более раннюю версию и вызвать onesignal.init ('app id') можно?
такая же проблема здесь, любое решение?
"react": "16.3.1",
"react-native": "0.55.3",
"react-native-onesignal": "^3.2.0",
@ Nightsd01
Я вызываю в свой корень index.tsx
где он обертывает RootStackNavigator.
class App extends React.Component {
public componentDidMount() {
OneSignal.init('****');
OneSignal.addEventListener('received', this.onReceived);
OneSignal.addEventListener('opened', this.onOpened);
OneSignal.addEventListener('ids', this.onIds);
OneSignal.enableVibrate(true);
OneSignal.enableSound(true);
.....
public render() {
return (
<Provider
store={ appStore }
user={ userStore }
player={ playerStore }
>
<View style={styles.container}>
<RootStackNavigator />
</View>
</Provider>
);
По-прежнему страдает от получения нулевого токена.
@ Nightsd01 То же и здесь.
Удаление init с appId: nil в RCTOneSignal.m помогло
@ Nightsd01 Я только что пробовал на Android, и у Android
Думаю, инициализация JS-стороны была не такой уж и хорошей идеей.
Тем не менее, я понимаю, что веб-разработчикам или людям, не имеющим собственного опыта, проще использовать библиотеку.
@hhunaid звучит так, будто мне нужно
@dooboolab @ 408dev да, если вы столкнетесь с этой проблемой, я бы порекомендовал вам на время перейти на 3.1.4, пока мы не решим эту проблему. Извинения. Имейте в виду, что JS init не поддерживался в 3.1.4, поэтому вы захотите следовать руководству, чтобы добавить собственный код инициализации в свой проект.
@hhunaid, это действительно упрощает работу разработчикам,
В качестве обновления мы смогли воспроизвести эту проблему и определили причину. В ближайшее время мы выпустим обновление, чтобы решить эту проблему.
Всем привет - этот вопрос решен в новом PR (# 512). Мы ожидаем, что это будет объединено с выпуском нового обновления в ближайшие час или два. Спасибо за ваше терпение!
Всем привет @dooboolab @hhunaid @ 408dev @ el-lsan @ neo125874 @ Джарред-Самнер
Вышло новое обновление (3.2.3), которое должно исправить эту проблему. Пожалуйста, дайте мне знать, если вы снова столкнетесь с этой проблемой (или другими проблемами), и я буду рад изучить ее.
@ Nightsd01
я использую
"react": "16.3.1",
"react-native": "0.55.3",
"react-native-onesignal": "^3.2.3",
на реальном устройстве все работает нормально, но я все еще получаю null userId
случайным образом на simulators
и я не вижу, чтобы какое-либо устройство добавлялось в мой список игроков! (до сих пор я тестировал> 50 раз и только 2 раза работал!)
Я попытался очистить и перестроить приложение, а также rm -rf node_modules/ && yarn cache clean && yarn install && yarn start -- --reset-cache
но все равно не получил ожидаемого статуса от OneSignal.getPermissionSubscriptionState
{ userSubscriptionEnabled: true,
subscriptionEnabled: false,
pushToken: null,
emailAddress: null,
userId: null,
hasPrompted: true,
notificationsEnabled: true,
emailUserId: null,
emailSubscribed: false }
@ el-lsan, что ожидается. Это ограничение Apple, а не наше. Симуляторы iOS не могут получать push-уведомления. Они не получат токен APNS push и не будут зарегистрированы в OneSignal.
Если вы тестируете push-уведомления, вы должны делать это на реальном устройстве iOS, независимо от того, используете ли вы OneSignal или нет.
@ Nightsd01
Извините, мой последний пост был не так понятен. Я имел в виду не получение толчка на симуляторах, а включение в список симуляторов.
Итак, после OneSignal.init('ONESIGNAL_APP_ID');
я ожидаю, что устройство моделирования будет указано в списке моих подписанных пользователей с меткой Ios Simulator Unsupported
как вы видите на следующем снимке экрана:
Вот ответ OneSignal.getPermissionSubscriptionState для указанного имитатора:
Но в большинстве случаев инициализация не выполняется на симуляторах, и я не вижу этого в https://onesignal.com/apps/ONESIGNAL_APP_ID/players
@ el-lsan У меня такой же токен push-уведомления об ошибке равен нулю, вы нашли решение?
@adirzoari после обновления до "react-native-onesignal": "^3.2.3"
проблема была исправлена для реальных устройств, если вы имели в виду получение нулевого токена для симулятора, я считаю, что так и должно быть.
С другой стороны, я ожидаю, что userId
будет установлен для симуляторов, но по какой-то странной причине в большинстве случаев он не работает и возвращает null!
Я использую реальное устройство и получаю нулевой токен
@adirzoari Это странно! Попробуйте очистить кеш rm -rf node_modules/ && yarn cache clean && yarn install && yarn start -- --reset-cache
и дважды проверьте шаги
@ el-lsan pushToken имеет значение null, но в userId есть уникальная строка. в один сигнал я получаю
Ошибка библиотеки сервисов Google Play
У меня была такая же проблема с 3.2.7 (симуляторы - в порядке / реальные устройства - NOK), но очистка кеша, предложенная @ el-lsan, заставила его работать без проблем
@ Nightsd01 То же и здесь.
Удаление init с appId: nil в RCTOneSignal.m помогло
привет, не могли бы вы добавить изображение следующего изменения.
@adirzoari после обновления до
"react-native-onesignal": "^3.2.3"
проблема была исправлена для реальных устройств, если вы имели в виду получение нулевого токена для симулятора, я считаю, что так и должно быть.С другой стороны, я ожидаю, что
userId
будет установлен для симуляторов, но по какой-то странной причине в большинстве случаев он не работает и возвращает null!
привет, я получаю pushToken: null в симуляторе и получаю только userId для симулятора.
Могу ли я получить pushToken для реального устройства, пожалуйста, подтвердите (нужно ли мне беспокоиться о нулевой проблеме pushToken в симуляторе или нет?).
Самый полезный комментарий
Всем привет @dooboolab @hhunaid @ 408dev @ el-lsan @ neo125874 @ Джарред-Самнер
Вышло новое обновление (3.2.3), которое должно исправить эту проблему. Пожалуйста, дайте мне знать, если вы снова столкнетесь с этой проблемой (или другими проблемами), и я буду рад изучить ее.