Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在后台接收静默推送时无法向Alamofire发出请求_Ios_Swift_Alamofire - Fatal编程技术网

Ios 在后台接收静默推送时无法向Alamofire发出请求

Ios 在后台接收静默推送时无法向Alamofire发出请求,ios,swift,alamofire,Ios,Swift,Alamofire,当某些事件发生时,我们的后端会无声推送我们的应用程序。收到静默推送后,应用程序应该向服务器发出API调用,以便用户稍后打开应用程序时,可以看到更新的内容。应用程序收到静默推送通知,但Alamofire没有向我们的后端发出请求。下面是我对AppDelegate方法的实现,该方法在收到静默推送时被调用(代码经过了一些修改,以使其更易于阅读): self.alamoFireManager的设置如下: let configuration = URLSessionConfiguration.default

当某些事件发生时,我们的后端会无声推送我们的应用程序。收到静默推送后,应用程序应该向服务器发出API调用,以便用户稍后打开应用程序时,可以看到更新的内容。应用程序收到静默推送通知,但Alamofire没有向我们的后端发出请求。下面是我对AppDelegate方法的实现,该方法在收到静默推送时被调用(代码经过了一些修改,以使其更易于阅读):

self.alamoFireManager的设置如下:

let configuration = URLSessionConfiguration.default
configuration.timeoutIntervalForRequest = timeout
configuration.timeoutIntervalForResource = timeout

self.alamoFireManager = Alamofire.SessionManager(configuration: configuration)
这就是它变得奇怪的地方。当我从Xcode启动应用程序并将其置于后台并从服务器向应用程序发送推送时,应用程序会收到推送通知并向服务器发出必要的请求。当我关闭应用程序并在设备上正常启动应用程序(不是通过Xcode)并触发推送时,应用程序从不发出请求。我无法确定是推送未到达,还是AF未发出请求,但推送通知配置正确(内容可用值为1),并且调试器中调用了相应的委托方法,因此我认为是AF未发出请求。我还将URLSessionConfiguration更改为后台会话,如下所示:

let configuration = URLSessionConfiguration.background(withIdentifier: "someIdentifier")
此更改对应用程序的行为没有明显影响。我做错了什么?Alamofire是否不支持在应用程序处于后台时发出请求(使用request())?我必须直接使用NSURLSession吗?这是我第一次处理任何静默推送触发的后台请求。非常感谢您的帮助,谢谢

问候
Chris

您是否为您的应用程序目标设置了适当的背景模式?您需要设置它们,以便系统在后台启动/唤醒您的应用程序以响应推送通知:

一般来说,在测试后台行为时不应该依赖调试器,因为它可以防止iOS挂起应用程序。尽管如此,当它正常运行时(没有调试器),它将被挂起,并将导致像您所经历的那样的混乱

如上所述,调试器可防止应用程序挂起


在使用DidReceiveMemoteNotification方法发布本地通知后,我注意到该通知仅在从Xcode启动应用程序时发布。当直接从设备启动应用程序时,应用程序从未发布本地通知。这让我相信我的应用程序实际上并没有被推送通知唤醒。因此,目前这与Alamofire无关,因此我将结束此问题。

感谢您的回答。是,后台模式已启用。但是,我尝试在调用我的应用程序委托的DidReceiveMemoteNotification方法时发布本地通知,现在我可以看到,通过调试器启动时会发布通知,而在调试器外部启动时不会发布通知。因此,我的应用程序没有从后台唤醒似乎有问题……请注意,本地通知无法通过设计唤醒您的应用程序!只有远程通知可以。您应该使用远程通知测试您的应用程序,例如通过
apn
工具:在使用Mac的控制台应用程序分析我的iOS设备上的APNS日志后,我发现推送通知到达iOS设备,但应用程序的后台应用程序刷新已被禁用。在iOS设置应用程序中检查应用程序的设置后,我看到后台应用程序刷新开关已设置为关闭。重新启用后,我开始接收通知。我想我应该先检查一下,但至少我学会了通过mac的控制台应用程序查看APNS日志。您甚至可以使用os.log从应用程序登录到它!你找到了什么替代方案或解决方案?
let configuration = URLSessionConfiguration.background(withIdentifier: "someIdentifier")