Приложение Кордовы, которое не использует push-уведомления: «Отсутствие права на уведомление push-уведомления»

У нас есть приложение на базе iOS на базе Cordova, которое не использует push-уведомления. Начиная с Кордовы 3.5.0, каждое представление, которое мы сделали в магазине приложений, приводит к сообщению, в котором сообщается, что наше приложение включает в себя API, используемый для регистрации в службе уведомлений о Push Push от Apple, но не имеет права на уведомление push.

Приложение было принято каждый раз, поскольку мы на самом деле не используем push-уведомления для чего-либо. Однако я бы хотел избежать предупреждения об этом, если Apple решит изменить свою политику относительно приемлемости этих ссылок API.

Мы не испытывали проблемы с предыдущими версиями Кордовы и не работали в Objective-C самостоятельно. Это известная проблема с Cordova 3.5? Поиск привел к тому, что некоторые люди сталкивались с подобными проблемами, но я нашел решения для людей, желающих добавить права доступа (вместо того, чтобы определять, куда ссылается Push API, и удалять его). Я посмотрел на Кордову проблемы ML, но ничего там не нашел. Любые другие выводы, о которых люди знают, будут оценены!

Используемые плагины:
org.apache.cordova.console
org.apache.cordova.device
org.apache.cordova.file
org.apache.cordova.inappbrowser
org.apache.cordova.media
org.apache.cordova.network-информация
org.apache.cordova.splashscreen

Соответствующий фрагмент электронной почты, определенная информация заменена на []:

От: iTunes Store
Дата: ср, 17 сен 2014 в 15:49
Тема: iTunes Connect: ваше приложение «[appName]» (Apple ID: [id]) имеет одну или несколько проблем
Кому: [разработчик]

Уважаемый разработчик,

Мы обнаружили одну или несколько проблем с вашей недавней доставкой для «[app]». Ваша доставка прошла успешно, но вы можете исправить следующие проблемы при следующей поставке:

Отсутствие права на уведомление Push Push – ваше приложение, как представляется, включает API, используемый для регистрации в службе Apple Push Notification, но права на подпись приложения не включают права «aps-environment». Если ваше приложение использует службу уведомления Apple Push, убедитесь, что ваш идентификатор приложения включен для Push Notification в Portal Provisioning Portal и повторно отправлен после подписания вашего приложения с профилем распределения, который включает в себя право доступа «aps-environment». Дополнительную информацию см. В разделе «Предоставление и разработка» в Руководстве по программированию локального и Push-Notification. Если ваше приложение не использует службу Apple Push Notification, никаких действий не требуется. Вы можете удалить API из будущих представлений, чтобы остановить это предупреждение. Если вы используете стороннюю структуру, вам может потребоваться обратиться к разработчику за информацией об удалении API.

После исправления проблем вы можете использовать Xcode или Application Loader для загрузки нового бинарного файла в iTunes Connect.

С Уважением,

Команда App Store

Solutions Collecting From Web of "Приложение Кордовы, которое не использует push-уведомления: «Отсутствие права на уведомление push-уведомления»"

Крик прав! Я нашел эти вызовы API в /Classes/AppDelegate.m безусловно, созданный Cordova 3.5.

Я не пробовал это на данный момент, но эти строки, безусловно, можно прокомментировать в xCode, чтобы избежать предупреждений Apple.

 - (void) application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { // re-post ( broadcast ) NSString* token = [[[[deviceToken description] stringByReplacingOccurrencesOfString: @"<" withString: @""] stringByReplacingOccurrencesOfString: @">" withString: @""] stringByReplacingOccurrencesOfString: @" " withString: @""]; [[NSNotificationCenter defaultCenter] postNotificationName:CDVRemoteNotification object:token]; } - (void) application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { // re-post ( broadcast ) [[NSNotificationCenter defaultCenter] postNotificationName:CDVRemoteNotificationError object:error]; } 

КАК ДЕЛАТЬ ЭТО ПОСЛЕ ПОЛЬЗОВАТЕЛЯ XCODE (6.1):

Комментируя код нарушения в Classes\AppDelegate.m вы получите одобрение вашего приложения, вы хотите продолжать получать выгоды от будущих обновлений Кордовы, поэтому лучший способ сделать это – включить символ DISABLE_PUSH_NOTIFICATIONS во время компиляции, чтобы этот бит кода остался слева вне.

Я исхожу из фона C #, поэтому я понимаю условную компиляцию, но я новичок в XCode, поэтому мне пришлось немного разобраться, как определить символы компиляции через пользовательский интерфейс.

Оказывается, волшебные слова: «Макропроцессорный макрос». Вот как вы можете это сделать графически (обратите внимание на то, как это делается в XCode 6.1):

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

Надеюсь, это поможет другим людям в такой ситуации.

У вас был установлен Push Plugin? Похоже, что у вас есть соответствующий код где-то в вашем пакете приложений. Я бы сделал общий поиск по конкретным API-вызовам, например:

  • didRegisterForRemoteNotificationsWithDeviceToken
  • didFailToRegisterForRemoteNotificationsWithError

Мертвый код, файлы необходимо удалить.

Heres "полная документация: https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW2

Как отмечает Чарльз Мерриам, более новые версии cordova-ios упрощают отключение сенсорных push-уведомлений, установив флаг preproceror DISABLE_PUSH_NOTIFICATIONS. ( См. Историю ошибок .)

Вам нужно будет cordova platform update ios , platform install ios чтобы получить новую версию в AppDelegate.m. (Может быть, есть лучший способ, чем сдуть папку?)

Я нашел скрипт hookova on_platform_add, который будет редактировать project.pbxproj с этим флагом для вас, когда вы устанавливаете платформу iOS. Мне нужно было npm install xcode чтобы заставить скрипт hook работать.

И кирк, и r121 верны.

В более поздних версиях Кордовы этот оскорбительный код теперь полезен в #ifndef DISABLE_PUSH_NOTIFICATIONS . Все, что вам нужно сделать, это добавить -DISABLE_PUSH_NOTIFICATIONS к вашим флагам компилятора. Это установлено в target/Build Settings/Custom Compiler Flags/(both C and C++ release) для тех, кто строит внутри XCode.

В нашем процессе сборки мы сдували и переделывали файл AppDelegate.m. Я использую взлома:

  sed -i "" -e "s/ifndef DISABLE_PUSH_NOTIFICATIONS/if 0/" build/cordova/platforms/ios/gThrive/Classes/AppDelegate.m # That uses the os/x sed to not have push notifications in the app 

Что просто заставляет проблему уйти.