的isRegisteredForRemoteNotificati

的isRegisteredForRemoteNotificati

当我的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
    

    感谢您的任何帮助!

    最佳答案

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

    com.apple.usernotifications.usernotificationservice:捕获到异常
    在解码接收到的消息期间,丢弃传入消息。
    异常:解码参数0(调用#2)时发生异常:
    例外:键“NS.objects”的值属于意外类
    “NSNumber”。允许的类别为'{(
    NSString,
    NSArray)}'。

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

    我们已经在服务器上解决了此问题,问题已解决。祝好运。

    09-25 20:36