使用推送通知启动时应用程序崩溃
Posted
技术标签:
【中文标题】使用推送通知启动时应用程序崩溃【英文标题】:App crash when launch with a push notification 【发布时间】:2015-10-14 05:19:01 【问题描述】:我为我的应用集成了推送通知。为了捕捉通知,我使用了这个委托。
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
在我的应用委托中。
所以当应用程序在后台运行时,如果通知来了,当我点击它时,这个委托就会触发。如果应用程序即使在后台也没有运行,如果点击 ntification 然后它会触发
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
到目前为止,它运作良好。然后我想在后台捕捉通知。于是我找到了
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
这对它有用。
所以我只是将我以前的didReceive
方法更改为这个新的didReceive
方法。现在我的问题是当应用程序通过推送通知启动时(如果应用程序没有在后台或前台运行并且当点击通知时)我的应用程序崩溃了。即使我无法调试和捕捉这种情况。
这两个代表之间有什么区别。当应用程序启动并带有通知时,我的第二个代表会触发吗?请帮帮我。
【问题讨论】:
检查一次有效载荷是否正确序列化 我有几种通知类型。如果通知类型是 12,我只需要在后台做一些事情。所以我添加了 'content-available key $body['aps'] = array('alert' => $message, 'sound' => 'default', 'badge' => 1, 'content-available'=>1 );如果我的通知类型是 12 content-available 在所有其他时间变为 0 看看这个答案,可能会有帮助***.com/a/20851481/3743322 【参考方案1】:通常当收到通知时会执行此方法(当应用程序处于活动状态时) - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
但是如果应用程序被系统关闭或杀死然后点击通知首先调用“didFinishLaunchingWithOptions”方法 在这个方法中,我们必须检查应用程序是从通知启动还是重新启动,我们可以使用此代码再次调用“didReceiveRemoteNotification”方法
UILocalNotification *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (notification)
[self application:application didReceiveRemoteNotification:(NSDictionary*)notification];
【讨论】:
我唯一做的就是改变 void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 到 UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^) (UIBackgroundFetchResult))completionHandler 但这使我的应用程序在从通知启动时崩溃。原因是什么?在 didFinishLunch 方法中,我重定向到另一个视图。没有 fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler 部分,它可以正常工作。 解决您的问题的简单方法是,只需将此方法用于通知实现和处理 (void)application:(UIApplication )application didReceiveRemoteNotification:(NSDictionary *)userInfo 并将此代码放在“didFinishLaunchingWithOptions”方法,如果你的应用程序处于活动状态,它会直接进入通知方法,但如果你的应用程序通过单击通知启动,那么代码 [self application:application didReceiveRemoteNotification:(NSDictionary)notification];将控件发送到通知方法以上是关于使用推送通知启动时应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章