React-native-onesignal: (v3.2.1) (iOS) pushToken null на реальном устройстве

Созданный на 14 мая 2018  ·  36Комментарии  ·  Источник: OneSignal/react-native-onesignal

Описание:
Не могу получить pushToken, ни один пользователь ios на панели управления, я пробую все, воссоздаю сертификаты, ключи, использую инструменты подготовки, пробую на разных реальных устройствах.

На андроиде все работает как шарм.

Среда

  1. Какую версию OneSignal React-Native SDK вы используете: latest 3.2.1
  2. Как вы добавили SDK в свой проект (например, npm) npm i --save react-native-onesignal
  3. [email protected]
  4. Xcode Version 9.3 (9E145)
  5. Node.js 8.4.0

мой package.json

package json rbtse 2018-05-14 11-59-05

Шаги по воспроизведению проблемы:

  1. Следите за всеми возможными вариантами во введении на сайте onesignal.com.
  2. Добавьте js-код из примера папки в это репо
  3. Тестирование на реальных устройствах (iphone x с ios 11, iphone 6s с ios 10)

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

Самый полезный комментарий

Всем привет @dooboolab @hhunaid @ 408dev @ el-lsan @ neo125874 @ Джарред-Самнер

Вышло новое обновление (3.2.3), которое должно исправить эту проблему. Пожалуйста, дайте мне знать, если вы снова столкнетесь с этой проблемой (или другими проблемами), и я буду рад изучить ее.

Все 36 Комментарий

Я обнаружил ту же проблему https://github.com/geektimecoil/react-native-onesignal/issues/502
Поэтому я пытаюсь перейти на https://github.com/geektimecoil/react-native-onesignal/tree/3.1.4 - выполните все шаги, и теперь все работает!

react native debugger - connected port 8081 2018-05-14 12-24-59

users rbtse onesignal 2018-05-14 12-27-59

Итак, последняя версия не работает

Привет, когда вы устанавливаете последнюю версию react-native-onesignal (3.2.2) и запускаете react-native link react-native-onesignal , можете ли вы открыть проект Xcode и убедиться, что RCTOneSignal правильно отображается как зависимость в вашем проекте, как это?

alt text

pushToken и userId являются нулевыми для меня на реальных устройствах (в режиме выпуска)
image

[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, правильно?

да
image
image

Я понизил рейтинг до 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 всегда равен нулю. Скриншот ниже вставлю.
screen shot 2018-05-16 at 3 55 07 am

мой 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 как вы видите на следующем снимке экрана:

image

Вот ответ OneSignal.getPermissionSubscriptionState для указанного имитатора:

image

Но в большинстве случаев инициализация не выполняется на симуляторах, и я не вижу этого в 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 в симуляторе или нет?).

Была ли эта страница полезной?
0 / 5 - 0 рейтинги