Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 远程通知负载为空_Ios_Objective C_Apple Push Notifications - Fatal编程技术网

Ios 远程通知负载为空

Ios 远程通知负载为空,ios,objective-c,apple-push-notifications,Ios,Objective C,Apple Push Notifications,我正在尝试将推送通知集成到我的应用程序中。当应用程序当前运行时,我可以处理远程通知,但当应用程序当前未运行时,我会尝试使用 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions 但是,似乎每当我单击通知警报并启动应用程序时,我的通知负载为空 我使用了NSLog来记录有效负载,并显示其为空 有什么理由它是空的吗?我知道我的通知设置

我正在尝试将推送通知集成到我的应用程序中。当应用程序当前运行时,我可以处理远程通知,但当应用程序当前未运行时,我会尝试使用

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
 (NSDictionary *)launchOptions
但是,似乎每当我单击通知警报并启动应用程序时,我的通知负载为空

我使用了
NSLog
来记录有效负载,并显示其为空

有什么理由它是空的吗?我知道我的通知设置正确,因为它们在应用程序中工作,但由于某些原因,我无法理解这一点。我还记录了launchOptions及其显示为null

这是在我的
didfishlaunchingwithoptions
方法中:

NSDictionary *notificationPayload = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey];
NSLog(@"launch options: %@", launchOptions);
NSLog(@"payload: %@", notificationPayload);

如果您想查看有效负载信息,请使用以下通知委托方法。并确保在收到通知时已从通知中心启动应用程序,然后仅此方法调用

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    NSLog(@"userInfo: %@", userInfo);


    NSDictionary *dict=[userInfo objectForKey:@"aps"];
    NSString *strPushMessege=[dict objectForKey:@"alert"];
    NSLog(@"strPushMessege %@",strPushMessege);
}

几年前我写了一篇关于这一点的博客文章,从那以后,在Xcode中设置它的位置发生了变化

但这里的博客帖子只是以防万一,为一些背景信息

现在,为了调试推送通知,您需要编辑方案

您可以在“管理方案”中更改目标的启动设置,以等待手动启动.app,这允许您通过在
应用程序:didFinishLaunchingWithOptions:
中设置断点进行调试,并发送推送通知以触发应用程序的启动

application:didReceivereMotentification:
是在应用程序当前处于活动状态或进入前台时调用的委托方法

彻底测试这三种场景(从启动、从后台、在活动时)非常重要

在第二种方法中,您可以使用

[应用程序状态]==UIApplicationStateActive


并相应地处理推送通知。

此方法仅当应用程序位于前台时才会触发。如果您单击通知,此方法将始终调用。您可以查看所有有效负载信息。从Apple文档:如果应用程序正在运行并收到远程通知,则应用程序将调用此方法来处理通知。此方法的实现应该使用通知来采取适当的行动。例如,您可以将其用作连接到服务器并下载等待应用程序的数据的信号。是的,我知道这一点,但他在问题中提到,如果他点击通知,他会得到空的NSLog信息。因此,要查看有效负载信息,这可能是一个好方法,您可以查看您的所有有效负载信息。我已经提到,每当您点击通知,此方法将调用。尝试点击应用程序图标,例如,当收到通知时,此方法将不适用于firedAre您是否可以点击通知警报或应用程序图标?如果是最后一种情况,则不会使用此方法working@nerowolfe点击警报,而不是应用程序图标。