Objective c 未使用应用程序时的报刊亭套件推送通知如何获取用户信息

Objective c 未使用应用程序时的报刊亭套件推送通知如何获取用户信息,objective-c,ios,push-notification,newsstand-kit,Objective C,Ios,Push Notification,Newsstand Kit,我正在构建一个报摊应用程序,我想在后台下载最新一期。我设置了相应的背景模式键以允许此操作 我将有效负载推送到我的应用程序,例如: {"aps": {"badge": 1,"content-available":"1"}} 但是,如果我的应用程序不在前台,我如何知道推送通知已发送,以便启动后台下载?如果应用程序在前台,我会使用didReceiveMemotentification:,但对于应用程序不在前台或甚至不运行时该怎么办感到困惑 根据文件: 如果应用程序未在前台运行,则 通知已发送,在后台

我正在构建一个
报摊
应用程序,我想在后台下载最新一期。我设置了相应的背景模式键以允许此操作

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

{"aps": {"badge": 1,"content-available":"1"}}
但是,如果我的应用程序不在前台,我如何知道推送通知已发送,以便启动后台下载?如果应用程序在前台,我会使用
didReceiveMemotentification:
,但对于应用程序不在前台或甚至不运行时该怎么办感到困惑

根据文件:

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

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


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

只有当用户响应推送通知启动应用程序(例如,在锁屏上滑动或从通知中心滑动),或者应用程序已经运行时,应用程序才会收到推送通知。此外,推送通知也不能保证交付

更新:

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

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

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

是的,用户可以禁用报摊的推送通知启动的后台下载 设置中的每个应用程序基础。您可以确定是否存在背景 已通过查找禁用你的应用的下载 UIRemoteNotificationTypeNewsstandContentAvailability在 UIC应用程序返回的已启用类型 enabledRemoteNotificationTypes属性

发件人:


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

只有当用户响应推送通知启动应用程序(例如,在锁屏上或从通知中心滑动应用程序)或应用程序已在运行时,您的应用程序才会收到推送通知。此外,推送通知也不能保证交付

更新:

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

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

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

是的,用户可以禁用报摊的推送通知启动的后台下载 设置中的每个应用程序基础。您可以确定是否存在背景 已通过查找禁用你的应用的下载 UIRemoteNotificationTypeNewsstandContentAvailability在 UIC应用程序返回的已启用类型 enabledRemoteNotificationTypes属性

发件人:

这完全可能是因为在测试期间,您全天发送了太多的内容更新

“只有在用户启动时,你的应用才会收到推送通知 响应推送通知的应用程序(例如,在 锁定屏幕或从通知中心),或者如果已经 跑。”

上述声明在报摊通知的情况下是不正确的(内容可用:有效负载中的1)。收到后,iOS在后台启动应用程序(如果未运行),并调用应用程序委托的didFinishLaunchingWithOptions方法。您可以检查launch options dictionary的UIApplicationLaunchActionsRemoteNotificationKey的值,以检查应用程序是否通过通知启动

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];
NKLibrary*nkLib=[NKLibrary sharedLibrary];
NKIssue*NKIssue=[nkLib issueWithName:];
如果(!nkIssue)
nkIssue=[nkLib addIssueWithName:日期:];
NKAssetDownload*nkAssetDownloadGridCover=[nkIssue addAssetWithRequest:];
[nkassedDownloadGridCover downloadWithDelegate:self];
“只有在用户启动时,你的应用才会收到推送通知 响应推送通知的应用程序(例如,在 锁定屏幕或从通知中心),或者如果已经 跑。”

上述声明在报摊通知的情况下是不正确的(内容可用:有效负载中的1)。收到后,iOS在后台启动应用程序(如果未运行),并调用应用程序委托的didFinishLaunchingWithOptions方法。您可以检查launch options dictionary的UIApplicationLaunchActionsRemoteNotificationKey的值,以检查应用程序是否通过通知启动

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方法中,您可以简单地获取托管内容的路径/日期等,并将其添加到报摊队列中。下面是