web-dev-qa-db-ja.com

「プッシュ通知の資格がない」ためにアプリが拒否されました

最近、アップロード中にアプリケーションが拒否されました。 Appleレビューチームは、私のアプリは「プッシュ通知の資格がありません」と言います

これは彼らが提供した情報です:

プッシュ通知資格がありません-アプリはAppleプッシュ通知サービスに登録されていますが、アプリケーション署名の資格に必要な「aps-environment」資格が含まれていません。このアプリ、および「aps-environment」エンタイトルメントを含むDistributionプロビジョニングプロファイルをダウンロードしたこと。

以前のバージョンのアプリではプッシュ通知が使用されていましたが、それが原因でアプリバイナリが拒否されることはありませんでした。ここで何をすべきですか?

36
sandy

任意のテキストエディタでプロビジョニングプロファイルを開き、「環境」を検索します。

あなたは見つける必要があります:aps-environment

プロビジョニングプロファイルにaps-environmentが表示されない場合、Appleプロビジョニング証明書)に問題があります。

プッシュ通知なしで証明書を作成し、後でプッシュ通知サービスを追加した場合、Appleプロビジョニングプロファイルを更新しないでください。

新しいプロビジョニングプロファイルを作成する必要があります。この新しいプロビジョニングプロファイルを使用してバイナリに署名すると、準備が整います。

17
Sagar Mody

Distributionプロビジョニングプロファイルを再作成し、それを使用してアプリケーションをビルドしました。この変更により、プッシュ通知資格が欠落する問題が修正されました。

14
sandy

Cordova/Phonegapプロジェクトを送信していて、プッシュ通知を使用していない場合は、Classes/AppDelegate.m以下の2つの方法。 Cordova 3.7.0で観測されますが、他のバージョンについてはわかりません。

他の方法でリモート通知を使用していないことを確認してください(プラグインも慎重に確認してください)。次に、次のブロックを削除またはコメントアウトします。

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

これで数時間節約できることを願っています;-)

12
jlapoutre

私も同じ問題を抱えていたので、プロビジョニングプロファイルを再作成して修正しました。ローカルおよびプッシュ通知ガイドの "Provisioning and Development" から:

次に、チーム管理者またはチームエージェントは、リモート通知開発のサーバー側で使用されるプロビジョニングプロファイル(開発または配布)を作成する必要があります。プロビジョニングプロファイルは、アプリケーションの開発者とそのデバイスを承認された開発チームに関連付け、それらのデバイスをテストに使用できるようにするアセットのコレクションです。このプロファイルには、証明書、デバイス識別子、アプリケーションのバンドルID、およびなどのすべての資格が含まれています。すべてのチームメンバーは、実行するデバイスにプロビジョニングプロファイルをインストールし、アプリケーションコードをテストする必要があります。

8

My Case:アプリストアアプリの更新に関するプッシュ通知を実装しました。プッシュ通知の実装前のプロビジョニングプロファイルが無効になると、新しいAppstore-配布プロビジョニングプロファイルを作成し、新しいプロファイルでアプリを構築し、ストアにアップロードしました。しかし、「Missing Push Notification Entitlement」というメールを受け取りました。

検索:アーカイブ中に、Xcodeが間違った(無効/古い)プロビジョニングプロファイルを使用していることがわかりました。そのため、メンバーセンターから古いプロビジョニングプロファイルを削除し、問題を解決しました

Screenshot while validating the archive

4
NaveenRaghuveer

Cordovaアプリでもこの問題が発生しましたが、少し読んでみると、これは最近の一般的な問題のようです。

なぜDID IT HAPPEN?

プッシュ通知を使用してアプリが既に承認されていると述べているため、最も可能性の高いシナリオは、AppStoreに送信するときにアプリのプロビジョニングプロファイルが変更されたことです。おそらくあなた:

  1. xCodeでプロジェクトを再構築した、または
  2. 別のコンピューターに移動して、XCodeに正しいプロファイルが何であるかを伝えるのを忘れた、または
  3. 誰かがあなたのコンピューターに座って変更した、または

この問題は、プロビジョニングプロファイルを介してアクセス許可が収集されるために発生します。アプリのプロビジョニングプロファイルを「プッシュ通知」エンタイトルメントを持つAppIDにリンクするのを忘れた場合(デフォルトでワイルドカード開発者プロビジョニング証明書を使用してXCodeがこれを自動的に行うことに注意してください)、ソートするまでこのメッセージが表示される可能性があります許可を出します。

CORDOVAアプリでプッシュ通知の必要性を取り除く方法:

このメッセージを受け取ったときにCordovaアプリを送信していましたが、@ jlapoutreによって投稿されたソリューションはアプリを承認するのに十分ですが、Cordovaのアップグレードを引き続き利用したいので、条件付きコンパイル(つまりトリガー)を活用することをお勧めします#ifndef DISABLE_Push_NOTIFICATIONSディレクティブは、XCodeにこのコードの一部を省いてアプリをコンパイルするよう指示します)。

条件付きコンパイルは、XCode-speakでは「プリプロセッサマクロ」とも呼ばれます。これは、UIを介してこれをグラフィカルに実現する方法です(XCode 6.1ではこの方法が行われていることに注意してください)。

enter image description here

これが同じ状況の他の人々に役立つことを願っています。

3
Steven de Salas

これと同じエラーメッセージが表示され、プロビジョニングプロファイルを再作成しても削除されませんでした。

代わりに、アプリに使用されていない(ライブラリ内の)浮遊APNS関連のシンボルが含まれていることがわかりました。どうやら、静的アナライザーがアプリをプッシュ通知を使用するものとしてマークしたようです(そうではありません)。 #ifdef-ingシンボルを使用すると、aps-environmentの資格なしでアプリを受け入れることができました。

3
Tim Burks

プッシュサービスを有効にしたアプリにToday拡張機能を追加した後、最近この問題が発生しました。最終的に、Today拡張機能用にXcodeによって生成されたモバイルプロビジョニングプロファイルでは、プッシュ通知サービスが有効になっていないことがわかりました。 Today拡張機能のプッシュサービスを有効にすると、Appleからの警告はなくなりました。

1
chris.o.

ステップ

  1. プッシュ通知サービスを有効にする(本番プッシュSSL証明書)

  2. 配布プロビジョニングプロファイルを作成/再作成し、更新された配布プロビジョニングプロファイルを使用してアプリケーションをビルドします。

次のリソースが役立ちます

0

同じ問題があります。解決しました。

この問題は、プッシュ通知機能をAppIDに追加し、Provisioningを再作成しないときに発生すると思います。 iCloud機能を追加すると警告が表示されます:

このApp ID用に作成するすべての新しいプロビジョニングプロファイルは、iCloudで有効になります。このApp IDに関連付けられている既存のプロビジョニングプロファイルに対してiCloudを有効にする場合、手動で再生成する必要がありますそれら

AppIDに何らかの機能を追加する場合、そのAppIDに関連するすべてのプロビジョニングを手動で再生成する必要があると思います。

私はそう思う

0
Tony