我关注了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中的远程通知。
答案 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注册失败的配置问题。
确保您的配置文件包含aps-environment条目
确保您的配置文件中设置了唯一的应用标识符(不带任何“*”的字符串)。您还应该在Info.plist
也许您在初始安装后拒绝了推送功能 - 在这种情况下,您将永远不会再看到应用内推送警报,并且必须再次在设置应用中启用推送。
尝试其他设备。
答案 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忘记了最基本的步骤:
在完成所有证书后,处理来自此处的资料说明:https://www.pluralsight.com/guides/swift/creating-ios-rich-push-notifications
发送推送通知的工具是:https://github.com/noodlewerk/NWPusher
愿部队与你在一起!
答案 8 :(得分:2)
在Xcode 12上,首次向应用程序添加推送通知时,您可能必须这样做:
在该屏幕上,点击左上角的“ +功能”按钮(很难注意到)
“库”功能将打开:
选择并添加推送通知:
您可能还需要选中“后台”模式下的“远程通知”框。
最后,像其他提到的一样,确保用于开发和分发的供应配置文件是最新的,并在功能列表中包括“推送通知”。
答案 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的设备可以工作,但有时却不行。连接蜂窝电话后效果很好。
答案 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)
在我的情况下,配置文件无效。重新启用配置文件可以解决问题