Как я могу протестировать службу уведомлений Apple Push без iPhone?

Можно ли протестировать службы Apple Push Notification Services без приложения для iPhone? (Создание эмулятора на windows?)

Если нет, как я могу это проверить? Скомпилирован ли для этого бесплатный образец приложения?

Я создал поставщика сервера, но мне нужно проверить его работоспособность.


person Zanoni    schedule 03.07.2009    source источник
comment
Пришло время обновить лучший ответ. Библиотека из моего ответа очень полезна, спасибо acoomans за это!   -  person kaspartus    schedule 25.07.2013
comment
Пока можно тестировать полезные нагрузки с помощью симулятора. В симуляторе есть ошибка, и, похоже, она по-прежнему не учитывает клавишу mutable-content. См. здесь   -  person Honey    schedule 27.10.2020


Ответы (12)


Этот ответ устарел. Начиная с 2020 / Xcode 11.4 теперь можно тестировать push-уведомления в симуляторе.

См. Это полное объяснение в ответе ниже

К сожалению, вам нужно будет найти какое-то оборудование для тестирования этой функции.

Push-уведомления недоступны в симуляторе. Для них требуется профиль обеспечения из iTunes Connect, поэтому их необходимо установить на устройстве. Это также означает, что вам, вероятно, придется быть принятым в программу разработчиков Apple iPhone и заплатить свои 99 долларов.

С другой стороны, с обновлением iPhone OS 3.0 вы можете протестировать эту функциональность на любом устройстве, включая iPhone первого поколения.

person casademora    schedule 04.07.2009
comment
Я столкнулся с той же проблемой, ваш ответ неясен, говоря о второй части вопроса: If isn't, how could I test that? Is there a free sample application compiled to do that? I created the Server provider, but I need test the functionallity. - person JackLeo; 22.03.2011
comment
Это учебная ссылка для поддержки push-уведомлений в симуляторе. medium.com/swlh/ - person Hardik Vyas; 26.02.2020
comment
Но у меня для вас хорошие новости. Бета-версия Xcode 11.4 вышла, и самое лучшее в этом выпуске для меня - это то, что мы наконец можем протестировать push-уведомления в симуляторе iOS! Ниже приведен пример реализации - medium.com/better-programming/ - person Rajath Kornaya; 02.04.2020

Вы не можете протестировать настоящие push-уведомления. Однако вы можете протестировать ответ вашего приложения на имитированное push-уведомление, создав его программно и вручную запустив - application:application didReceiveRemoteNotification:notification метод вашего AppDelegate.

Чтобы вызвать это из другого класса (например, UIViewController):

[[[UIApplication sharedApplication] delegate]
                    application:[UIApplication sharedApplication]
   didReceiveRemoteNotification:testNotification];

TestNotification должен иметь тот же формат, что и реальное уведомление, а именно NSDictionary, который содержит объекты списка свойств плюс NSNull.

Вот пример того, как предоставить testNotification выше:

NSMutableDictionary *notification = [[NSMutableDictionary alloc] init];
[notification setValue:@"Test" forKey:@"alert"];
[notification setValue:@"default" forKey:@"sound"];

NSMutableDictionary *testNotification = [[NSMutableDictionary alloc] init];
[testNotification setValue:notification forKey:@"aps"];

Это должно создать разумное уведомление NSDictionary для работы.

person Jamon Holmgren    schedule 13.12.2012
comment
есть ли где-нибудь пример реализации этого? - person mirageservo; 29.01.2013
comment
У меня его нет (моя тестовая реализация идет другим путем, хотя на самом деле она должна делать то, что я предлагал выше). Классика делаю, как я говорю, а не как я, сценарий, я думаю. - person Jamon Holmgren; 29.01.2013
comment
Это хороший ответ. - person Kwnstantinos Nikoloutsos; 07.08.2019
comment
Доработка You can't test real push notifications. - на симуляторе вы все равно проиграете, если вызовете UIApplication.shared.registerForRemoteNotifications() - вы получите 2021-01-16T13:11:35-0700 error : didFailToRegisterForRemoteNotificationsWithError: Error Domain=NSCocoaErrorDomain Code=3010 "remote notifications are not supported in the simulator" UserInfo={NSLocalizedDescription=remote notifications are not supported in the simulator} - person Chris Prince; 16.01.2021

В настоящее время мы можем тестировать push-уведомления с помощью этой библиотеки.

Отправить push через терминал довольно просто:

echo -n '{"message":"message"}' | nc -4u -w1 localhost 9930

echo -n '{"aps":{"alert" : "message","badge" : 99,"sound" : "default"}, "myField" : 54758}' | nc -4u -w1 localhost 9930
person kaspartus    schedule 15.07.2013

Тестирование push-уведомлений с помощью симулятора iOS Xcode 11.4

Начиная с Xcode 11.4, теперь можно имитировать push-уведомления, перетаскивая файл .apns в симулятор iOS. В примечаниях к выпуску Xcode 11.4 говорится следующее о новой функции:

Симулятор поддерживает имитацию удаленных push-уведомлений, в том числе фоновых уведомлений о загрузке контента. В симуляторе перетащите файл APN на целевой симулятор. Это должен быть файл JSON с действующей полезной нагрузкой службы push-уведомлений Apple, включая ключ «aps». Он также должен содержать «Целевой пакет симулятора» верхнего уровня со строковым значением, совпадающим с идентификатором пакета целевого приложения.

simctl также поддерживает отправку имитированных push-уведомлений. Если файл содержит «Целевой пакет симулятора», идентификатор пакета не требуется, в противном случае вы должны указать его в качестве аргумента (8164566):

xcrun simctl push <device> com.example.my-app ExamplePush.apns

Пример

Вот пример такого .apns файла, предназначенного для приложения системных настроек:

{
    "Simulator Target Bundle": "com.apple.Preferences",
    "aps": {
        "alert": "This is a simulated notification!",
        "badge": 3,
        "sound": "default"
    }
}

Если перетащить его на целевой симулятор, вы увидите уведомление и установите значок:

«Уведомление

Теперь, чтобы использовать это для целей отладки, вам нужно только изменить Simulator Target Bundle на идентификатор вашего собственного приложения и настроить полезную нагрузку в соответствии с вашими потребностями отладки!

person fredpi    schedule 05.02.2020
comment
Это еще не окончательная версия - person MeLine; 17.02.2020
comment
Хорошо, но это не вызывает didReceiveRemoteNotification? Я ничего не могу получить, нажав на сообщение. - person Lukasz Ciastko; 21.05.2020
comment
Вы пробовали использовать didReceiveLocalNotification (только для моделирования)? Кроме того: вам, вероятно, следует просто использовать методы, предоставляемые фреймворком UserNotifications; Я думаю, это сработает ... - person fredpi; 24.05.2020
comment
знаете ли вы, как смоделировать это с помощью push-уведомления OneSignal? - person axumnemonic; 02.07.2020
comment
@ mnemonic23 Если вы хотите протестировать обработку входящих уведомлений OneSignal с помощью этого метода, вам нужно будет выяснить, как выглядит полезная нагрузка push-уведомления OneSignal, и воспроизвести эту полезную нагрузку. Но я не могу придумать сценарий, в котором это имело бы смысл: если вы хотите проверить, как ваше приложение обрабатывает полезную нагрузку, это не зависит от механизма доставки OneSignal; Если вы хотите проверить, работает ли механизм доставки OneSignal, этот локальный push mocking вам не поможет. - person fredpi; 02.07.2020

Apple поддерживает push-уведомления для симуляторов. iOS 13.4 и выше или Xcode 11.4 и выше.

как обычно, создайте проект Xcode и реализуйте уведомление пользователя и разрешение авторизации.

запустите приложение в симуляторе iOS 13.4 и выше.

поместите ваше приложение в фоновый режим.

  1. Создайте файл полезной нагрузки APNS с именем payload.apns.
{
  "aps": {
    "alert": {
      "title": "Test Push",
      "body": "Success! Push notification in simulator! ????",
      "sound": "default"
    },
    "badge": 10
  },
  "Simulator Target Bundle": "com.company.app"
}
  1. Перетащите в симулятор iOS.

прямо сейчас ваше push-уведомление появится на симуляторе.

А также вы можете имитировать push-уведомление с помощью терминала

получите идентификатор симулятора, открыв Окно- ›Устройства и симуляторы, выберите целевой симулятор, щелкните правой кнопкой мыши и скопируйте свой идентификатор.

Теперь создайте команду терминала, например

xcrun simctl push <simulator-identifier> <path-to-payload-file>

ex:

xcrun simctl push 27A23727-45A9-4C12-BE29-8C0E6D1E5360 payload.apns

запустите эту команду и смоделируйте push-уведомление в симуляторе

person Kathiresan Murugan    schedule 02.04.2020

Симулятор не отправляет push-уведомления.

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

Маркер содержит идентификатор приложения, а также идентификатор устройства.

person Community    schedule 17.08.2009

ты должен использовать

NSString *notificationString = @"{\"aps\":{\"alert\":\"Test alert\",\"sound\":\"default\"}}";

NSData *notificationData = [notificationString dataUsingEncoding:NSUTF8StringEncoding];

NSDictionary *testNotification = [NSJSONSerialization JSONObjectWithData:notificationData options:0 error:&error];

[[[UIApplication sharedApplication] delegate] application:[UIApplication sharedApplication] didReceiveRemoteNotification:testNotification  fetchCompletionHandler:nil];
person user2894794    schedule 01.07.2014

Xcode 11.4 Beta начинает поддерживать push-уведомления в симуляторе

Симулятор поддерживает имитацию удаленных push-уведомлений, в том числе фоновых уведомлений о загрузке контента. В симуляторе перетащите файл APN на целевой симулятор. Файл должен быть файлом JSON с действующей полезной нагрузкой службы push-уведомлений Apple, включая ключ «aps». Он также должен содержать «целевой пакет симулятора» верхнего уровня со строковым значением, совпадающим с идентификатором пакета целевого приложения.

simctl также поддерживает отправку имитированных push-уведомлений. Если файл содержит «Целевой пакет симулятора», идентификатор пакета не требуется, в противном случае вы должны указать его в качестве аргумента (8164566):

$ xcrun simctl push <device> com.example.my-app ExamplePush.apns

Примечания к выпуску: https://developer.apple.com/documentation/xcode_release_notes/xcode_11_4_beta_release_notes

person Mohammad Parvez    schedule 12.02.2020
comment
Дублируйте более четкий и краткий ответ, предоставленный неделей ранее. - person Mark; 26.02.2020

Помимо ответа @fredpi, вы также можете использовать инструмент командной строки Poes. Это позволяет нам быстро тестировать удаленные push-уведомления на симуляторе iOS без хлопот по созданию файла полезной нагрузки JSON.

Poes --help
OVERVIEW: A Swift command-line tool to easily send push notifications to the iOS simulator

USAGE: Poes <options>

OPTIONS:
  --body, -b            The body of the Push Notification
  --bundle-identifier   The bundle identifier to push to
  --mutable, -m         Adds the mutable-content key to the payload
  --title, -t           The title of the Push Notification
  --verbose             Show extra logging for debugging purposes
  --help                Display available options

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

$ Poes --bundle-identifier com.wetransfer.app --verbose
Generated payload:

{
  "aps" : {
    "alert" : {
      "title" : "Default title",
      "body" : "Default body"
    },
    "mutable-content" : false
  }
}

Sending push notification...
Push notification sent successfully
person Antoine    schedule 09.02.2020

Да, вы можете проверить push-уведомление на симуляторе, но вы должны использовать в своем приложении библиотеку с именем SimulatorRemoteNotifications. Таким образом, используя всего 4-5 шагов, вы можете протестировать push-уведомление на симуляторе.

Они также предоставляют POD:

pod 'SimulatorRemoteNotifications', '~> 0.0.3'
person Sagar Shirbhate    schedule 21.09.2018
comment
пожалуйста, объясните подробнее! - person Negar Moshtaghi; 16.10.2018
comment
@NegarMoshtaghi Пожалуйста, откройте ссылку, которую я предоставил с ответом, там есть полный процесс, как использовать и как он работает, и все. - person Sagar Shirbhate; 16.10.2018
comment
Этой библиотеке 5-6 лет, работает ли она? - person Mark Han; 04.04.2019

Похоже, теперь у нас есть очень мощная библиотека https://github.com/ctreffs/SwiftSimctl

По крайней мере, это намного больше возможностей, чем lib SimulatorRemoteNotifications, о которых говорилось здесь. И который тоже устарел.

person Maxim Kholyavkin    schedule 19.11.2020

Для более полного ответа с Xcode 11.4 и с Xcode 12.4:

  1. Симулятор поддерживает имитацию удаленных push-уведомлений, в том числе фоновых уведомлений о загрузке контента. В симуляторе перетащите файл APN на целевой симулятор. Файл должен быть файлом JSON с действующей полезной нагрузкой службы push-уведомлений Apple, включая ключ «aps». Он также должен содержать «целевой пакет симулятора» верхнего уровня со строковым значением, которое соответствует идентификатору пакета целевого приложения. simctl также поддерживает отправку имитированных push-уведомлений.

  2. Расширения службы уведомлений не работают в имитированных push-уведомлениях. Ключ изменяемого содержимого не соблюдается. (55822721)

Ссылка: Примечания к выпуску Xcode 11.4

person CodeBrew    schedule 24.02.2021