Служба уведомлений Apple для приложения для джейлбрейка

Я создаю приложение Jailbreak, которое устанавливается в / Приложения. Независимо от того, что я делаю, я не могу заставить Push Notifications работать.

У меня есть:

  • Создал необходимый идентификатор приложения в консоли Apple Developer,
  • Создал все необходимые сертификаты и положения,
  • При необходимости, при необходимости,
  • Подписал приложение с соответствующим сертификатом,
  • Добавлены материалы, найденные в файле .MobileProvision, к разрешениям,
  • Ударьте голову к стене.

Симптомы следующие. Я успешно регистрируюсь в APNS и получаю токен устройства. Маркер устройства успешно отправлен на мой сервер. Мой сервер успешно подключается к серверу APNS, успешно отправляет push-уведомление на сервер APNS без каких-либо претензий, и мое приложение никогда, никогда не получает сообщение Push. Он просто теряется. Не имеет значения, тестирую ли я с помощью взломанного устройства ios 7 или устройства с джейлбрейком ios 8. Насколько я могу судить, оба этих устройства успешно получают сообщения APNS для других приложений.

Я пробовал как настройки разработчика, так и производства.

Есть ли какой-то необходимый шаг для приложений для джейлбрейка, которые мне не хватает, что обычно делается для вас, когда приложение регулярно регистрируется? Являются ли системные приложения неспособными быть приложениями APNS (что кажется довольно странным)?

Вот какой код. Телефонная сторона (Swift):

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { if Global.OSVersion() < 800 { application.registerForRemoteNotificationTypes(UIRemoteNotificationType.Alert | UIRemoteNotificationType.Badge | UIRemoteNotificationType.Sound); } else { var types: UIUserNotificationType = UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound; var settings: UIUserNotificationSettings = UIUserNotificationSettings(forTypes: types, categories: nil); application.registerUserNotificationSettings(settings); } application.beginReceivingRemoteControlEvents(); } func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { let bytes: [Byte] = deviceToken.getBytes(); var token: String = ""; for byte: Byte in bytes { token += NSString(format: "%02.2hhx", byte); } // code to send token to server goes here... } func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { let command: String = userInfo["Command"] as String; // code to process command goes here... } 

Код сервера (C #):

  private bool SendIPhone() { isSent = false; PushBroker pushBroker = new PushBroker(); try { pushBroker.OnChannelCreated += pushBroker_OnChannelCreated; pushBroker.OnChannelException += pushBroker_OnChannelException; pushBroker.OnChannelDestroyed += pushBroker_OnChannelDestroyed; pushBroker.OnServiceException += pushBroker_OnServiceException; pushBroker.OnNotificationFailed += pushBroker_OnNotificationFailed; pushBroker.OnNotificationSent += pushBroker_OnNotificationSent; pushBroker.OnNotificationRequeue += pushBroker_OnNotificationRequeue; pushBroker.OnDeviceSubscriptionChanged += pushBroker_OnDeviceSubscriptionChanged; pushBroker.OnDeviceSubscriptionExpired += pushBroker_OnDeviceSubscriptionExpired; pushBroker.RegisterAppleService(new ApplePushChannelSettings(XXXConfig.APNSIsProduction, XXXStatic.APNSCertificate, XXXConfig.APNSPassword)); AppleNotification notification = new AppleNotification(); notification.DeviceToken = cloudToPhoneID; notification.Payload.Alert.Body = "This is a test"; notification.Payload.Sound = "Alarm.wav"; notification.Payload.Badge = 5; notification.Payload.CustomItems["content-available"] = new Object[] { "1" }; notification.Payload.CustomItems["Command"] = new Object[] { "TestCommand" }; pushBroker.QueueNotification(notification); } finally { pushBroker.StopAllServices(); // This will force us to wait until we have sent what's in the queue... } return isSent; } void pushBroker_OnNotificationSent(object sender, INotification notification) { isSent = true; } 

Там много кода, я не показываю, что все работает так, как должно быть. SendIPhone всегда возвращает true, и при вызове pushBroker_OnNotificationSent он может быть установлен только в true.

Entitlements:

 <dict> <key>application-identifier</key> <string>REMOVEDFORPRIVACY</string> <key>aps-environment</key> <string>development</string> <key>com.apple.developer.team-identifier</key> <string>REMOVEDFORPRIVACY</string> <key>get-task-allow</key> <true/> <key>keychain-access-groups</key> <array> <string>REMOVEDFORPRIVACY</string> </array> </dict> для <dict> <key>application-identifier</key> <string>REMOVEDFORPRIVACY</string> <key>aps-environment</key> <string>development</string> <key>com.apple.developer.team-identifier</key> <string>REMOVEDFORPRIVACY</string> <key>get-task-allow</key> <true/> <key>keychain-access-groups</key> <array> <string>REMOVEDFORPRIVACY</string> </array> </dict> 

Что мне не хватает или нет пути отсюда?

Я не тестирую его, но если я знаю, что Apple разрешает push-уведомления в корневой папке приложения iOS (просто посмотрите на приложение «tips»), значит, это проблема с сертификатом, поэтому, возможно, это поможет:

http://www.hackthatphone.com/3x/push.html

Это учебник для взломанных устройств iOS, у которых нет действительных сертификатов для push-уведомлений, но он также может помочь вам.

введите описание изображения здесь

Interesting Posts
Давайте будем гением компьютера.