Android 10 提供 Force Dark 功能。一如其名,此功能可让开发者快速实现深色主题背景,而无需明确设置 DayNight 主题背景。如果您的应用采用浅色主题背景,则 Force Dark 会分析应用的每个视图,并在相应视图在屏幕上显示之前,自动应用深色主题背景。有些开发者会混合使用 Force Dark 和本机实现,以缩短实现深色主题背景所需的时间。应用必须选择启用 Force Dark,方法是在其主题背景中设置 android:forceDarkAllowed=”true”。此属性会在所有系统及 AndroidX 提供的浅色主题背景(例如 Theme.Material.Light)上设置。使用 Force Dark 时,您应确保全面测试应用,并根据需要排除视图。如果您的应用使用深色主题背景(例如Theme.Material),则系统不会应用 Force Dark。同样,如果应用的主题背景继承自 DayNight主题背景,则系统不会应用 Force Dark,因为会自动切换主题背景。
深⾊主题即Theme.AppCompat.DayNight或者Theme.MaterialComponents.DayNight。深⾊主题是Android官⽅提供的实现深色模式的一种方法,应用也可以其它自己的方法实现深色模式。深⾊主题起作用后,将会加载-night⽬目录下的资源,如果没有找到,那么加载默认资源。对于标准控件,如果应用不提供深色模式的资源,系统也会提供一套默认的深色资源(不过比较难看,基本不可用)全局反色即ForceDark,系统会根据一套算法,计算出每个View属于前台还是后台。对于前台View,会使其变亮,对于后台View,会使其变暗,⽽不需要开发者提供两套资源。具体的原理可以移步Android Q Force Dark调研。如果一个activity使⽤了深色模式,那么全局反色对其将不生效。
Sender.initPool(int connection, int route) 设定连接池最大连接数为“connection”,路由最大连接数为“route”,不设定该项则使用默认参数:最大连接数 10,路由最大连接数 5
④返回结果Result
com.vivo.push.sdk.server.Result
1.鉴权
要进行PUSH推送,任何接入方都要有个鉴权操作。获得authToken用于各类推送。
限制:一天限制调用不超过10000次。
接口说明:
com.vivo.push.sdk.server.Sender
方法
说明
getToken(int appId,String appKey)
根据appId,appKey(用户申请推送业务时生成)进行鉴权操作。
Demo:
public void testGetToken() throws Exception { Sender sender = new Sender(APP_SECRET);//实例化Sender sender.initPool(20,10);//设置连接池参数,可选项 Result result = sender.getToken(APP_ID,APP_KEY);//发送鉴权请求 result.getResult();//获取服务器返回的状态码,0成功,非0失败 result.getDesc();//获取服务器返回的调用情况文字描述 result.getAuthToken();//如鉴权请求发送成功,获得authToken }
public void saveListPayload() throws Exception { Sender sender = new Sender(APP_SECRET);sender.initPool(20,10);//设置连接池参数,可选项sender.setAuthToken(authToken);//设置推送的必要参数authToken(调用鉴权方法获得) Message saveList = new Message.Builder().~.build();//构建要保存的批量推送消息体 Result result = sender. saveListPayLoad(saveList);//发送保存群推消息请求result.getResult();//获取服务器返回的状态码,0成功,非0失败 result.getDesc();//获取服务器返回的调用情况文字描述 result.getTaskId();//如请求发送成功,将获得该条消息的任务编号,即taskId }
public void listSend() throws Exception { Sender sender = new Sender(APP_SECRET); sender.initPool(20,10);//设置连接池参数,可选项sender.setAuthToken(authToken);//设置推送的必要参数authToken(调用鉴权方法获得) Set<String> regid = new HashSet<>();//构建批量推送用户群 regid.add(taskId1); regid.add(taskId2); … TargetMessage targetMessage = new TargetMessage.Builder().~.build();//构建批量推送的消息体 Result result = sender.sendToList(targetMessage);//批量推送给用户result.getResult();//获取服务器返回的状态码,0成功,非0失败 result.getDesc();//获取服务器返回的调用情况文字描述 result. getInvalidUsers();//非法用户信息列表,其中每个非法用户信息包括status和userid两个属性,userid为接入方传的regid或者alias,status有四种情况:1 userId不存在 2卸载或者关闭了通知 3 14天不在线 4非测试用户 }
4.全量推送
向所有设备推送某条消息。
使用场景:活动、系统升级提醒等。
接口说明:
com.vivo.push.sdk.server.Sender
方法
说明
sendToAll(Message allMessage)
把构建的消息allMessage发送给所有设备
Demo:
public void allSend() throws Exception { Sender sender = new Sender(APP_SECRET); sender.initPool(20,10);//设置连接池参数,可选项sender.setAuthToken(authToken);//设置推送的必要参数authToken(调用鉴权方法获得) Message allSendMessage = new Message.Builder().~.build();//构建要全量推送的消息体 Result result = sender. sendToAll(allSendMessage);//发送全量推送消息请求result.getResult();//获取服务器返回的状态码,0成功,非0失败 result.getDesc();//获取服务器返回的调用情况文字描述 result.getTaskId();//如请求发送成功,将获得该条消息的任务编号,即taskId }
5.标签推
接入方携带消息内容、标签信息进行通知消息推送。根据标签把消息推送给指定用户
接口说明:
com.vivo.push.sdk.server.Sender
方法
说明
sendToTag(Message tagMessage)
把构建的消息发送给标签圈定的用户
Demo:
public void tagSend() throws Exception { Sender sender = new Sender(APP_SECRET); sender.initPool(20,10);//设置连接池参数,可选项sender.setAuthToken(authToken);//设置推送的必要参数authToken(调用鉴权方法获得) Message tagSendMessage = new Message.Builder().~.build();//构建要全量推送的消息体 Result result = sender. sendToTag(tagSendMessage);//发送标签推送消息请求result.getResult();//获取服务器返回的状态码,0成功,非0失败 result.getDesc();//获取服务器返回的调用情况文字描述 result.getTaskId();//如请求发送成功,将获得该条消息的任务编号,即taskId }
① 发送消息接口设置扩展参数extra(详见目录:一.公共——5.高级特性 extra), 包含callback、callback.param。
② vivo推送服务器调用第三方设置的callback url接口。
③ 字段ackType 【达回执类型】目前只有到达回执ackType=0
访问方式
URL
编码方式
协议
method
Content-Type
第三方设置的callback url(详见:高级特性 extra)
Utf-8
https/http
POST
application/json
Curl e.g.: curl -X POST -H ‘Content-Type:application/json’ -d ‘${your_request_body}’ https://callbackurlRequest body e.g.:{ “taskId1”:{ “param”:”param1″, “targets”:”alias1,alias2,alias3″, “ackTime”:1612776166257 }, “taskId2”:{ “param”:”param2″, “targets”:”regId1,regId2,regId3″, “ackTime”:1612776166258 }}Response body e.g.:http status 200:http status 500:Internet server error!
接口定义
输入参数:
属性名字
类型
是否必填Y/N
描述
taskId
string
Y
任务编号
param
string
Y
开发者上传的自定义参数值
targets
string
Y
一批alias或者regId列表,之间是用逗号分割
ackTime
long
N
回执到达时间,毫秒时间戳
回执流程
设备在线:
设备不在线:
5.标签管理
5.1 新增标签接口
接口说明
为应用方增加标签,用于后续标签推送。
访问方式
URL
编码方式
协议
method
Content-Type
/tag/add
Utf-8
https
POST
application/json
Curl e.g.: curl -X POST -H ‘authToken:${your_auth_token}’ -H ‘Content-Type:application/json’ -d ‘${your_request_body}’ https://host:port/tag/addRequest body e.g.:{ “appId”:10004, “name”: “shenzhen”, “desc”:”深圳用户标签”, “group”:”city”}Response body e.g.:http status 200:{ “result”: 0, “desc”: “成功”,}业务异常:{ “result”: xxx,”desc”: “xxx”}http status 500:Internet server error!