web-dev-qa-db-ja.com

プッシュ通知を使用しないCordovaアプリ:「プッシュ通知の資格がありません」

プッシュ通知を使用しないCordovaベースのiOSアプリがあります。 Cordova 3.5.0の時点で、アプリストアへの送信ごとに、Appleのプッシュ通知サービスへの登録に使用するAPIがアプリに含まれていることを通知するメールが送信されますが、プッシュ通知の資格はありません。

アプリは実際にプッシュ通知を使用しないため、毎回承認されています。ただし、AppleがこれらのAPI参照が受け入れられるかどうかについてポリシーを変更することを決定した場合に、この警告をトリガーしないようにしたいと思います。

Cordovaの以前のバージョンではこの問題は発生せず、Objective-C自体で作業を行っていません。これはCordova 3.5の既知の問題ですか?検索によって同様の問題を抱える人もいますが、Push APIが参照されている場所を見つけて削除するのではなく、Push資格を追加したい人向けのソリューションしか見つかりませんでした。 Cordovaの問題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-information
org.Apache.cordova.splashscreen

関連するメールスニペット、特定の情報を[]に置き換えました:

From:iTunes Store
日付:2014年9月17日水曜日午後3時49分
件名:iTunes Connect:アプリ「[appName]」(Apple ID:[id])に1つ以上の問題があります
宛先:[開発者]

親愛なる開発者、

「[アプリ]」の最近の配信で1つ以上の問題が見つかりました。配信は成功しましたが、次の配信で次の問題を修正することができます。

プッシュ通知資格の欠落-アプリには、Appleプッシュ通知サービスに登録するために使用されるAPIが含まれているように見えますが、アプリ署名の資格には「aps-environment」資格が含まれていません。 Appleプッシュ通知サービス、プロビジョニングポータルでアプリIDがプッシュ通知に対して有効になっていることを確認し、「aps-environment」エンタイトルメントを含むディストリビューションプロビジョニングプロファイルでアプリに署名した後に再送信します詳細については、ローカルおよびプッシュ通知プログラミングガイドの「プロビジョニングと開発」を参照してください。アプリでAppleプッシュ通知サービスを使用していない場合、アクションは不要です。APIを削除できます。サードパーティのフレームワークを使用している場合は、開発者に連絡してAPIの削除に関する情報を入手する必要があります。

問題を修正したら、XcodeまたはApplication Loaderを使用して、新しいバイナリをiTunes Connectにアップロードできます。

よろしく、

App Storeチーム

44
Sterling Nelson

クリックは正しい!このAPI呼び出しは/Classes/AppDelegate.m確かにCordova 3.5によって生成されます。

私は今のところそれを試しませんでしたが、Appleの警告を避けるためにこれらの行はxCodeで確かにコメントできます。

- (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

これを行う方法VIA XCODE UI(6.1):

Classes\AppDelegate.mの問題のあるコードをコメントアウトすると、アプリが承認されますが、今後のCordovaアップグレードの恩恵を受け続けるには、コンパイル中にDISABLE_Push_NOTIFICATIONSシンボルをオンにして、のコードは除外されます。

私はC#のバックグラウンドから来ているので、条件付きコンパイルを理解していますが、XCodeが初めてなので、UIを介してコンパイルシンボルを定義する方法を見つけるために少し調査する必要がありました。

魔法の言葉は「プリプロセッサマクロ」であることがわかります。これは、これをグラフィカルに実現する方法です(XCode 6.1で行われている方法に注意してください)。

enter image description here

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

49
Steven de Salas

kirkr121 の両方が正しい。

Cordovaのより新しいバージョンでは、この問題のあるコードは_#ifndef DISABLE_Push_NOTIFICATIONS_のラッパー内で生成されるようになりました。必要なのは、コンパイラフラグにadd _-DISABLE_Push_NOTIFICATIONS_だけです。これは、XCode内に構築するそれらのtarget/Build Settings/Custom Compiler Flags/(both C and C++ release)で設定されます。

ビルドプロセスでは、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
_

問題がなくなるだけです。

4
Charles Merriam

ある時点でプッシュプラグインをインストールしましたか?アプリケーションパッケージのどこかにそれぞれのコードがあるようです。特定のAPI呼び出しをプロジェクト全体で検索します。例:

  • didRegisterForRemoteNotificationsWithDeviceToken
  • didFailToRegisterForRemoteNotificationsWithError

デッドコード、ファイルを削除する必要があります。

ここに完全なドキュメントがあります: https://developer.Apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/IPhoneOSClientImp.html#//Apple_ref/doc/uid/TP40008194-CH103- SW2

4
krik

Charles Merriamが指摘しているように、新しいバージョンのcordova-iosでは、プリプロセッサフ​​ラグDISABLE_Push_NOTIFICATIONSを設定することで、プッシュ通知のタッチを簡単に無効にできます。 ( バグ履歴を参照 。)

AppDelegate.mで新しいものを取得するには、cordova platform update iosplatform uninstall ios、およびplatform install iosが必要です。 (フォルダを吹き飛ばすよりも良い方法があるのでしょうか?)

IOSプラットフォームをインストールするときに、そのフラグでproject.pbxprojを編集する Cordova on_platform_addフックスクリプト を見つけました。フックスクリプトを機能させるには、npm install xcodeが必要でした。

4
mpoisot