【问题标题】:Newsstand Kit Push Notification while not using app how to get user info不使用应用程序时的报亭工具包推送通知如何获取用户信息
【发布时间】:2012-12-21 03:38:14
【问题描述】:

我正在构建一个Newsstand 应用程序,我想在后台下载最新一期。我设置了适当的后台模式键以允许这样做。

我将有效负载推送到我的应用程序,例如:

{"aps": {"badge": 1,"content-available":"1"}}

但是如果我的应用程序不在前台,我怎么知道推送通知已发送,以便我可以开始后台下载?如果应用程序在前台,我使用didReceiveRemoteNotification:,但对应用程序不在前台或什至没有运行时该怎么办感到困惑。

根据文档:

如果应用程序没有在前台运行时, 通知已传递,它在后台激活(或 如有必要,启动到后台)以下载问题资产。 否则,您将像处理任何推送一样处理通知 通知。请参阅本地和推送通知编程指南 有关如何发送和处理推送通知的信息。

客户端应用程序与其服务器通信并获取 URL 找到要下载的问题资产。它可能还需要获取 来自服务器的问题的名称和日期。在这个阶段可能 还验证用户是否有资格订阅或执行 任何其他所需的授权。

但它从未说明使用哪种方法开始下载。

【问题讨论】:

    标签: objective-c ios push-notification newsstand-kit


    【解决方案1】:

    只有当用户启动应用程序以响应推送通知(例如,在锁定屏幕上或从通知中心滑动),或者如果它已经在运行时,您的应用程序才会收到推送通知。此外,不保证会发送推送通知。

    更新:

    正如您所提到的,对于 Newstand 应用程序,您应该使用 UIRemoteNotificationTypeNewsstandContentAvailability 权限来启用新问题的后台下载。然而,这并非没有它自己的一系列技术挑战:

    "...您的应用只能每 24 次启动一次后台下载 小时。 iOS 将忽略尝试启动后台的通知 在 24 小时内多次下载。”

    和

    用户可以禁用后台下载吗?

    是的,用户可以在 设置中的每个应用程序的基础。可以判断背景是否 通过查找已禁用您的应用程序的下载 UIRemoteNotificationTypeNewsstandContentAvailability 的集合中 UIApplication 返回的启用类型 enabledRemoteNotificationTypes 属性。

    来自:http://developer.apple.com/library/ios/#technotes/tn2280/_index.html

    完全有可能在您的测试期间,您全天发送了太多的内容更新。

    【讨论】:

    • Newsstand Kit 真的是这样吗?我刚刚观看了一个 Apple 开发者视频,它说不要使用 APN 有效负载发送消息。据我所知,使用UIRemoteNotificationTypeNewsstandContentAvailability 应该不会有这个限制。
    • @NicHubbard 我试图更新我的答案是对此的回应。希望这会有所帮助。
    • 但是,我设置了NKDontThrottleNewsstandContentNotifications NSUserDefault,它关闭了 24 小时限制,仅用于开发目的。
    【解决方案2】:

    "只有当用户启动时,您的应用才会收到推送通知 响应推送通知的应用程序(例如,将其滑动到 锁定屏幕或从通知中心),或者如果它已经 正在运行。”

    如果报亭通知(在有效负载中有 content-available:1),上述陈述是不正确的。收到它后,iOS 在后台启动应用程序(如果未运行)并调用应用程序委托的 didFinishLaunchingWithOptions 方法。您可以检查启动选项字典的 UIApplicationLaunchOptionsRemoteNotificationKey 的值,以检查您的应用程序是否通过通知启动。

    NSDictionary *payload = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];    
    
    
        if(payload && [[payload objectForKey:kContentAvailablePush] caseInsensitiveCompare:@"1"] == NSOrderedSame)
        {
            NSLog(@"app launched by Newsstand Remote notification. payload %@", payload);
            [self scheduleNewsStandDownload:payload];        
        }
    

    在方法 scheduleNewsStandDownload 中,您可以简单地获取托管内容的路径/日期等并将其添加到报亭队列中。下面是伪代码。

    NKLibrary *nkLib = [NKLibrary sharedLibrary];
    NKIssue *nkIssue = [nkLib issueWithName:<your content id>];
    if(!nkIssue)
       nkIssue = [nkLib addIssueWithName:<your content id>  date:<your content date>];
    
    
        NKAssetDownload *nkAssetDownloadGridCover = [nkIssue addAssetWithRequest:<urlRequest for the content>];        
        [nkAssetDownloadGridCover downloadWithDelegate:self];
    

    【讨论】:

      猜你喜欢
      • 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
      相关资源
      最近更新 更多