我正在开发 iOS 应用程序,我正在做后台工作。我通过发送静默通知来唤醒应用程序。代码大部分时间都运行良好。
问题是打电话时app没有唤醒,即使在网络低或网络波动时app也没有唤醒。
我正在做以下事情:
1: Enabled 2 background mode
i) Background fetch.
ii)Remote notification.
2: Sending notification as:
{
aps: {
content-available: 1,
sound: ""
message:"background fetch"
}
}
and
3)
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
UALogFull(@"\n\n BACKGROUND NOTIFICATION \n\n\n");
completionHandler(UIBackgroundFetchResultNewData);
}
我的观察是: 该应用程序没有崩溃。 即使在通话期间有通知(手机已连接 wifi),它也不会记录“背景通知”。
请告诉我如何获得准确度?
最佳答案
我相信仅仅因为您发送静默通知,并不意味着应用程序会立即收到通知。
根据我使用 GSM iPhone 的观察。每当我打电话时,蜂窝数据类型都会掉线,例如LTE -> 3G,3G -> EDGE 等。因此数据网络不可靠。
您还声明它不会在网络波动期间发生,系统已收到通知,它没有传递它以节省电池电量。蜂窝数据连接速度越慢,电池消耗越多。
关于 wifi 上的电话,仍然没有收到静默通知。蜂窝芯片正在运行,同时使用 wifi 会更加耗电。
根据我的理解,静默通知是让设备知道有新数据可用。因为在后台下载所述数据的窗口是一个小窗口,所以在某些情况下可能不适合您描述的示例本质上是原因。
在通话中 -> 蜂窝芯片正在用于语音传输。数据传输是芯片的额外工作,可能会显着影响电池生命周期。
网络波动 -> 系统无法保证稳定的连接以允许下载数据。此外,处于较慢的数据速度区域会给试图找到更强、更稳定的连接频带的蜂窝芯片带来额外的压力。
静默通知允许您的应用向用户呈现新数据,作为用户在切换回您的应用时的好处,他们不必等待新内容那么久。但它不是应用程序功能的重要组成部分。系统还将根据其他因素(例如自上次启动以来的时间)来确定是否传递您的通知。应用程序关闭后过早或关闭后很长时间可能意味着您的应用程序不会获得优先权并且必须等待其他应用程序,
太快了:内容还比较新鲜。 long time:用户不经常使用该应用程序。节省资源。
混合使用此启动模式。如果您在用户更有可能根据之前的模式启动您的应用程序时发送通知,您就更有可能收到通知。
最后引用文档:
Important: Delivery of notifications is a “best effort”, not guaranteed. It is not intended to deliver data to your app, only to notify the user that there is new data available.
关于IOS 远程静默通知在电话/网络波动期间不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26996401/
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识
我目前正在尝试学习RubyonRails和测试框架RSpec。assigns在此RSpec测试中做什么?describe"GETindex"doit"assignsallmymodelas@mymodel"domymodel=Factory(:mymodel)get:indexassigns(:mymodels).shouldeq([mymodel])endend 最佳答案 assigns只是检查您在Controller中设置的实例变量的值。这里检查@mymodels。 关于ruby-o
这段代码似乎创建了一个范围从a到z的数组,但我不明白*的作用。有人可以解释一下吗?[*"a".."z"] 最佳答案 它叫做splatoperator.SplattinganLvalueAmaximumofonelvaluemaybesplattedinwhichcaseitisassignedanArrayconsistingoftheremainingrvaluesthatlackcorrespondinglvalues.Iftherightmostlvalueissplattedthenitconsumesallrvaluesw
是否可以在不实际下载文件的情况下检查文件是否存在?我有这么大的(~40mb)文件,例如:http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm这与ruby不严格相关,但如果发件人可以设置内容长度就好了。RestClient.get"http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm",headers:{"Content-Length"=>100} 最佳答案
你能解释一下吗?我想评估来自两个不同来源的值和计算。一个消息来源为我提供了以下信息(以编程方式):'a=2'第二个来源给了我这个表达式来评估:'a+3'这个有效:a=2eval'a+3'这也有效:eval'a=2;a+3'但我真正需要的是这个,但它不起作用:eval'a=2'eval'a+3'我想了解其中的区别,以及如何使最后一个选项起作用。感谢您的帮助。 最佳答案 您可以创建一个Binding,并将相同的绑定(bind)与每个eval相关联调用:1.9.3p194:008>b=binding=>#1.9.3p194:009>eva
我在这方面尝试了很多URL,在我遇到这个特定的之前,它们似乎都很好:require'rubygems'require'nokogiri'require'open-uri'doc=Nokogiri::HTML(open("http://www.moxyst.com/fashion/men-clothing/underwear.html"))putsdoc这是结果:/Users/macbookair/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/open-uri.rb:353:in`open_http':404NotFound(OpenURI::HT
我构建了一个简单的银行应用程序,它能够执行通常的操作;充值、提现等我的Controller方法执行这些操作并拯救由帐户或其他实体引发的异常。以下是Controller代码中使用的一些方法:defopen(type,with:)account=createtype,(holders.findwith)addaccountinit_yearly_interest_foraccountboundary.renderAccountSuccessMessage.new(account)rescueItemExistError=>messageboundary.rendermessageendde
我有一个允许更新用户记录的表单。它包含:password和:password_confirmation字段,但我不希望在数据库中已存储加密密码时对它们运行验证。View文件中的字段:'ConfirmPassword'%>在互联网上搜索时,我发现了这段代码,我认为它是针对以前版本的Ruby/Rails的。(我会把它放在我的用户模型中。)validates_presence_of:password,:on=>create由于我的用户模型中密码验证的语法不同(如下),我对我需要的语法感到困惑。validates:password,:presence=>true,:confirmation=>