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