web-dev-qa-db-fra.com

Application rejetée en raison de "droits de notification push manquants"

Récemment, ma demande a été rejetée lors de son téléchargement. L’équipe d’examen d’Apple a déclaré que mon application était «des droits de notification Push manquants»

Ce sont les informations qu'ils ont fournies: 

Droits d'accès aux notifications Push manquants - Votre application s'enregistre auprès du service de notifications push Apple, mais les droits de la signature de l'application n'incluent pas le droit requis "environnement-aps". Assurez-vous que vous avez activé Push Notification Services pour cette application et que vous avez téléchargé un profil d'approvisionnement de distribution qui inclut le droit "aps-environment".

Les versions précédentes de mon application avaient l'habitude d'avoir des notifications Push, et mon binaire d'application n'a jamais été rejeté pour cette raison. Que devrais-je faire ici?

36
sandy

Ouvrez votre profil d'approvisionnement dans n'importe quel éditeur de texte et recherchez "environnement".

Vous devriez trouver: aps-environment

Si vous ne voyez pas aps-environment dans votre profil de provisioning, il y a un problème dans votre certificat de provisioning Apple. 

Si vous avez créé un certificat sans notification Push et que vous avez ensuite ajouté le service de notification Push, Apple ne met pas à jour votre profil de provisioning. 

Vous devez créer un nouveau profil d'approvisionnement. Signez le binaire avec ce nouveau profil d'approvisionnement et vous serez prêt à partir.

17
Sagar Mody

J'ai recréé mon profil d'approvisionnement de distribution et créé mon application avec celui-ci. Cette modification a résolu le problème des droits de notification push manquants.

14
sandy

Si vous soumettez un projet Cordova/Phonegap et que vous n'utilisez pas de notifications Push, vous devez inspecter Classes/AppDelegate.m pour les deux méthodes ci-dessous. Observé dans Cordova 3.7.0, pas sûr des autres versions.

Assurez-vous de ne pas utiliser les notifications à distance d'une autre manière (vérifiez également vos plugins). Ensuite, supprimez ou commentez le bloc suivant:

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

J'espère que cela vous fait gagner quelques heures ;-)

12
jlapoutre

J'ai eu le même problème et je l'ai résolu en recréant le profil d'approvisionnement. From "Provisioning and Development" dans le Guide de notification locale et push:

L’administrateur d’équipe ou l’agent d’équipe doit ensuite créer le profil de provisioning (développement ou distribution) utilisé côté serveur du développement de notifications à distance. Le profil d'approvisionnement est un ensemble d'actifs qui associe les développeurs d'une application et de leurs périphériques à une équipe de développement autorisée et permet à ces périphériques d'être utilisés pour des tests. Le profil contient des certificats, des identifiants de périphérique, l’ID de bundle de l’application et tous les droits, y compris. Tous les membres de l'équipe doivent installer le profil d'approvisionnement sur les périphériques sur lesquels ils vont exécuter et tester le code de l'application.

8

Mon cas : J'ai implémenté les notifications Push pour une mise à jour de mon application appstore. Étant donné que les profils de provisioning antérieurs à l'impelmentation des notifications Push deviennent invalides, j'ai créé un nouveau profil de provisioning de distribution Appstore et créé l'application avec un nouveau profil et chargé dans un magasin. Mais j'ai reçu un mail disant "Droit de notification Push manquant".

Recherche : J'ai constaté que, lors de l'archivage, Xcode utilisait le mauvais profil d'approvisionnement (non valide/ancien). Donc supprimé l'ancien profil d'approvisionnement du centre membre et cela a résolu le problème

Screenshot while validating the archive

4
NaveenRaghuveer

J'ai également eu ce problème avec une application Cordova et, après avoir lu un peu de lecture, il semble que ce soit un problème courant de nos jours. 

POURQUOI DID EST-IL ARRIVÉ?

Étant donné que vous indiquez que votre application a déjà été approuvée à l'aide de notifications Push, le scénario le plus probable est que le profil d'approvisionnement de votre application a été modifié lors de sa soumission à l'AppStore. Peut-être toi:

  1. reconstruit votre projet en XCode, ou
  2. déplacé vers un autre ordinateur et oublié de dire à XCode quel était le profil correct, ou
  3. quelqu'un s'est assis sur votre ordinateur et l'a changé, ou

Ce problème se produit car les autorisations sont collectées via le profil d'approvisionnement. Si vous oubliez de lier le profil de provisioning de votre application à un AppID doté du droit "Notifications push" (notez que XCode le fait automatiquement en utilisant le certificat de provisioning de développeur générique par défaut), vous risquez alors d'obtenir ce message jusqu'à ce que vous triiez sur l'autorisation.

COMMENT RETIRER LA NECESSITE DE NOTIFICATIONS Push DANS CORDOVA APPS:

Lorsque je recevais ce message, je soumettais une application Cordova. Bien que la solution publiée par @jlapoutre soit suffisante pour faire approuver votre application, vous souhaitez continuer à bénéficier des mises à niveau de Cordova. Le mieux est donc de tirer parti de la compilation conditionnelle (c.-à-d. Le déclenchement la directive #ifndef DISABLE_Push_NOTIFICATIONS qui indique à XCode de vous compiler avec ce bit de code laissé de côté). 

La compilation conditionnelle est également appelée «Macros de préprocesseur» dans XCode-speak. Voici comment vous pouvez accomplir ceci graphiquement via l'interface utilisateur (notez que c'est comme ça que ça se passe dans XCode 6.1):

 enter image description here

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

3
Steven de Salas

J'ai reçu le même message d'erreur et la recréation de mon profil d'approvisionnement ne l'a pas éliminé. 

Au lieu de cela, j'ai constaté que mon application contenait des symboles errants liés à APNS (dans une bibliothèque) et non utilisés. Apparemment, ils ont obligé un analyseur statique à marquer l'application comme utilisant des notifications Push (ce n'est pas le cas). # Si nous avons défini les symboles, mon application a pu être acceptée sans le droit aps-environment.

3
Tim Burks

J'ai récemment rencontré ce problème après avoir ajouté l'extension Today à une application avec les services Push activés. Enfin, nous avons réalisé que les services de notifications push ne sont pas activés dans le profil de provisioning mobile généré par Xcode pour l’extension Today. Une fois que j'ai activé Push Services pour l'extension Today, l'avertissement d'Apple est parti. 

1
chris.o.

Pas 

  1. Activer le service de notification push (certificat SSL de production)

  2. Créez/Recréez un profil de provisioning de distribution et construisez votre application Avec le profil de provisioning de distribution mis à jour.

Les ressources suivantes peuvent vous aider

0

J'ai le même problème. Je l'ai résolu.

Je pense que ce problème est dû à l'ajout de Push-notification-function à l'AppID et à l'absence de recréation du provisioning. Nous recevrons un avertissement lors de l'ajout de la fonction iCloud:

Tous les nouveaux profils de provisioning que vous créez pour cet ID d'application seront activés pour iCloud. Si vous souhaitez activer iCloud pour tout profil d'approvisionnement existant associé à cet ID d'application, vous devez régénérer manuellement them

Je pense que lorsque nous ajoutons une fonction dans AppID, nous devrions régénérer manuellement tous les provisionnements liés à cet AppID.

Je le pense

0
Tony