首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在具有后台会话配置的iOS上正确使用阿波罗GraphQL?

如何在具有后台会话配置的iOS上正确使用阿波罗GraphQL?
EN

Stack Overflow用户
提问于 2018-04-29 09:44:19
回答 1查看 2.8K关注 0票数 3

我将阿波罗iOS 0.8与Xcode 9.3、Swift 4.1和iOS 11一起使用,并初始化阿波罗客户端实例,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import Apollo

// ... unrelated code skipped

let configuration = URLSessionConfiguration.default

if let token = keychain.accessToken {
  // Add additional headers as needed
  configuration.httpAdditionalHeaders = [
    "Authorization": "Bearer \(token)"
  ]
}

let graphqlEndpoint = URL("https://sample-server-url/graphql")!
let client = ApolloClient(networkTransport:
  HTTPNetworkTransport(url: graphqlEndpoint, configuration: configuration))

该应用程序可以很好地处理发送到GraphQL服务器的所有查询和突变,不存在任何问题,除非应用程序处于后台。据我所知,使用常见的NSURLSession实例,可以通过将会话配置切换到URLSessionConfiguration.background(withIdentifier: "your-session-id")来轻松地解决这个问题。

但当我更换线路时

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let configuration = URLSessionConfiguration.default

使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let configuration = URLSessionConfiguration.background(withIdentifier: "your-session-id")

该应用程序因以下错误而开始崩溃:Terminating app due to uncaught exception 'NSGenericException', reason: 'Completion handler blocks are not supported in background sessions. Use a delegate instead.'

在使用阿波罗GraphQL时,解决此错误的最佳方法是什么,或者是否有其他方法与后台的GraphQL服务器进行通信?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-04 07:57:43

阿波罗iOS提供了一个公共NetworkTransport协议,允许覆盖所有网络交互。实现可以作为ApolloClient(networkTransport: NetworkTransport)初始化器的参数提供。

假设您有一个NetworkTransport实现,它用后台会话配置包装URLSession实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class BackgroundTransport: NetworkTransport {
    public func send<Operation>(operation: Operation,
    completionHandler: @escaping (GraphQLResponse<Operation>?, Error?) -> Void)
    -> Cancellable where Operation: GraphQLOperation {
    // ...
    }
}

然后,您可以这样初始化ApolloClient

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let graphqlEndpoint = URL("https://sample-server-url/graphql")!
let client = ApolloClient(networkTransport: BackgroundTransport(url: u))

BackgroundTransport实现可以根据需要定制,包括根据后台会话配置的需要使用URLSession委托而不是完成处理程序块。

如果在应用程序中使用阿拉莫火,还可以使用ApolloAlamofire库,该库提供了对后台URLSession配置和其他一些特性的支持,从而实现了NetworkTransport

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50089546

复制
相关文章
android RecyclerView 里面嵌套editText,点击RecyclerView内部其他控件让editText失去焦点
有很多方法,没详细去尝试,而我的方法是在每个item添加一个hideKeyboard,hideKeyboard是自定义方法,此方法写在activity中
用户10521372
2023/05/24
1.6K0
Android EditText详解
很常用的控件EditText(输入框); 和TextView非常类似,最大的区别是:EditText可以接受用户输入。和前面一样,我们不一个个讲属性, 只讲实际应用。那么开始本节内容!
奶油话梅糖
2021/03/19
1.8K0
Android中EditText
1.android:hint="只能输入指定数字",文本框中显示提示信息 2.android:password="true"该文本框是一个密码框 3.android:phoneNumber="true"该文本框是一个电话框 4.android:digits="abcdefghijk"指输入内容限制为指定内容 5.android:drawableLeft="@drawable/icon"设置文本左边绘制指定图像 6.android:drawablePadding设置文本框内文本与图形间的间距 7.androi
欢醉
2018/01/22
7440
Android UI学习之EditText
比如上面那正图片就是我截取的添加联系人的界面,很明显能输入文本的就是EditText。
DragonKingZhu
2022/05/08
4630
Android UI学习之EditText
点击显示错误
双折线点击一个,另一显示a b 错误.PNG 正确.PNG 隐藏一条线 tooltip: { // 气泡 trigger: "axis"
用户4344670
2019/08/28
1.2K0
点击显示错误
Android edittext InputFilter 输入控制
InputFilter 可能需要对用户的输入进行一些限制,可以为EditText Widget设置一个InputFilter以实现这一功能
程思扬
2022/01/10
7340
Android 实现EditText输入金额
Android中EditText是一个InputType类型有很多的控件,可以来达到不同的软键盘效果。如下图:
网罗开发
2021/01/29
3.1K0
Android 实现EditText输入金额
Android取消EditText自带黄色边框
平时还没感觉,但是在做一些高逼格的应用时,发现系统自带的黄色边框很难看哎,比如说下面这个小搓比: 哎呦,简直搓的不行。 想要取消边框黄色只要一步: 在你的EditText里添加一个属性:android:background="@null" duang!很清新有没有
张拭心 shixinzhang
2022/11/30
7260
Android实现EditText文本颜色渐变
刚开始想着先是设置textColor属性就可以了,然后写了个一个带渐变的shap感觉不好使,于是乎就自定义解决,代码如下
程序员飞飞
2020/02/27
3.3K0
Android实现EditText文本颜色渐变
Android点击EditText文本框之外任何地方隐藏键盘的解决办法
1,实现方法一:通过给当前界面布局文件的父layout设置点击事件(相当于给整个Activity设置点击事件),在事件里进行键盘隐藏 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/traceroute_rootview" android:layout_width="fill_parent" android:layout_height="fi
庞小明
2018/03/07
1.6K0
Android入门教程 | EditText 用户输入
使用EditText时,有时候我们会需要监听输入的回车,以做出一些操作。 或者需要把回车变成“搜索”,“发送”或“完成”等等。
Android_anzi
2021/11/05
8380
Android EditText之软键盘搜索
android:imeOptions="actionSearch" 主要是这个属性,就是把软键盘上的回车键改成搜索按钮 相关的属性值还有
yechaoa
2022/06/10
1.6K0
Android EditText之软键盘搜索
【Android从零单排系列七】《Android视图控件——EditText》
小伙伴们,在上文中我们介绍了Android视图控件TextView控件,本文我们继续盘点,介绍一下Android视图控件中的第二个控件——EditText。
再见孙悟空_
2023/02/10
9150
【Android从零单排系列七】《Android视图控件——EditText》
TabLayout用法,android顶部导航栏,android底部导航栏
TabLayout是android.support.design里的一个控件,使用它可以很方便的做出顶部导航和底部导航。类似于这样的,能设置选中时字体的颜色和选中时的图片。
天涯泪小武
2019/01/17
4.1K0
点击加载更多

相似问题

Android:点击EditText启动活动

30

Android点击(+)按钮添加edittext字段,点击(-)移除

30

Android Edittext可绘制点击卡住焦点

120

Android EditText在点击时会导致OutOfMemoryError

10

在android中关闭edittext点击后的点击事件

113
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文