当我的iOS应用程序收到推送通知时,会发生奇怪的情况。用户界面保持锁定,无效。当我暂停调试器时,我在我的线程中看到了semaphore_wait_trap
。
调试代码我可以看到它与两件事有关:
isRegisteredForRemoteNotifications
方法(因为当我删除它时问题消失了);我收到推送通知如下
{aps:
{alert: { loc-args: [Fiat, Bravo, 501],
loc-key: SOME_TEXT
},
badge: 0,
sound: default.aiff
}
}
我在Xcode中创建了一个新的简单项目来证明我在说什么。我正在使用以前的包标识符来接收相同的推送。按照AppDelegate中显示问题的代码:
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
return YES;
}
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
NSLog(@"My token is: %@", deviceToken);
}
- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error {
// [DefaultMethods saveInUserDefaults:@(1) forKey:kUserWasAskedForNotificationKey];
NSLog(@"Failed to get token, error: %@", error);
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
if( [[UIApplication sharedApplication] isRegisteredForRemoteNotifications] ){
NSLog(@"Success");
}
}
@end
感谢您的任何帮助!
我也在处理这个问题,并在我的设备日志中发现了这个错误:
com.apple.usernotifications.usernotificationservice:解码收到的消息,丢弃传入消息时捕获异常。异常:解码参数0时的异常(调用的#2):异常:键'NS.objects'的值是意外的类'NSNumber'。允许的类是'{(NSString,NSArray)}'。
在调用isRegisteredForRemoteNotifications之后,应用程序已停止。
我们在服务器上修复了这个问题,问题就解决了。祝好运。
我遇到了同样的失速问题。
事实证明,我也在控制台上获得了推送通知解析错误(如上面提到的@CFIFOK)。
“NSXPCConnection:---”与名为com.apple.usernotifications.usernotificationservice的服务的连接:在解码收到的消息,丢弃传入消息时捕获异常。异常:解码参数0时的异常(调用的#2):异常:键'NS.objects'的值是意外的类'NSNumber'。允许的类是'{(NSString,NSArray)}'。
这是因为"title-loc-args" : [3333]
不接受3333字面意思,但接受它作为字符串"title-loc-args" : ["3333"]
。在我访问提到的方法isRegisteredForRemoteNotifications
之后,这个小东西使我的整个界面失速。
需要考虑的一件事是,这个摊位只发生在iOS 11上。它在iOS 12.0(16A5366a)上运行得非常好。
为了调试错误我使用了Pusher app(https://github.com/noodlewerk/NWPusher)并追溯了给我解析错误的参数。
希望这可以帮助!