web-dev-qa-db-fra.com

Application Cordova qui n'utilise pas les notifications Push: "Droit de notification Push manquant"

Nous avons une application iOS basée sur Cordova qui n'utilise pas les notifications Push. Depuis Cordova 3.5.0, chaque soumission que nous avons faite à l'App Store aboutit à un e-mail nous informant que notre application inclut l'API utilisée pour s'inscrire auprès du service de notification push d'Apple, mais n'a pas le droit de notification Push.

L'application a été acceptée à chaque fois, car nous n'utilisons en fait aucune notification Push. Cependant, je voudrais éviter de déclencher cet avertissement au cas où Apple décide de changer sa politique pour savoir si ces références API sont acceptables.

Nous n'avons pas rencontré le problème avec les versions précédentes de Cordova, et nous n'avons effectué aucun travail dans Objective-C nous-mêmes. Est-ce un problème connu avec Cordova 3.5? La recherche a produit des problèmes similaires, mais je n'ai trouvé de solutions que pour les personnes souhaitant ajouter des droits Push (plutôt que de savoir où l'API Push est référencée et de la supprimer). J'ai jeté un œil au ML de Cordova, mais je n'y ai rien trouvé. Toute autre piste que les gens connaissent serait appréciée!

Plugins utilisés:
org.Apache.cordova.console
org.Apache.cordova.device
org.Apache.cordova.file
org.Apache.cordova.inappbrowser
org.Apache.cordova.media
org.Apache.cordova.network-information
org.Apache.cordova.splashscreen

Extrait d'e-mail pertinent, informations spécifiques remplacées par []:

De: iTunes Store
Date: mer. 17 sept. 2014 à 15h49
Objet: iTunes Connect: votre application "[appName]" (identifiant Apple: [id]) présente un ou plusieurs problèmes
À: [développeur]

Cher développeur,

Nous avons découvert un ou plusieurs problèmes avec votre livraison récente pour "[app]". Votre livraison a réussi, mais vous souhaiterez peut-être corriger les problèmes suivants lors de votre prochaine livraison:

Droit de notification push manquant - Votre application semble inclure l'API utilisée pour vous inscrire au service de notification push Apple Apple, mais les droits de la signature de l'application n'incluent pas le droit "aps-environment". Si votre application utilise le service de notification push Apple Apple, assurez-vous que votre ID d'application est activé pour la notification push dans le portail de provisionnement et soumettez-le à nouveau après avoir signé votre application avec un profil de distribution de distribution qui inclut le droit "aps-environment" . Pour plus d'informations, voir "Provisioning and Development" dans le Guide de programmation des notifications locales et push. Si votre application n'utilise pas le service de notification push Apple Apple, aucune action n'est requise. Vous pouvez supprimer l'API des futures soumissions pour arrêter cet avertissement. Si vous utilisez un framework tiers, vous devrez peut-être contacter le développeur pour obtenir des informations sur la suppression de l'API.

Après avoir corrigé les problèmes, vous pouvez utiliser Xcode ou Application Loader pour télécharger un nouveau fichier binaire sur iTunes Connect.

Cordialement,

L'équipe App Store

44
Sterling Nelson

Krik a raison! J'ai trouvé ces appels API dans /Classes/AppDelegate.m certainement généré par Cordova 3.5.

Je ne l'ai pas essayé pour le moment, mais ces lignes peuvent certainement être commentées dans xCode pour éviter les avertissements d'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];
}
21
r121

COMMENT FAIRE CECI VIA UI XCODE (6.1):

Tout en commentant le code incriminé dans Classes\AppDelegate.m votre application sera approuvée. Vous souhaitez continuer à bénéficier des futures mises à niveau de Cordova. La meilleure façon de procéder est donc d'activer DISABLE_Push_NOTIFICATIONS symbole pendant la compilation afin que ce bout de code soit laissé de côté.

Je viens d'un arrière-plan C #, donc je comprends la compilation conditionnelle, mais je suis nouveau sur XCode, j'ai donc dû faire un peu de recherche pour savoir comment définir les symboles de compilation via l'interface utilisateur.

Il s'avère que les mots magiques sont "macro préprocesseur". Voici comment vous pouvez accomplir cela graphiquement (notez que c'est la façon dont cela se fait dans XCode 6.1):

enter image description here

J'espère que cela aide d'autres personnes dans la même situation.

49
Steven de Salas

kirk et r121 sont corrects.

Dans les versions plus récentes de Cordova, ce code incriminé est désormais généré de manière utile dans un wrapper de #ifndef DISABLE_Push_NOTIFICATIONS. Il vous suffit d'ajouter -DISABLE_Push_NOTIFICATIONS À vos drapeaux de compilation. C'est défini dans target/Build Settings/Custom Compiler Flags/(both C and C++ release) pour ceux qui construisent à l'intérieur de XCode.

Dans notre processus de construction, nous avons soufflé et reconstruit beaucoup le fichier AppDelegate.m. Le hack que j'utilise est:

 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

ce qui fait simplement disparaître le problème.

4
Charles Merriam

Avez-vous déjà installé le plug-in Push? On dirait que vous avez le code respectif quelque part dans votre dossier de candidature. Je ferais une recherche à l'échelle du projet pour les appels d'API spécifiques, par exemple:

  • didRegisterForRemoteNotificationsWithDeviceToken
  • didFailToRegisterForRemoteNotificationsWithError

Le code mort, les fichiers doivent être supprimés.

Voici la documentation complète: https://developer.Apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/IPhoneOSClientImp.html#//Apple_ref/doc/uid/TP40008194-CH103- SW2

4
krik

Comme le souligne Charles Merriam, les nouvelles versions de cordova-ios facilitent la désactivation des notifications Push en touchant le drapeau du préprocesseur DISABLE_Push_NOTIFICATIONS. ( Voir l'historique des bogues .)

Tu devras cordova platform update ios, platform uninstall ios et platform install ios pour obtenir le nouveau dans AppDelegate.m. (Peut-être y a-t-il un meilleur moyen que de souffler le dossier?)

J'ai trouvé un script de raccordement Cordova on_platform_add qui éditera project.pbxproj avec cet indicateur pour vous lorsque vous installerez la plate-forme iOS. J'avais besoin de npm install xcode pour que le script hook fonctionne.

4
mpoisot