iOS9でバッジが表示されない時の対処法

シミュレータは無理
iOS9以降は認証が必要






バッジとは


アプリアイコンの右上に出ている数字のことです。
メールだと未読件数、AppStoreだとアップデート可能なアプリの数などが表示されますね。


バッジの設定方法


バッジの数を設定
badgeNum = 2;
[UIApplication sharedApplication].applicationIconBadgeNumber = badgeNum;

バッジの数を取得する方法
badgeNum = [UIApplication sharedApplication].applicationIconBadgeNumber;

マイナスを設定することによってバッジの表示をクリアできます。
が使用するには少し下準備が必要です。
私のようにチョロっと調べて5分でできますなんて言わないようにしましょう。



シュミレータだとバッジは表示されない


ハマりポイントその1
シュミレータで通知周りのデバッグは不可能の模様
http://qiita.com/flexfirm/items/93a8a5d3698fe5a7870e
なので確認には実機が必要になります。


iOS9以降はappDelegateのdidFinishLaunchingWithOptionsで認証してもらう必要がある


ハマりポイントその2
iOS8以前は必要ないらしいです。
http://jumperson.hatenablog.com/entry/2015/08/20/074334
もちろんバッジ以外を利用するなら必要になります。

objective-cのサンプル
- (BOOL)application:(UIApplication *)application 
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    int majorVersion = [[[UIDevice currentDevice]systemVersion] intValue];
    
    if( majorVersion >= 9 ) 
    { // 9以降のみで問題なし?
        UIUserNotificationType types =
        UIUserNotificationTypeBadge/*
         UIUserNotificationTypeSound|
         UIUserNotificationTypeAlert*/;
        
        UIUserNotificationSettings *settings 
                               = [UIUserNotificationSettings settingsForTypes:types 
                                                                   categories:nil];
        
        [application registerUserNotificationSettings:settings];
    }
    /*
    else if( majorVersion == 8 )
    { // 本来は必要だと思うけど
        [application registerForRemoteNotificationTypes:
         UIRemoteNotificationTypeBadge|
         UIRemoteNotificationTypeAlert|
         UIRemoteNotificationTypeSound];
    }
    */
    else 
    {
        // no operation
    }
    
    return YES;
}

swiftはあまり詳しくないのでこの辺を参照してください。
OS確認
http://qiita.com/ryokosuge/items/4045c4f29e40c064e70b
http://hogehuga.com/post-149/
認証処理
http://dev.classmethod.jp/references/ios-8-uilocalnotification-auth/


registerUserNotificationSettingsを呼び出したタイミングで認証の許可を求めるダイアログが出てきます。
最初に許可しなかった場合は設定 → アプリ名 → 通知から許可してもらう必要があります。
アプリ側から設定画面を開くことも出来るようです。(ただしiOS8以降)
http://qiita.com/Night___/items/3d689d657ee691d2cabe


ちょこっとバッジ表示するだけのつもりだったのにここまで調べる必要があるとは......。

2015年12月7日月曜日