Objective-C IOS 7推送通知在应用程序未运行时保存数据?

时间:2014-08-23 08:04:07

标签: ios objective-c iphone

我用推送通知设置创建了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屏幕上的应用程序图标打开应用程序,此操作我无法获取任何数据显示在应用程序中。< / LI>

请帮忙

2 个答案:

答案 0 :(得分:3)

如果您的应用未运行且用户点击了推送通知以打开它,您可以使用application:didFinishLaunchingWithOptions方法获取有关此通知的数据。

根据Apple Documentation

  

如果您的应用不是最前端或未运行,则可以通过检查传递给应用代表的application:didFinishLaunchingWithOptions:的选项字典来处理通知,以获取UIApplicationLaunchOptionsLocalNotificationKeyUIApplicationLaunchOptionsRemoteNotificationKey密钥。

但是,如果收到通知时应用未运行且点击此通知从未打开该应用,则您 将无法获取其数据。

除了推送通知只是(参见下面的注释)这一事实,我们应该总是有另一种方法来获取信息(就像Chetan所说的那样)。所以绝不仅仅依靠推送

  

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

答案 1 :(得分:0)

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

因此,当您将内容可用设置为 1 并发送通知时,即使应用不在后台或前台,iOS也会调用以下功能(必须具有启用远程通知)

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

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