0

didFinishLaunchingWithOptions:(NSDictionary *)launchOptionsコードを使用して、AppDelegate クラスの新しいメッセージを 3 か所でチェックします。

 if (launchOptions != nil)
    {
        NSDictionary* dictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
        if (dictionary != nil)
        {
            //NSLog(@"Launched from push notification: %@", dictionary);
            //notification pending ... so pull from server the new message
             [self addMessageFromRemoteNotification:dictionary updateUI:YES];
        }
    }

そしてdidReceiveRemoteNotification:(NSDictionary*)userInfoコードを使用する場合:

// notification pending ... so pull from server the new message
[self addMessageFromRemoteNotification:userInfo updateUI:YES];

- (void)applicationDidBecomeActive:(UIApplication *)applicationコードを使用する場合

if(application.applicationIconBadgeNumber>0)
    {

         application.applicationIconBadgeNumber = 0;
         // notification pending ... so pull from server the new message
         [self openMessageViewForNewMessage];


    }

ただし、アプリがまだ通知を「キャッチ」していない場合、つまり、通知を受信して​​いることをまだ認識していない場合があることに気付きました。私は何かメッセージを送りましたか?または、アプリがiOSから新しい通知があることを常に通知されるとは限らないため、新しいメッセージについて「私のサーバー」を常にチェックする必要があります。

4

1 に答える 1

1

簡単な概要...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

ここでは、アプリが受け取る通知の種類を指定します。たとえば、バッジ、サウンド、アラートが必要な場合は、次のように含めます。

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];

の中に:

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

次のようなものを追加して、バッジを確実に更新できます。

NSString *badge = [apsInfo objectForKey:@"badge"];
application.applicationIconBadgeNumber = [badge intValue];

私も個人的にこのコードを追加し、必要に応じて処理を行います。

[[NSNotificationCenter defaultCenter] postNotificationName:@"ReceivedNotificationAlert" object:self];

上記はすべてのアプリでうまく機能します。アプリで APNs が見つからない場合があるとおっしゃいました。具体的にどのようなケースを教えていただけますか?

于 2013-04-27T19:50:03.353 に答える