

現在開発中のアプリでプッシュ通知、通知センターにて通知されるデバイスとされないデバイスがあります。  
以下がテストした条件ですが、考えられる原因を教えて頂けると助かります。  
断定できなくとも可能性として考えられる原因でめ結構です。

通知の仕組み  
①ユーザーが時間を設定  
②サイレントプッシュを通知  
③アプリ側からサーバーにアクセスして更新情報を取得  
④更新情報をプッシュ通知、通知センターへ表示

通知について

アプリ起動時（フォアグランド）  
iphone 6 ◯  
iphone 6- 2 ◯  
iphone 6-3 ◯  
iphone6s ◯  
iphone7 ×  
iphone7 ×

アプリ終了（バックグランド）  
iphone 6 ◯  
iphone 6- 2 ×  
iphone 6-3 ×  
iphone6s ◯  
iphone7 ×  
iphone7 ×

iphoneスリープ（バックグランド）  
iphone 6 ◯  
iphone 6- 2 ×  
iphone 6-3 ×  
iphone6s ◯  
iphone7 ×  
iphone7 ×

バージョン  
iphone 6 10.3.1  
iphone 6- 2 10.3.1  
iphone 6-3 10.2.1  
iphone6s 10.3.1  
iphone7 10.3.1  
iphone7 10.3.1

その他の条件  
全て通知設定はオンになっています  
testflightよりインストール  
合計6台にインストール  
iphone6は3台  
4G回線、wifi環境ともに結果は同じ


CC BY-SA 3.0
2017-05-08T14:03:08.993
34556
2023-11-08T18:09:01.123
23025
question
ios
iosアプリプッシュ通知されるデバイスとされないデバイス


ご返信ありがとうございます。  
細かく指示を頂けましたので原因を見つける手掛かりとなりそうで大変感謝いたします。  
まずはサーバーのログを取るようにして原因を特定してみたいと思います。

そしてこの問題に対してこのようなコードを作成したのですがどう思いますか？

[code]

    if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_9_x_Max) {
            UIUserNotificationType allNotificationTypes =
            (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
            UIUserNotificationSettings *settings =
            [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil];
            [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
        } else {
            // iOS 10 or later
    
            UNAuthorizationOptions authOptions =
            UNAuthorizationOptionAlert
            | UNAuthorizationOptionSound
            | UNAuthorizationOptionBadge;
            [[UNUserNotificationCenter currentNotificationCenter]
             requestAuthorizationWithOptions:authOptions
             completionHandler:^(BOOL granted, NSError * _Nullable error) {
             }
             ];
    
            // For iOS 10 display notification (sent via APNS)
            [[UNUserNotificationCenter currentNotificationCenter] setDelegate:self];
            // For iOS 10 data message (sent via FCM)
    
        }
    
        [[UIApplication sharedApplication] registerForRemoteNotifications];
    
[/code]


CC BY-SA 4.0
2017-05-09T16:52:14.360
34592
2018-09-21T05:10:11.310
2018-09-21T05:10:11.310
23025
34556
answer


1点指摘するとすれば、 `registerForRemoteNotifications`の実行位置でしょうか。

[code]

    if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_9_x_Max) {
        // iOS9以下
        UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert;
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:types categories:nil];
        [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
        [[UIApplication sharedApplication] registerForRemoteNotifications];
    } else {
        // iOS10以上
        UNAuthorizationOptions options = UNAuthorizationOptionAlert | UNAuthorizationOptionBadge | UNAuthorizationOptionSound;
        [[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:options completionHandler:^(BOOL granted, NSError * _Nullable error) {
            if (granted) {
                // 通知が許可された or されている場合
                [[UIApplication sharedApplication] registerForRemoteNotifications];
            }
        }];
        [[UNUserNotificationCenter currentNotificationCenter] setDelegate:self];
    }
    
[/code]

iOS10以降は`requestAuthoricationWithOptions`を実行して、ユーザに通知許可アラートを表示するようになっています。  
この結果が`granted`に入ってくるので、ユーザが明示的に通知許可した場合のみ`registerForRemoteNotifications`を実行しましょう。


CC BY-SA 3.0
2017-05-13T15:16:15.497
34683
2017-05-13T15:16:15.497
8968
34556
answer