49

私はこのスレッドに従いましたが、メソッドdidRegisterForRemoteNotificationsWithDeviceTokenはまだ呼び出されていません:

ドキュメントには次のように書かれています:

UIApplication オブジェクトの registerForRemoteNotifications メソッドを呼び出した後、デバイスの登録が正常に完了すると、アプリはこのメソッドを呼び出します

didRegisterUserよく見えますが、そうではありませんdid register notif

これがAppDelegateの私のコードです(アプリのバージョンは8.1です):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //register notif
    UIUserNotificationType userNotificationTypes = (UIUserNotificationTypeAlert |
                                                    UIUserNotificationTypeBadge |
                                                    UIUserNotificationTypeSound);
    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:userNotificationTypes categories:nil];
    [application registerUserNotificationSettings:settings];


    return YES;
}

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
    //register to receive notifications
    [application registerForRemoteNotifications];
    NSLog(@"didRegisterUser");
}

-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
    NSLog(@"error here : %@", error);//not called
}

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    /*
    // Store the deviceToken in the current installation and save it to Parse.
    PFInstallation *currentInstallation = [PFInstallation currentInstallation];
    [currentInstallation setDeviceTokenFromData:deviceToken];
    currentInstallation.channels = @[ @"global" ];
    [currentInstallation saveInBackground];
     */
    NSLog(@"did register notif");//not called
}

info.plist にバックグラウンド モード -> リモート通知もあります。

4

19 に答える 19

31

長い調査の結果、2016 年 7 月 19 日に、 Apple 側での何らかのエラーまたは更新により、インターネット接続、デバイス、使用されるメソッドなどのすべての条件が完璧であっても、didRegisterForRemoteNotificationsWithDeviceToken メソッドが呼び出されないことがわかりました。

確認のためにこのリンクを参照してください https://forums.developer.apple.com/thread/52224

確認するには、他のアプリもご覧ください。数時間を無駄にしましたが、誰かの役に立てば幸いです。ありがとう。

于 2016-07-19T09:44:53.273 に答える
28

2016 年 7 月 19 日:-

Apple Developer formによると、Sandbox APNSダウンに関する問題があります。そのため、デリゲートが好きapplication:didRegisterForRemoteNotificationsWithDeviceToken:application:didFailToRegisterForRemoteNotificationsWithError:呼び出されないのは、アップル側からの問題がある可能性があります。

APNS Sandbox の現在のステータスを確認するには、このリンクを使用します... ステータスによると、APNS Sandbox は正常に動作しており、正常です。Apple側からの他のバグがあるかもしれません

したがって、メソッドが完璧で、証明書が有効であるかどうか心配する必要はありません。これは単なる Apple 側の問題であり、問​​題が解決されるとすぐに、メソッドは完全に機能します (すべて問題がなければ)。

本番環境は正常に機能しており、問題はサンドボックス APNS に関するものであることに注意してください。

于 2016-07-19T10:50:39.280 に答える
24

この問題が発生し、最終的に Apple Developer Web サイトでメモを見つけて、この問題を解決しました。

ユーザー通知の登録、スケジューリング、および処理

セクションの iOS メモ:「リモート通知の登録:

iOS 注: セルラー接続または Wi-Fi 接続が利用できない場合、application:didRegisterForRemoteNotificationsWithDeviceToken: メソッドも application:didFailToRegisterForRemoteNotificationsWithError: メソッドも呼び出されません。Wi-Fi 接続の場合、デバイスがポート 5223 経由で APNs に接続できない場合に、これが発生することがあります。これが発生した場合、ユーザーはこのポートをブロックしていない別の Wi-Fi ネットワークに移動するか、iPhone または iPad で待機します。セルラーデータサービスが利用可能になるまで。いずれの場合も、デバイスは接続を確立できる必要があり、委任メソッドの 1 つが呼び出されます。

私のiPhoneはWifiのみに接続し、iPhoneを再起動してWiFi APに再接続すると、この問題は解決しました。

于 2015-12-17T10:18:55.600 に答える
21

あなたのコードは正しいようです。マイナーな改善として、次のように didRegisterUserNotificationSettings メソッドを記述できます。

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
    if (notificationSettings.types != UIUserNotificationTypeNone) {
        NSLog(@"didRegisterUser");
        [application registerForRemoteNotifications];
    }
}

APN 登録の失敗の原因となる構成上の問題がある可能性があります。

  1. プロビジョニング プロファイルに aps-environment エントリが含まれていることを確認します

  2. プロビジョニング プロファイルに一意のアプリ識別子 (「*」を含まない文字列) が設定されていることを確認してください。また、この正確な識別子を Info.plist の「バンドル識別子」として使用する必要があります。

  3. 最初のインストール後にプッシュ機能を拒否した可能性があります。この場合、アプリ内プッシュ アラートは二度と表示されず、設定アプリでプッシュを再度有効にする必要があります。

  4. 別のデバイスを試してください。

于 2015-01-25T13:41:23.120 に答える
4

奇妙な解決策ですが、私にとってはうまくいきました。何時間も試した後、デバイス設定アプリからwifiをオフにしてからオンにするだけで機能しました。

于 2020-02-24T08:32:13.647 に答える
1

以下のコードを追加してください、それは私のために働いています、

 #ifdef __IPHONE_8_0
   - (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
   {
   //register to receive notifications
  [application registerForRemoteNotifications];
  }

    - (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void(^)())completionHandler
  {
  //handle the actions
  if ([identifier isEqualToString:@"declineAction"]){
  }
 else if ([identifier isEqualToString:@"answerAction"]){
  }
 }
 #endif

以下のメソッドでデバイストークンを取得します。

 - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 

詳細については、詳細回答を参照してください。

これが誰かの助けになることを願っています。

于 2017-01-02T12:30:12.347 に答える
0

iPhone をアクティベートするために SIM カードが必要になる場合があります。

于 2020-05-20T11:20:09.660 に答える
0

よくわかりませんが、ただの予感です。これは私に数回起こりました。アプリを起動してすぐにバックグラウンドにしました!

修正は、コールバックを取得するまでの間、アプリをフォアグラウンドに保持することでした。

于 2020-03-04T14:57:55.483 に答える