More than 1 year has passed since last update.

リモート/ローカル通知での、AppDelegate分岐処理テンプレート。

通知は6パターン、分岐は5パターン。

※PushNotificationに対応した証明書のプロビジョニングを利用している前提。

#import "AppDelegate.h"

@implementation AppDelegate

/**
*
* [AppDelegate Notification Template]
*
* 通知を受け取った時の振る舞い
*
* ▼リモート通知うけとった
* 
*  [0-0] アプリがフォアグラウンドで動いている状態だった
*
*  [0-1] アプリがバックグラウンドにいる状態で通知を受け取り、通知領域をタップしてフォアグラウンドになった
*
*  [0-2] アプリは停止している状態で、通知領域がタップされ起動した
*
* ▼ローカル通知うけとった
*
*  [1-0] アプリがフォアグラウンドで動いている状態だった
*
*  [1-1] アプリがバックグラウンドにいる状態で通知を受け取り、通知領域をタップしてフォアグラウンドになった
*
*  [1-2] アプリは停止している状態で、通知領域がタップされ起動した
*/

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[UIApplication sharedApplication]
        registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert 
        | UIRemoteNotificationTypeBadge 
        | UIRemoteNotificationTypeSound)];

    if (launchOptions != nil) {
        NSDictionary *userInfo = [launchOptions objectForKey:
                UIApplicationLaunchOptionsRemoteNotificationKey];
        if (userInfo) {

            // アプリ起動していない状態で、
            //リモート or ローカルプッシュ通知エリアがタップされアプリが起動した

            NSLog(@"[0-2] or [1-2]");
        }
    }
    return YES;
}

/**
* リモート通知受け取った
*/
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    if (application.applicationState == UIApplicationStateActive) {

        //アプリがフォアグラウンドで動いている状態だった
        NSLog(@"[0-0]");

    }
    else if (application.applicationState == UIApplicationStateInactive) {

        //バックグラウンドにいる状態で、通知を受け取り、
        //通知領域をタップしてフォアグラウンドになった
        NSLog(@"[0-1]");

     }
}

/**
* ローカル通知受け取った
*/
-(void) application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    if(application.applicationState == UIApplicationStateActive) {

        //アプリがフォアグラウンドで動いている状態だった
        NSLog(@"[1-0]");

    }
    else if (application.applicationState == UIApplicationStateInactive) {

        //バックグラウンドにいる状態で、通知を受け取り、
        //通知領域をタップしてフォアグラウンドになった
        NSLog(@"[1-1]");

    }
}
/**
* トークン取得成功
*/
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

    // カッコとスペースを削除
    NSString *tokenString = [[[deviceToken description] 
             stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]] 
        stringByReplacingOccurrencesOfString:@" " withString:@""
    ];

    NSLog(@"deviceToken = %@",tokenString);
}

/**
* トークン登録エラー
*/
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
    NSLog(error.localizedDescription);
}

@end


何か間違いなどありましたら気軽にコメントいただけると嬉しいです。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.