isRegisteredForRemoteNotifications使用semaphore_wait_trap锁定UI

问题描述 投票:1回答:2

当我的iOS应用程序收到推送通知时,会发生奇怪的情况。用户界面保持锁定,无效。当我暂停调试器时,我在我的线程中看到了semaphore_wait_trap

调试代码我可以看到它与两件事有关:

  • 推送通知中的值类型(因为当我将Number更改为String时,问题消失);
  • 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

感谢您的任何帮助!

ios push-notification locking hang
2个回答
1
投票

我也在处理这个问题,并在我的设备日志中发现了这个错误:

com.apple.usernotifications.usernotificationservice:解码收到的消息,丢弃传入消息时捕获异常。异常:解码参数0时的异常(调用的#2):异常:键'NS.objects'的值是意外的类'NSNumber'。允许的类是'{(NSString,NSArray)}'。

在调用isRegisteredForRemoteNotifications之后,应用程序已停止。

我们在服务器上修复了这个问题,问题就解决了。祝好运。


0
投票

我遇到了同样的失速问题。

事实证明,我也在控制台上获得了推送通知解析错误(如上面提到的@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)并追溯了给我解析错误的参数。

希望这可以帮助!

© www.soinside.com 2019 - 2024. All rights reserved.