アプリケーションが実行されている(または再開モードからオンになっている)場合はいつでも、iOSデバイスの「プッシュ通知オプション」をチェックしたい。次のコードを使用して、オプションがオフかどうかを確認します。
-(void)PushNotificationServiceChecking
{
UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
if (types == UIRemoteNotificationTypeNone)
{
NSString *msg = @"Please press ON to enable Push Notification";
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Push Notification Service Disable" message:msg delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"ON", nil];
alert.tag = 2;
[alert show];
}
}
次に、[設定]タブ>> [通知センター]に移動するために次のコードを使用します。これにより、ユーザーは手動で設定できます。
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (alertView.tag == 2)
{
if (buttonIndex == 0)
{
// this is the cancel button
}
else if (buttonIndex == 1)
{
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert)];
}
}
}
しかし、今私が直面している問題は、アプリケーションを起動してから初めて表示される問題です。思い通りに機能します。しかし、その後、「設定」から「プッシュ通知オプション」をオフにすると、「アラートメッセージ」は表示されません。
アプリがregisterForRemoteNotification
に登録された場合、無効にすることも有効にすることもできます。無効にして再登録しようとすると、registerForRemoteNotification
が有効になり、警告のポップアップは表示されません。
テクニカルノートTN2265:プッシュ通知のトラブルシューティング
プッシュ対応アプリがプッシュ通知に初めて登録するとき、iOSはユーザーにそのアプリの通知を受信するかどうかを尋ねます。ユーザーがこのアラートに応答すると、デバイスが復元されるか、アプリが少なくとも1日アンインストールされない限り、再度表示されません。
アプリの初回実行をシミュレートする場合は、アプリを1日アンインストールしたままにしておくことができます。システムクロックを1日以上進め、デバイスの電源を完全にオフにしてから再びオンにすることで、実際に1日待つことなく後者を実現できます。
Fore More Info: [〜#〜] info [〜#〜] && Info 2
Edit:checking with alert enable
-
使用する
if (types & UIRemoteNotificationTypeAlert){}
の代わりに
if (types == UIRemoteNotificationTypeNone){}
編集:iOS 8以降のドキュメント からの最新のアップデート:
- (BOOL)isRegisteredForRemoteNotifications
IOS 8では、以下を使用できます。
[[UIApplication sharedApplication] isRegisteredForRemoteNotifications];
また、設定がどのようにセットアップされているかを確認するには、次のようにします。
[[UIApplication sharedApplication] currentUserNotificationSettings];
それは私のために働いています。このヘルプを願っています! :D
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")){
UIUserNotificationType type = [[[UIApplication sharedApplication] currentUserNotificationSettings] types];
if (type == UIUserNotificationTypeNone){
ALERT_WITH_TITLE(@"", kMessageNotificationTurnOnRequire);
}
}
else {
UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
if (types == UIRemoteNotificationTypeNone) {
ALERT_WITH_TITLE(@"", kMessageNotificationTurnOnRequire);
}
}
NSString *iOSversion = [[UIDevice currentDevice] systemVersion];
NSString *prefix = [[iOSversion componentsSeparatedByString:@"."] firstObject];
float versionVal = [prefix floatValue];
if (versionVal >= 8)
{
if ([[UIApplication sharedApplication] currentUserNotificationSettings].types != UIUserNotificationTypeNone)
{
NSLog(@" Push Notification ON");
}
else
{
NSString *msg = @"Please press ON to enable Push Notification";
UIAlertView *alert_Push = [[UIAlertView alloc] initWithTitle:@"Push Notification Service Disable" message:msg delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Setting", nil];
alert_Push.tag = 2;
[alert_Push show];
NSLog(@" Push Notification OFF");
}
}
else
{
UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
if (types != UIRemoteNotificationTypeNone)
{
NSLog(@" Push Notification ON");
}
else
{
NSString *msg = @"Please press ON to enable Push Notification";
UIAlertView *alert_Push = [[UIAlertView alloc] initWithTitle:@"Push Notification Service Disable" message:msg delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Setting", nil];
alert_Push.tag = 2;
[alert_Push show];
NSLog(@" Push Notification OFF");
}
}