3

Xcode 4 を使用して構築されたストアにニューススタンド アプリがあります。アプリがバックグラウンドにある場合、iOS 7 を実行しているデバイスのリモート通知がアプリに転送されなくなっていることに気付きました。デバイスがフォアグラウンドにある場合、通知が受信されて処理されます。

さらに、これらの通知は、iOS 6 以前を実行しているデバイスで適切に処理および処理されます。

デバイスで永続的なログが有効になっていると、iOS 7 デバイスが通知を受信して- [UIApplication application: didReceiveRemoteNotification:]​​も呼び出されないことがわかります。

iOS 5/6/7 を実行しているデバイスのデバイス ログを評価すると、リモート通知が届いていることがわかります。

Oct 24 11:24:22 iPad-Retina apsd[82] <Warning>: 2013-10-24 11:24:22 +0200 apsd[82]: <APSCourier: 0x14d8c7b0>: Received message for enabled topic 'com.companyname.ourapp' with payload '{
        aps =     {
        "content-available" = 1;
        importantInformation = @"23";
        sound = "";
    };
    }' onInterface: NonCellular  for device token: NO  with priority (null)

iOS 7 では、この通知はアプリに転送されませんが、以前のバージョンの iOS では、次のメソッドへの呼び出しが表示されます。

Oct 24 11:24:20 Pad2-3G Magic[1328] <Warning>: -[ApplicationDelegate application:didReceiveRemoteNotification:]

ニューススタンドの通知が正常に処理されました。

iOS 6 SDK を使用して、iOS 7 デバイスのニューススタンドのダウンロード操作を確実に成功させる方法はありますか?

アプリの再設計を行うまでは、少なくとも現時点では、Xcode 5 を使用せずに iOS 7 SDK を使用することをお勧めします。

前もって感謝します

4

1 に答える 1

2

次の仮定を使用して、問題を解決することができました。

-application:didReceiveRemoteNotification:fetchCompletionHandler:で導入されたiOS 7 ではUIApplicationDelegate、おそらく通知が受信されなかった理由は、iOS がアプリケーション デリゲートが新しいセレクターに応答するかどうかをテストしていたためではないかと推測しました。

当然、Xcode 4 にはありませんUIBackgroundFetchResultので、メソッドは単にNSUInteger. そこで、アプリケーション デリゲートにメソッドを追加しました。

- (void)application:(UIApplication *)application 
  didReceiveRemoteNotification:(NSDictionary *)userInfo
  fetchCompletionHandler:(void (^)(NSUInteger result))handler 
{
    [self application:application didReceiveRemoteNotification:userInfo];
    handler(0);
}

さらに、アプリケーション plist の UIBackgroundModes にリモート通知を追加する必要がありました。

Xcode 4 を使用して任意の iOS 7 デバイスにコードをビルドすると、問題が解決され、ストアに提出できるようになりました。

この回答が、同じ立場にあった他の人に役立つことを願っています

于 2013-11-05T14:50:04.363 に答える