Як я можу протестувати службу Apple Push Notification Service без iPhone?


78

Чи можна протестувати служби Apple Push Notification Services без програми iPhone? (Створення емулятора у вікнах?)

Якщо ні, як я можу це перевірити? Чи існує безкоштовний зразок програми, складений для цього?

Я створив постачальника серверів, але мені потрібно перевірити функціональність.


1
Настав час оновити найкращу відповідь. Бібліотека з моєї відповіді настільки корисна, дякую за це "acoomans"!
kaspartus

Поки ви можете перевірити корисне навантаження за допомогою симулятора. Симулятор має помилку, і, схоже, все ще не вшановує mutable-contentключ. Дивіться тут
Мед

Відповіді:


79

Ця відповідь застаріла . Починаючи з 2020 / Xcode 11.4, тепер можна тестувати push-повідомлення в симуляторі

Дивіться це повне пояснення у відповіді нижче

Вибачте, але вам потрібно буде знайти апаратне забезпечення, щоб перевірити цю функціональність.

Push-повідомлення не доступні в тренажері. Вони потребують профілю підготовки з iTunes Connect, тому їх потрібно встановити на пристрій. Це також означає, що вам, мабуть, доведеться прийняти програму розробника Apple iPhone і заплатити 99 доларів.

З іншого боку, завдяки оновленню iPhone OS 3.0 ви можете протестувати цю функціональність на будь-якому пристрої, включаючи iPhone першого покоління.


2
я зіткнувся з тією ж проблемою, ви не зрозуміли відповіді, говорячи про другу частину питання: 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.
JackLeo

Це посилання для підручника для підтримки Push-сповіщення в Simulator. medium.com/swlh/…
Хардік Вяс

Але я маю для вас хороші новини. Вийшла бета-версія Xcode 11.4, і найкраща частина цього випуску для мене полягає в тому, що ми нарешті можемо протестувати push-сповіщення в iOS Simulator! Нижче наведено зразок реалізації - medium.com/better-programming/…
Раджат Корная,

56

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

Щоб запустити це з іншого класу (наприклад, UIViewController):

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

TestNotification має мати той самий формат, що і справжнє сповіщення, а саме словник NSD, що містить об’єкти списку властивостей плюс 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 для роботи.


1
чи знайдено де-небудь зразок реалізації цього?
mirageservo

У мене його немає (моя реалізація тесту йде іншим шляхом, хоча насправді має робити те, що я запропонував вище). Класичний сценарій "роблю так, як я кажу, а не як я", я здогадуюсь.
Jamon Holmgren

1
Це приємна відповідь.
Kwnstantinos Nikoloutsos

30

Сьогодні ми можемо тестувати 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

17

Тестування push-сповіщень за допомогою Xcode 11.4 iOS Simulator

Станом на Xcode 11.4 , тепер можна імітувати повідомлення поштовху шляхом перетягування в .apnsфайл на тренажері IOS. У примітках до випуску Xcode 11.4 про нову функцію можна сказати наступне:

Симулятор підтримує моделювання віддалених push-сповіщень, включаючи сповіщення про отримання вмісту у фоновому режимі. У Simulator перетягніть файл APN на цільовий симулятор . Файл повинен бути файлом JSON із дійсним корисним навантаженням служби Apple Push Notification Service, включаючи клавішу "aps" . Він також повинен містити “Цільовий набір симулятора” із рядковим значенням, що відповідає ідентифікатору набору цільової програми.

simctlтакож підтримує надсилання змодельованих push-повідомлень. Якщо файл містить “Simulator Target Bundle”, ідентифікатор набору не потрібен, інакше ви повинні вказати його як аргумент (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"
    }
}

Перетягуючи це на цільовий симулятор, ви побачите сповіщення та встановите значок:

Сповіщення на симуляторі iOS

Тепер, щоб використовувати це для налагодження, вам потрібно лише змінити Simulator Target Bundleідентифікатор власного додатка та налаштувати корисне навантаження відповідно до ваших потреб налагодження!


Це ще не версія випуску
MeLine

1
Гаразд, але це не запускає didReceiveRemoteNotification? Я нічого не можу отримати від натискання на повідомлення.
Лукаш Кястко

Ви пробували використовувати didReceiveLocalNotification(лише для цілей моделювання)? Окрім цього: Вам, мабуть, слід просто використовувати методи, передбачені UserNotificationsфреймворком; Я думаю, це буде працювати ...
фредпі

ви знаєте спосіб імітувати це за допомогою push-сповіщення OneSignal?
axumnemonic

@ mnemonic23 Якщо ви хочете перевірити обробку вхідних сповіщень OneSignal за допомогою цього методу, вам доведеться з’ясувати, як виглядає корисне навантаження push-сповіщень OneSignal, і відтворити саме це корисне навантаження. Але я не можу придумати сценарій, коли це мало б сенс: якщо ви хочете перевірити обробку вашим додатком корисного навантаження, це не залежить від механізму доставки OneSignal; якщо ви хочете перевірити, чи працює механізм доставки OneSignal, це локальне знущання не допоможе вам.
фредпі

6

Симулятор не робить push-сповіщення.

А щоб здійснити натискання з сервера, потрібно мати пристрій (-и), на який потрібно натискати, а також свою програму на цьому пристрої.

Маркер містить ідентифікатор програми, а також ідентифікатор пристрою.


4

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>

напр .:

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

запустіть цю команду та імітуйте push-сповіщення в симуляторі


3

ви повинні використовувати

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];

3

Xcode 11.4 Beta починає підтримувати push-повідомлення в Simulator

Симулятор підтримує моделювання віддалених push-повідомлень, включаючи сповіщення про отримання вмісту у фоновому режимі. У Simulator перетягніть файл APN на цільовий симулятор. Файл повинен бути файлом JSON з дійсним корисним навантаженням служби Apple Push Notification Service, включаючи клавішу "aps". Він також повинен містити “Цільовий набір симулятора” із рядковим значенням, що відповідає ідентифікатору набору цільової програми.

simctl також підтримує надсилання змодельованих push-повідомлень. Якщо файл містить “Simulator Target Bundle”, ідентифікатор набору не потрібен, інакше ви повинні вказати його як аргумент (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


Дублікат більш чіткої та короткої відповіді, наданої тижнем раніше.
Марк

2

Окрім відповіді @ 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

1

Так, ви можете перевірити push-сповіщення на симуляторі, але ви повинні використовувати бібліотеку у своєму додатку з назвою SimulatorRemoteNotifications . За допомогою всього 4-5 кроків ви можете перевірити push-сповіщення на тренажері.

Вони також надають POD:

pod 'SimulatorRemoteNotifications', '~> 0.0.3'

поясніть більше!
Негар Моштагі,

2
@NegarMoshtaghi Будь ласка, відкрийте посилання, на яке я надав відповідь, у ньому є повний процес, як користуватися і як це працює та все.
Сагар Ширбхате,

Цій бібліотеці 5–6 років, вона все ще функціонує?
Марк Хан,

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.