LoginSignup
105
102

More than 5 years have passed since last update.

[ObjC] AppDelegate 通知分岐処理テンプレート

Last updated at Posted at 2014-05-26

リモート/ローカル通知での、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


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

105
102
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
105
102