didRegisterForRemoteNotificationsWithDeviceToken没有在ios8中调用,但是didRegister ...设置是

时间:2015-01-24 17:57:44

标签: ios objective-c apple-push-notifications

我关注了this thread,但仍未调用方法didRegisterForRemoteNotificationsWithDeviceToken

文件说:

  

调用registerForRemoteNotifications方法之后   UIApplication对象,应用程序在设备时调用此方法   注册成功完成

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中的远程通知。

19 个答案:

答案 0 :(得分:27)

经过长时间的挖掘,我发现在 2016年7月19日由于Apple的一些错误或更新结束,即使每个条件都像Internet连接一样,也不会调用didRegisterForRemoteNotificationsWithDeviceToken方法,设备和使用的方法都很完美。

请参阅此链接以确认https://forums.developer.apple.com/thread/52224

要验证,请查看您的其他应用。 我浪费了几个小时,但希望它有所帮助。 感谢。

答案 1 :(得分:24)

2016年7月19日: -

根据Apple Developer form,有一个关于Sandbox APNS向下的问题...因此苹果方面可能存在问题,这就是为什么像application:didRegisterForRemoteNotificationsWithDeviceToken:application:didFailToRegisterForRemoteNotificationsWithError:这样的代表是没有叫..

检查APNS Sandbox this link的当前状态... 到现在根据状态APNS Sandbox工作正常并且正常...所以可能还有其他一些来自苹果方面的错误

因此,如果您的方法完美且证书有效,请不要担心。这只是Apple方面的一个问题..一旦问题解决了,你的方法就能完美运行(如果你身边的一切都很好)。

请注意,生产工作正常..所以问题仅涉及Sandbox APNS。

答案 2 :(得分:17)

您的代码似乎是正确的。作为一个小改进,您可以编写didRegisterUserNotificationSettings方法,如下所示:

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

可能存在导致APN注册失败的配置问题。

  1. 确保您的配置文件包含aps-environment条目

  2. 确保您的配置文件中设置了唯一的应用标识符(不带任何“*”的字符串)。您还应该在Info.plist

  3. 中将此确切标识符用作“Bundle identifier”
  4. 也许您在初始安装后拒绝了推送功能 - 在这种情况下,您将永远不会再看到应用内推送警报,并且必须再次在设置应用中启用推送。

  5. 尝试其他设备。

答案 3 :(得分:13)

我遇到了这个问题,最后在Apple Developer网站上找到了这个问题并解决了这个问题:

Registering, Scheduling, and Handling User Notifications

iOS注意:"注册远程通知:

  

iOS注意:如果蜂窝或Wi-Fi连接不可用,则应用程序:didRegisterForRemoteNotificationsWithDeviceToken:方法和应用程序:didFailToRegisterForRemoteNotificationsWithError:方法都不会被调用。对于Wi-Fi连接,当设备无法通过端口5223与APN连接时,有时会发生这种情况。如果发生这种情况,用户可以移动到另一个未阻止此端口的Wi-Fi网络,或者在iPhone或iPad上等待直到蜂窝数据服务可用。在任何一种情况下,设备都应该能够建立连接,然后调用其中一个委托方法。

我的iPhone只与Wifi连接,重新启动iPhone并重新连接到WiFi AP解决了这个问题。

答案 4 :(得分:8)

在使自己发疯之前:

  • 首先尝试重新启动设备

尤其是从生产环境迁移到开发APNS环境后,反之亦然。

答案 5 :(得分:7)

XCode 8.3.1以后

尝试完所有上述选项后,如果仍未调用委托方法,请确保在项目中

under 'Capabilities', (next to General), 
 - Push Notifications option is turned ON`
- and under Background Modes, Remote Notifications is turned ON

答案 6 :(得分:4)

奇怪的解决方案,但对我有用。 尝试了几个小时后,我只是从设备设置应用程序中关闭并打开了wifi,它才起作用。

答案 7 :(得分:3)

羞辱我!! O忘记了最基本的步骤:

enter image description here

在完成所有证书后,处理来自此处的资料说明:https://www.pluralsight.com/guides/swift/creating-ios-rich-push-notifications

发送推送通知的工具是:https://github.com/noodlewerk/NWPusher

愿部队与你在一起!

答案 8 :(得分:2)

在Xcode 12上,首次向应用程序添加推送通知时,您可能必须这样做:

  • 转到项目-> YourTarget->签名和功能

在该屏幕上,点击左上角的“ +功能”按钮(很难注意到)

enter image description here

“库”功能将打开:

enter image description here

选择并添加推送通知:

enter image description here

您可能还需要选中“后台”模式下的“远程通知”框。

enter image description here

最后,像其他提到的一样,确保用于开发和分发的供应配置文件是最新的,并在功能列表中包括“推送通知”。

enter image description here

答案 9 :(得分:2)

在我看来,这是因为我通过Charles代理了所有设备流量。删除该错误,并给了我didRegister回调。

答案 10 :(得分:2)

好的,伙计们,我已经连续花了11个小时调试这个东西,所以希望这个答案对某人有帮助。

如果您在类似主题中所说的一切都正确设置,并且已集成Google Firebase分析,并且 didRegisterForRemoteNotificationsWithDeviceToken 方法仍未调用,这可能是因为默认情况下该方法在Google Firebase中已混乱。 出于某些奇怪的原因,FIR在将您的令牌发送给Google后不会返回原始方法。要对其进行修复,请设置

    FirebaseAppDelegateProxyEnabled to NO (BOOL)

在您的Info.plist中。

答案 11 :(得分:2)

就我而言,在iOS 9.3之后我相信。如果我使用Localytics,则不会调用didRegisterForRemoteNotificationsWithDeviceToken。我必须从我的代码中删除它(在ApplicationDidFinishLaunchingWithOption中)  [Localytics autoIntegrate:@" xxxxx" launchOptions:launchOptions];

答案 12 :(得分:1)

对我来说,它正在模拟器上运行该应用程序。不会为模拟器生成推送令牌,因此我输入的是didFailToRegisterForRemoteNotificationsWithError而不是didRegisterForRemoteNotificationsWithDeviceToken

答案 13 :(得分:1)

对于 IOS 13

当我连接到wifi网络时, <div class="row"> <div class="col-md-8 col-md-offset-2"> <h1>User Profile</h1> <hr> <h2>My Oders</h2> @foreach($orders as $order) <div class="panel panel-default"> <div class="panel-body"> <ul class="list-group"> @foreach($order->cart->items as $product) <li class="list-group-item"> <span class="badge">{{$product['product_price']}} </span> {{$product['item']['product_name']}} | {{$product['qty']}} Units </li> @endforeach </ul> </div> <div class="panel-footer"> <strong>Total Price : {{$order->cart->totalPrice}}</strong> </div> </div> @endforeach </div> 根本没有触发。我做了很多尝试来解决此问题,但未能解决。最后,我将网络从wifi更改为蜂窝数据,然后突然又开始工作了。我什至改回了旧的wifi网络,而且没有问题。

答案 14 :(得分:1)

我解决了连接蜂窝模式的问题。

我仅测试了两个连接iPhone的蜂窝电话,一个iPhone和一个iPad的Wi​​-Fi。

有时连接wifi的设备可以工作,但有时却不行。连接蜂窝电话后效果很好。

Apple's official doc

答案 15 :(得分:0)

请添加以下代码,它适合我,

 #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 

有关详细信息,请参阅Details Answer

希望这对某些人有帮助。

答案 16 :(得分:0)

我不确定,只是预感。这对我来说发生了两次。我正在启动该应用程序,然后立即为其设置背景!

解决方法是将应用保持在前台状态一会儿,直到获得回调。

答案 17 :(得分:0)

您可能需要一张SIM卡才能激活iPhone,否则您将永远不会收到通知回叫。

答案 18 :(得分:0)

在我的情况下,配置文件无效。重新启用配置文件可以解决问题