【问题标题】:Objective-C IOS 7 push notification save data when app not running?应用程序未运行时Objective-C IOS 7推送通知保存数据?
【发布时间】:2014-08-23 08:04:06
【问题描述】:

我创建了一个推送通知设置的ios应用程序,每个人都可以在我的应用程序中与其他人聊天,我会解决一些问题:

1) 已解决:当应用程序未处于活动状态但仍在后台运行(未全部退出)时,我可以处理推送通知并保存到数据库(SQLite)代码:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    //some code here
}

2) 已解决:当用户完成退出我的应用程序时,新消息传入并且用户点击通知气球,用户可以阅读新消息,为此我将使用此代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    /* this code working when application not running */
    NSDictionary *remoteNotif = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];
    if(remoteNotif)
    {
        [self handleRemoteNotification:application userInfo:remoteNotif];
        return YES;
    }
    return YES;
}

3 未解决,我的问题需要帮助

  • 当用户完成退出我的应用程序时,新消息传入但用户未触摸通知栏,用户通过触摸 iphone 屏幕上的应用程序图标打开应用程序,此操作我无法获取任何数据以显示在应用程序中。

请帮忙

【问题讨论】:

  • 当通知丢失时,您将不得不通过服务器通过编写一个 api 来处理它,该 api 将获取所有通知,如 facebook、whats 应用程序
  • @Chetan 投票 +1 谢谢!

标签: ios objective-c iphone


【解决方案1】:

如果您的应用未运行并且用户单击推送通知将其打开,您可以在 application:didFinishLaunchingWithOptions 方法中获取有关此通知的数据。

根据Apple Documentation:

如果您的应用不在最前端或未运行,您可以通过检查传递给应用委托的application:didFinishLaunchingWithOptions: 的选项字典中的UIApplicationLaunchOptionsLocalNotificationKey 或UIApplicationLaunchOptionsRemoteNotificationKey 键来处理通知。

但是,如果在收到通知时应用程序没有运行,并且从未通过单击此通知打开应用程序,则您将不会获取其数据。

加上推送通知只是尽力而为的事实(见下面的注释)告诉我们应该总是有另一种方法来获取信息(就像Chetan 所说的那样)。所以永远不要只依赖推送。

重要提示:发送通知是“尽力而为”,不能保证。它不是为了向您的应用提供数据,只是为了通知用户有新数据可用。

【讨论】:

  • 没错。 APNs 不是一个消息系统,它是一个通知系统。一个常见的错误是尝试使用通知来传递消息数据。正确的做法是通知您的服务上有消息数据。
  • 我早就应该接受你的回答了,对不起xD
【解决方案2】:

如果仍未解决,请回答您的 3 个项目符号。在 iOS 7.0 及更高版本中,您可以发送通知并访问其内容,而无需用户点击它。 因此,您发送的通知负载有一个名为 content-available 的参数。您可以在以下链接中查看有效负载参数: https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html

所以当你将content available设置为1并传递通知时,即使应用不在后台或前台,iOS也会调用下面的函数(必须有远程通知已启用)

- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler

然后您可以使用 userInfo 字典来获取您的通知数据。

【讨论】:

  • 不,不可能,如果应用程序处于挂起模式,那么你可以,但如果它被强制退出,那么你就无法启动应用程序
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多