相关疑难解决方法(0)

如果用户强行退出,iOS会将我的应用程序启动到后台吗?

我通过content-available在推送通知上使用标志来触发后台获取.我有fetchremote-notification UIBackgroundModes启用.

这是我在AppDelegate.m中使用的实现:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
    NSLog(@"Remote Notification Recieved");
    UILocalNotification *notification = [[UILocalNotification alloc] init];
    notification.alertBody =  @"Looks like i got a notification - fetch thingy";
    [application presentLocalNotificationNow:notification];
    completionHandler(UIBackgroundFetchResultNewData);

}
Run Code Online (Sandbox Code Playgroud)

当应用程序在后台运行时,它可以正常工作.(收到通知,应用程序触发"看起来像我收到通知"本地通知,因为上面的代码应该这样做).

但是,当应用程序未运行并且收到带有content-available标志的推送通知时,应用程序不会启动,并且didRecieveRemoteNotification永远不会调用委托方法.

WWDC视频最新的多任务处理(来自WWDC 2013的#204)显示了这一点:在此输入图像描述

它表示当收到带有content-available标志的推送通知时,应用程序将"启动到后台" .

为什么我的应用程序没有启动到后台?

所以真正的问题是:

用户强行退出应用后,iOS会执行后台任务吗?

push-notification apple-push-notifications ios ios7

217
推荐指数
4
解决办法
12万
查看次数

仅在设备正在充电和/或应用程序是前台时才会发送静音推送通知

我已经实现了静默推送通知,但我注意到了一些奇怪的行为.静默推送通知通过以下方式处理:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
Run Code Online (Sandbox Code Playgroud)

如果设备正在充电(即连接电缆)和/或我的应用程序是前台,则似乎只接收静音推送消息.

如果我断开设备与充电器(或Mac)的连接,则除非应用程序是前台,否则不再接收静音推送通知.

在这两种情况下,我都会得到非静音推送通知.

如果我再次插入USB电缆,那么无论应用程序是前景还是后台,我都会收到预期的行为并收到静音推送通知.

我正在使用UILocalNotification,所以我知道收到了什么.

连接设备一切正常的事实表明我的静音推送通知配置正确,并且应用程序具有在plist中设置的正确背景模式等.

在iPhone 5s,6和iPad 2上都可以重复此行为,所有这些都运行IOS 8或8.1.

还有其他人经历过这个吗?它应该很容易重现.为什么将设备插入充电器的简单行为会改变接收静音推送通知的能力?

iphone background apple-push-notifications ios silent-notification

56
推荐指数
4
解决办法
3万
查看次数

iOS中的远程通知和静默通知有什么区别?

当我阅读Apple Docs时,他们提到了3种类型的通知:本地,远程和静默.

可以从应用程序本地发送的名称推断本地通知.

但是,其他两种类型的区别是什么?

push-notification apple-push-notifications ios remote-notifications silent-notification

41
推荐指数
2
解决办法
2万
查看次数

由于Firebase手机验证而导致App Store拒绝

我们的应用使用Firebase手机验证.由于需要推送,App Store审核已拒绝该应用:

准则4.5.4 - 设计 - Apple站点和服务

我们注意到您的应用需要推送通知才能运行.

具体来说,我们注意到如果我们的设备上未启用"推送通知"设置,则在应用程序中输入我们的电话号码后会收到错误消息.

下一步

推送通知必须是可选的,并且必须获得用户同意才能在应用中使用.

他们还附上了描述Firebase错误的屏幕截图"需要为应用程序设置远程通知和后台提取[...]"

Firebase文档指出,电话验证功能绝对需要APN通知:https:
//firebase.google.com/docs/auth/ios/phone-auth

要使用电话号码身份验证,您的应用必须能够从Firebase接收APN通知.当您首次在设备上使用电话号码登录用户时,Firebase身份验证会向设备发送静音推送通知,以验证电话号码登录请求是否来自您的应用.(因此,电话号码登录无法在模拟器上使用.)

但是,App Store审核指南规定,为了使应用程序正常运行,不得要求推送通知:https://developer.apple.com/app-store/review/guidelines/

4.5.4应用程序无需推送通知即可运行,不得用于广告,促销或直接营销目的,也不得用于发送敏感的个人或机密信息.

用户需要在他们可以使用该应用程序之前登录(该应用程序是关于向您的客人发送数字GIF邀请并共享照片),这就是为什么推送通知基本上是应用程序运行所必需的,如果登录方法是Firebase手机AUTH.

我们已经对应用程序进行了大量测试,并且在启用推送通知时,身份验证可以顺利运行(在真实设备上,在分发Ad Hoc构建中使用生产环境和使用沙箱环境进行开发构建).

想想看,App Review团队甚至如何禁用推送通知?通知中心设置不会停止实际推送,它只是不显示它们. 设置已关闭 我们已经通过此设置进行了测试,并且firebase phone auth工作正常,推送仍然按预期进行.

我对这个问题感到非常惊讶,因为Firebase是一个巨大的服务提供商.有没有人遇到过这个问题?是否有计划删除APN对电话验证的要求?是否可能有其他方式使用Firebase手机auth而不推?

app-store apple-push-notifications ios firebase firebase-analytics

15
推荐指数
2
解决办法
4093
查看次数

iOS推送通知和远程通知之间的区别?

在应用程序功能下的Xcode中,有一个选项可以打开“推送通知”。在“后台模式”下,还有一个选项可以打开“远程通知”。有什么不同?优点缺点?

我是否仍为远程通知设置推送证书?

xcode apple-push-notifications ios remote-notifications

5
推荐指数
1
解决办法
1410
查看次数