收到通知后,我如何才能在应用程序图标点击时获取有效负载?
After Receiving Notification how can i can get payload on app icon click?
我的推送通知在正常情况下工作正常,但我遇到以下情况的问题:
1) 当我的应用程序从后台删除并收到通知并点击应用程序图标时,我想推送视图控制器并在该视图控制器中显示有效负载数据。
2 ) 当我的应用程序在后台并收到通知并点击应用程序图标时,我想推送视图控制器并在该视图控制器中显示有效负载数据。
以下是我的用户信息
{
aps = {
alert = "Call from rohan panchal";
appointmentId = 220;
badge = 0;
"call_token" = "T1==cGFydG5lcl9pZD00NTI1ODY1MiZzaWc9MzM1MmM0M2E2MjkwN2JiYWMzNjgyNjk0MjFlZWMyNWEzNTZmZmM3MjpzZXNzaW9uX2lkPTJfTVg0ME5USTFPRFkxTW41LU1UUTNNREl3TVRBd01qVXdOWDV3WXpCRFMyWTRlR2xhUWpGdU1YbFpNamhvV0hoNFVHTi1VSDQmY3JlYXRlX3RpbWU9MTQ3MDIwMTAwMiZyb2xlPXB1Ymxpc2hlciZub25jZT0xNDcwMjAxMDAyLjUyMDM0NDAzNjQzMjMmZXhwaXJlX3RpbWU9MTQ3MDgwNTgwMg==";
doctorId = 238;
"doctor_country" = US;
"doctor_name" = "John smith";
patientId = 239;
"patient_country" = US;
"patient_name" = "Lottry patel";
sessionId = "2_MX40NTI1ODY1Mn5-MTQ3MDIwMTAwMjUwNX5wYzBDS2Y4eGlaQjFuMXlZMjhoWHh4UGN-UH4";
sound = default;
};
}
遵循我的代码。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// when i remove app from background & click on notification then following code run.
NSDictionary *notificationPayload = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey];
if(notificationPayload)
{
NSLog(@"%@",notificationPayload);
WebViewController *DashBoard = [[WebViewController alloc]initWithNibName:@"WebViewController" bundle:nil];
self.navcntrl=[[UINavigationController alloc]initWithRootViewController:DashBoard];
}
else
{
DoctorMenuViewController *DoctorVC = [[DoctorMenuViewController alloc]initWithNibName:@"DoctorMenuViewController" bundle:nil];
self.navcntrl=[[UINavigationController alloc]initWithRootViewController:DoctorVC];
}
}
当我收到通知后调用了以下方法。
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
NSLog(@"%@",userInfo);
WebViewController *DashBoard = [[WebViewController alloc]initWithNibName:@"WebViewController" bundle:nil];
[self.navcntrl pushViewController:DashBoard animated:YES];
}
请help.Any帮助感谢。
application: didReceiveRemoteNotification:
在 OS 收到 RemoteNotification 且应用程序 运行(在 background/suspended 或前台。)时调用。
和
application:(UIApplication *)application didFinishLaunchingWithOptions
当应用程序不是 运行 并且您单击应用程序图标时调用。
1) 当我的应用程序从后台移除并收到通知并点击应用程序图标时 -
TestViewController *testVC = your_test_vc;
UINavigationController *navVC = [[UINavigationController alloc]initWithRootViewController:testVC];
在 TestViewController 中,您可以推送控制器以显示负载数据。
2) 你写的都是对的。
希望对您有所帮助。
应用程序会在一组特定情况下传送通知数据。如果用户的交互与其中之一不一致,则数据不可用。无一例外。
- 用户点击通知横幅(或警报)。该应用程序是否 运行 并不重要。
- 负载将
content-available
字段设置为真值,和 iOS 选择传递通知。
注意:此答案未解释如何调用或处理任何场景。
userinfo 中的字段值是您需要的
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
UIApplicationState state = [[UIApplication sharedApplication] applicationState];
if (state == UIApplicationStateBackground || state == UIApplicationStateInactive)
{ //notification is received when your app is in background
//open the view controller you expected
}
else if(state == UIApplicationStateActive)
{
//notification is received when your app is in foreground
//do nothing
}
}
推送通知负载包括:
alert - 警报字符串和操作
徽章
声音
可用内容
content-available这个key是一个新特性,正是这个key让静默推送成为可能。
要启用,您还必须按照此处所述将远程通知添加为您的应用程序 UIBackgroundModes。
这是有效负载中包含可用内容时发生的情况:
如果应用被挂起,系统会将其带入后台
如果应用程序被用户终止,则不会发生任何事情,应用程序将保留在 Not 运行
了解应用状态变化。
潜力即陷阱:
您使用 content-available=1 启用。但是,禁用 content-available=0 是错误的。要禁用,您必须删除有效负载中的密钥。
请使用这个
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
if(application.applicationState == UIApplicationStateInactive)
{
NSLog(@"Inactive");
//do your things when you click on notification
}
else if (application.applicationState == UIApplicationStateBackground)
{
NSLog(@"Background");
}
else if (application.applicationState == UIApplicationStateActive)
{
NSLog(@"Active");
}
}
有关更多信息,请阅读此 link http://samwize.com/2015/08/07/how-to-handle-remote-notification-with-background-mode-enabled/
我的推送通知在正常情况下工作正常,但我遇到以下情况的问题:
1) 当我的应用程序从后台删除并收到通知并点击应用程序图标时,我想推送视图控制器并在该视图控制器中显示有效负载数据。
2 ) 当我的应用程序在后台并收到通知并点击应用程序图标时,我想推送视图控制器并在该视图控制器中显示有效负载数据。
以下是我的用户信息
{
aps = {
alert = "Call from rohan panchal";
appointmentId = 220;
badge = 0;
"call_token" = "T1==cGFydG5lcl9pZD00NTI1ODY1MiZzaWc9MzM1MmM0M2E2MjkwN2JiYWMzNjgyNjk0MjFlZWMyNWEzNTZmZmM3MjpzZXNzaW9uX2lkPTJfTVg0ME5USTFPRFkxTW41LU1UUTNNREl3TVRBd01qVXdOWDV3WXpCRFMyWTRlR2xhUWpGdU1YbFpNamhvV0hoNFVHTi1VSDQmY3JlYXRlX3RpbWU9MTQ3MDIwMTAwMiZyb2xlPXB1Ymxpc2hlciZub25jZT0xNDcwMjAxMDAyLjUyMDM0NDAzNjQzMjMmZXhwaXJlX3RpbWU9MTQ3MDgwNTgwMg==";
doctorId = 238;
"doctor_country" = US;
"doctor_name" = "John smith";
patientId = 239;
"patient_country" = US;
"patient_name" = "Lottry patel";
sessionId = "2_MX40NTI1ODY1Mn5-MTQ3MDIwMTAwMjUwNX5wYzBDS2Y4eGlaQjFuMXlZMjhoWHh4UGN-UH4";
sound = default;
};
}
遵循我的代码。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// when i remove app from background & click on notification then following code run.
NSDictionary *notificationPayload = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey];
if(notificationPayload)
{
NSLog(@"%@",notificationPayload);
WebViewController *DashBoard = [[WebViewController alloc]initWithNibName:@"WebViewController" bundle:nil];
self.navcntrl=[[UINavigationController alloc]initWithRootViewController:DashBoard];
}
else
{
DoctorMenuViewController *DoctorVC = [[DoctorMenuViewController alloc]initWithNibName:@"DoctorMenuViewController" bundle:nil];
self.navcntrl=[[UINavigationController alloc]initWithRootViewController:DoctorVC];
}
}
当我收到通知后调用了以下方法。
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
NSLog(@"%@",userInfo);
WebViewController *DashBoard = [[WebViewController alloc]initWithNibName:@"WebViewController" bundle:nil];
[self.navcntrl pushViewController:DashBoard animated:YES];
}
请help.Any帮助感谢。
application: didReceiveRemoteNotification:
在 OS 收到 RemoteNotification 且应用程序 运行(在 background/suspended 或前台。)时调用。
和
application:(UIApplication *)application didFinishLaunchingWithOptions
当应用程序不是 运行 并且您单击应用程序图标时调用。
1) 当我的应用程序从后台移除并收到通知并点击应用程序图标时 -
TestViewController *testVC = your_test_vc;
UINavigationController *navVC = [[UINavigationController alloc]initWithRootViewController:testVC];
在 TestViewController 中,您可以推送控制器以显示负载数据。
2) 你写的都是对的。 希望对您有所帮助。
应用程序会在一组特定情况下传送通知数据。如果用户的交互与其中之一不一致,则数据不可用。无一例外。
- 用户点击通知横幅(或警报)。该应用程序是否 运行 并不重要。
- 负载将
content-available
字段设置为真值,和 iOS 选择传递通知。
注意:此答案未解释如何调用或处理任何场景。
userinfo 中的字段值是您需要的
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
UIApplicationState state = [[UIApplication sharedApplication] applicationState];
if (state == UIApplicationStateBackground || state == UIApplicationStateInactive)
{ //notification is received when your app is in background
//open the view controller you expected
}
else if(state == UIApplicationStateActive)
{
//notification is received when your app is in foreground
//do nothing
}
}
推送通知负载包括:
alert - 警报字符串和操作
徽章
声音
可用内容
content-available这个key是一个新特性,正是这个key让静默推送成为可能。
要启用,您还必须按照此处所述将远程通知添加为您的应用程序 UIBackgroundModes。
这是有效负载中包含可用内容时发生的情况:
如果应用被挂起,系统会将其带入后台
如果应用程序被用户终止,则不会发生任何事情,应用程序将保留在 Not 运行 了解应用状态变化。
潜力即陷阱:
您使用 content-available=1 启用。但是,禁用 content-available=0 是错误的。要禁用,您必须删除有效负载中的密钥。
请使用这个
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
if(application.applicationState == UIApplicationStateInactive)
{
NSLog(@"Inactive");
//do your things when you click on notification
}
else if (application.applicationState == UIApplicationStateBackground)
{
NSLog(@"Background");
}
else if (application.applicationState == UIApplicationStateActive)
{
NSLog(@"Active");
}
}
有关更多信息,请阅读此 link http://samwize.com/2015/08/07/how-to-handle-remote-notification-with-background-mode-enabled/