/**
* Present photo picker controller to get images.
* @discussion Not recommend to use `limitSize` parameter, pass `nil` to use internal default value will be better.
* Even if you have passed a limit value, it maybe return a image that size does not match what you want.
* See also PHImageManager `requestImageForAsset:targetSize:contentMode:options:resultHandler:`.
*
* @param maxNumber The limit count of images.
* @param originalImageBlock Get original image call back.
* @param webImagesBlock Get compressed image call back.
* @param cancelBlock Cancel action call back.
* @param limit The limit image side.
* @return Photo picker controller.
*/
+ (UIViewController *)createPhotoPickerViewController:(NSInteger)maxNumber
originalImages:(void (^)(NSDictionary *result))originalImageBlock
webImages:(void (^)(NSDictionary *result))webImagesBlock
cancel:(void (^)(NSDictionary *result))cancelBlock
limitSize:(NSNumber *)limit;
初步
接入小程序SDK后,前端swan.js是集成在SDK中的,SDK接入的APP(以下简称“宿主”)默认无需关心SDK上swan.js的更新/运行,但是宿主需要扩展swan对于小程序开发者的API/组件时,则需要为js运行时编写特定逻辑。
扩展
扩展都能做什么
目前编写扩展,可以给宿主带来三种能力:
swan.tieba.publishThread()
;<bilibili-video></bilibili-video>
;扩展的编写
如果宿主需要在swan上扩展API或是扩展组件的话,则需要进行两步的操作:
extension.js的基础格式
三方写的
extension.js
中,可以扩展的有:API/组件/统计逻辑。此js会被编译成如下格式:给extension.js中提供的接口
在extension.js中,因为需要与宿主客户端进行交互,所以会提供一些开发者所没有的特定接口,编写extension.js的开发人员可以使用这些API,编写特定逻辑。其中,extension.js中可以使用的API如下:
swanx中的方法:
swanx中scheme的格式如下:
扩展API方法
extension.js
中methods
对象中的所有字段,会自动被merge到相对应的命名空间下,并在全局对象swan
上提供给小程序开发者,如:'swan.tieba.publishThread()' 。开发者可以在逻辑中直接编写
scheme
,与宿主客户端进行交互。扩展组件方法
extension.js
中components
对象中的所有字段,将会自动生成对应的组件,并被加上命名空间为前缀,如上面的video
,会被swan.js
扩展为<bilibili-video>
提供给小程序开发者。在实现组件之前,请extension.js的编写人员,要了解一下组件的基本知识,
即:原生组件是普通的HTML组件在 各阶段生命周期/事件触发 中调用端能力,进行实现的。所以,如果宿主需要做一个普通的HTML组件,则直接编写普通组件逻辑即可(仅编写前端代码)。如果需要编写NA组件,则需要在客户端进行相应实现,并通过前端
swanx.invoke()
进行相应通讯。组件的基本描述与生命周期,请参见san框架的官网描述:san框架
自定义日志
在
extension.js
中,开发者可以写一个名为customLog
的函数,swan.js
框架会在启动时调用宿主开发的customLog
函数,并给开发者的扩展代码传入swanEventFlow
事件流对象,该事件流对象支持接口如下:由上我们可以看出,宿主可以使用
swanEventFlow
对象,对小程序的各个生命周期关键事件发生节点进行监听。那么开发者可以具体利用的生命周期都有哪些呢?请参见以下列表:Android 开源说明
名词解释
小程序lib说明
第三方依赖库说明
com.android.support:appcompat-v7:26.1.0
com.android.support:recyclerview-v7:26.1.0
com.android.support:support-annotations:26.1.0
com.facebook.fresco:fresco:1.2.0
com.baidu.android.common:galaxy-full:2.1.0
com.baidu.pyramid:pyramid-annotation:0.1.2
需要接入方实现的功能
1 二维码扫描
功能说明
调起客户端扫码界面,扫码成功后返回对应的结果。
原理
小程序调用
swan.scanCode
API时,应该跳转到二维码扫描界面,二维码扫描结果应该通过返回给调起的小程序。接口设计
IAiAppScanCodeIoc.java
中相关函数说明
IScanResultCallback说明
回调定义:
data返回结构:
2 位置
功能说明
设计原理
接口设计
一共只有3个接口需要实现
接口都在 IAiAppLocationIoc.java 中。
预初始化定位服务,为了在使用定位的时候,快速的返回定位结果,减少定位耗时(第三方可不实现)
执行定位操作
以Observer形式进行定位(接口可能后续会删除,目前对外无使用场景,第三方可不用实现)
参考实现
无,完全有第三方自己实现,没有固定格式和规范
3 分享
功能说明
小程序菜单点击分享,调起宿主分享功能,此功能需要宿主实现,调用宿主的分享面板
原理
SwanJS 传递分享参数到 Swan-Native 后,Swan-Native 通过接口调起宿主分享功能
实现
需要实现以下接口,完成分享功能
4 图片
功能说明
图片功能主要分为
图片预览
和图片选择
。图片预览:查看图片
图片选择:从本地相册选择图片或使用相机拍照。
实现细节
图片预览
小程序调用
swan.previewImage
API时,小程序框架传入图片URL信息尝试调起接入方图片浏览页面。图片选择
小程序调用
swan.chooseImage
API时,小程序传入选择图片基本参数尝试调起接入方图片选择页面。用户完成图片选择后图片选择页面应该将选择的图片信息返回给调起小程序接入说明
图片预览接入说明
图片选择接入说明
接入方法
IAiAppImageIoc.java
中pictureParams参数格式
pictureParams参数说明
OnImageChooseResultCallback说明
5 地图
功能说明
地图功能包含(具体参考下文的使用文档):
推荐使用百度地图的 SDK 进行接入,有详细的实现代码,接入成本较低;其他地图SDK需要重新实现下文 接口设计 中的接口。
地图的使用和开发参考小程序文档:
设计原理
接口设计
接入地图能力,需要实现的接口,目前有16个,默认是使用百度地图的SDK实现。如果第三方使用百度地图SDK,可以直接使用代码,成本较小。
所有的接口都在 IAiAppMapIoc.java 中。
创建一个地图View。
当地图上的参数发生变化时,如大小,位置,新增绘制等等,只要文档上出现的参数发生变化,就会调用这个接口。
删除地图组件
移动指定的 Marker 标记
定位到当前所在的位置
缩放地图视野,以包含指定的所有经纬度
获取当前地图中的缩放比例
获取当前地图view视野矩形的经纬度坐标(左上右下两个点的经纬度)
获取地图中心的经纬度坐标
当前页面 resume 的时候,回调的接口,通知地图
当前 webView 页面 pause 的时候,通知地图
当前 webView 页面销毁的时候,通知地图
在新的页面打开指定的经纬度在地图上显示
打开新的页面,选择一个地理位置,返回选择位置的经纬度
打开步行导航,步行导航只需要终点坐标即可,其实坐标就是当前位置
判断当前最上层的 Fragemnt 是不是正在导航
参考实现
以创建地图为例,实现参考
其他说明
参考代码只提供大概框架,具体细节未提供。
6 地址、发票
功能说明
地址、发票功能指
swan.chooseAddress
和swan.chooseInvoiceTitle
能力以及和宿主配套的地址、发票管理中心,管理中心一般包含添加、删除、编辑等能力使用示例:外卖小程序,填写配送地址时,可以调用
swan.chooseAddress
能力直接选择宿主管理的地址,获取信息后直接填写相关信息原理
小程序调用
swan.chooseInvoiceTitle
API时,会跳转到宿主发票管理中心,选择对应发票后返回发票信息到调起的小程序。流程
小程序调用 swan.chooseInvoiceTitle -> SwanJS -> Scheme -> 端能力 -> 管理中心 -> 选择后携带信息 -> 端能力 -> Scheme -> SwanJS -> 小程序
实现
发票
Invoice对象说明:
地址
Address对象说明:
3.7 夜间模式
功能说明
夜间模式指小程序夜间模式功能,主要需要实现和宿主夜间模式的状态联动,同时需要宿主维护夜间模式状态
原理
小程序夜间模式使用蒙层压黑的方式实现 小程序运行与独立的进程,跨进程状态实现通过小程序内置的CS通信机制(Messenger实现),涉及
AiAppsMessengerService
和AiAppsMessengerClient
实现
主进程 -> 小程序进程 在宿主夜间模式发生变化时,调用:
同时需要实现以下接口:
设置夜间模式开关状态,当前功能和
forceSyncNightModeState(boolean enable)
,功能重复,后续会整合主进程和小程序进程间,夜间模式状态强制同步,通过 Messenger 实现
获取夜间模式状态
此接口和百度App夜间模式机制实现有关,后续标准接口时会去除
此接口和百度App夜间模式机制实现有关,后续标准接口时会去除
8 支付
9 文档
功能说明
设计原理
接口设计
IAiAppPluginIoc.java
中在打开文档前,先检查打开文档的插件是否可用
调起打开文档的插件展示文档
参考实现
10 用户反馈
功能说明
设计原理
接口设计
IAiAppFeedbackIoc.java
中。调起反馈
参考实现
11 直播
功能说明
小程序提供视频直播的能力,可以支持播放器在线推流的视频。对应开发者接口是
swan.createLivePlayerContext
,通过这个接口创建一个LivePlayerContext
对象,后续对直播组件的操作均可通过该对象完成。 对应的组件是<live-player/>
,支持的操作如下实现原理
播放:
停止:
静音:
暂停:
恢复:
进入全屏:
退出全屏:
设计原理
开发者通过
swan.createLivePlayerContext(string id)
创建直播对象,参数 id 是<live-player/>
标签的 id。创建的同时请求绑定相应的直播组件,随后在客户端创建一个AiAppsLivePlayer
对象。接口设计
涉及到的端能力:
LivePlayerAction
接口
12 背景音乐
功能说明
小程序提供了背景音频播放能力,通过
swan.getBackgroundAudioManager()
创建BackgroundAudioManager
对象,后续对背景音频的操作均是通过此接口执行。 注:背景音频是小程序全局唯一的控件,即在任何一个小程序中控制都会影响到其他小程序的使用。支持以下操作:
播放:
暂停。暂停后的音频再播放会从暂停处开始播放:
停止。停止后的音频再播放会从头开始播放:
跳转到指定位置:
监听音频进入可以播放状态的事件,但不保证后面可以流畅播放:
监听音频播放事件:
监听音频暂停事件:
监听音频停止事件:
监听音频自然播放至结束的事件:
监听音频播放进度更新事件:
监听音频播放错误事件:
监听音频加载中事件,当音频因为数据不足,需要停下来加载时会触发
监听音频进行跳转操作的事件
监听音频完成跳转操作的事件
设计原理
开发者通过调用通过
swan.getBackgroundAudioManager()
创建BackgroundAudioManager
对象。通过swan/backgroundAudio/open
端能力在客户端创建音频播放器对象,后续通过update接口更细你参数,对播放器的播放、暂停、定位时间点等常用操作均通过BackgroundAudioManager
完成。接口设计
涉及到的端能力:
AudioPlayerAction
目前百度智能小程序底层是通过 Android 系统的 MediaPlayer 实现音频播放,第三方可以根据自己的需求自行替换。
接口如下:
13 视频
功能说明
智能小程序提供了视频播放能力,通过实现 video 抽象接口就可以轻松让您的小程序拥有定制化的视频播放器,让小程序的的产品体验及产品功能更加完善。 开发者通过
swan.createVideoContext
来创建一个播放器实例,后续有关播放器的操作均在此对象上完成。对应的组件是
支持的操作如下:
播放视频:
暂停视频:
停止视频:
跳转到指定位置:
发送弹幕:
进入全屏:
退出全屏:
设计原理
小程序调用
swan.createVideoContext
时,swan-core 会通知客户端创建 MediaPlayer 对象。通过swan/video/open
接口传入初始化参数,后续可以通过 update 接口更新参数。对播放器的播放、暂停、拖拽等常用操作均通过 videoContext 完成。接口设计
涉及到的端能力:
VideoOpenAction
以下是需要实现的基础播放器接口
14 音频
功能说明
小程序提供了通用音频播放能力,通过
swan.createInnerAudioContext()
创建audioContext
对象,后续对 audio 的操作均是通过此接口执行。 对应的组件是支持以下操作:
播放:
暂停。暂停后的音频再播放会从暂停处开始播放:
停止。停止后的音频再播放会从头开始播放:
跳转到指定位置:
销毁当前实例:
监听音频进入可以播放状态的事件,但不保证后面可以流畅播放:
取消监听音频进入可以播放状态的事件,但不保证后面可以流畅播放:
监听音频播放事件:
取消监听音频播放事件:
监听音频暂停事件:
取消监听音频暂停事件:
监听音频停止事件:
取消监听音频停止事件:
监听音频自然播放至结束的事件:
取消监听音频自然播放至结束的事件:
监听音频播放进度更新事件:
取消监听音频播放进度更新事件:
监听音频播放错误事件:
取消监听音频播放错误事件:
监听音频加载中事件,当音频因为数据不足,需要停下来加载时会触发
取消监听音频加载中事件,当音频因为数据不足,需要停下来加载时会触发
监听音频进行跳转操作的事件
取消监听音频进行跳转操作的事件
监听音频完成跳转操作的事件
取消监听音频完成跳转操作的事件
设计原理
开发者通过调用通过
swan.createInnerAudioContext()
创建audioContext
对象,并传入 id 绑定相应的audio
标签。通过swan/audio/open
端能力在客户端创建 MediaPlayer 对象,后续通过 update 接口更新参数,对播放器的播放、暂停、定位时间点等常用操作均通过audioContext
完成。接口设计
涉及到的端能力:
AudioPlayerAction
目前百度智能小程序底层是通过Android系统的MediaPlayer实现音频播放,第三方可以根据自己的需求自行替换。
接口如下:
15 端能力回调说明
接口中回调函数说明
/aiapps/lib-ng-aiapps/src/main/java/com/baidu/searchbox/ng/ai/apps/ioc/interfaces
里),都必须将端上的处理结果返回或通知到JS,否则小程序的开发者无法收到回调,逻辑无法继续。根据逻辑的不同,端上有同步处理和异步处理两种情况。
同步处理:在完成相应的逻辑之后,直接调用以下代码,告诉前端JS的处理结果,又叫一级回调
异步处理:这个操作需要耗时,所以得处理完毕之后,在主动通知JS。
必须先告诉前端JS,已经收到它的命令,通过:
第二步才开始执行异步任务,此时在接口参数 UnitedSchemeEntity entity 中会有个 cb=xxx 的参数,这个 cb 就是异步回调,又叫二级回调
示例
同步回调(又叫一级回调):
删除一个 View,是一个同步操作,不耗时,所以直接进行删除操作,操作完毕之后直接通知 JS 结果即可
异步回调(又叫二级回调)
动过程需要有动画,移动结束之后要通知 JS,移动结束了,肯定是耗时操作,需要用异步回调。
.需要接入方实现的服务
1 登录
功能说明
小程序登录功能(调用宿主登录),和宿主强相关
原理
需要宿主维护自己的账号体系
实现
标准接口,后续提供
2 授权
功能说明
在符合法务要求的情况下赋予小程序调用必要功能的权限,比如用户信息、直播、地理位置等 敏感功能权限风控,可以随时由用户或者云端平台撤回授权 用户的敏感信息都从开放平台统一输出
原理
暂无,后续提供
实现
暂无,后续提供
5.小程序核心结构、流程
暂无
6.第三方接入步骤说明
小程序SDK的仓库地址
http://icode.baidu.com/repos/baidu/searchbox-android/aiapps/tree/master
小程序结构说明
初始化说明
将配置好依赖的库,参考根目录的
settigns.gradle build.gradle demo/build.gradle
需要使用
apply plugin: 'com.baidu.pyramid.di'在application的build.gradle
在 App 的
application
中初始化用到了代码实现
com.baidu.searchbox.ng.ai.apps.ioc.interfaces
包小所有的接口(目前需要参考百度App的实现方式),demo 中是默认实现。和 Server 交互的需要有公参,内部可以参考
URLConfig.java
这个类每个接入方使用的预置SwanJS都不一样(目前在
/lib-ng-aiapps/src/main/assets/aiapps
文件夹下),需要找 @侯禹 @任仲桦后端的开放平台,授权相关 需要申请
host_api_key
,找 @刘青理论上就接入完毕了,如有问题直接找 @康森(Android) @刘青(Server) @侯禹(FE)
接入方实现功能
示例模板
二维码扫描
功能说明:调起客户端扫码界面,扫码成功后返回对应的结果。
原理:小程序调用 swan.scanCode API时,应该跳转到二维码扫描界面,二维码扫描结果应该通过返回给调起的小程序。
接口设计:
相关函数说明
IScanResultCallback说明
回调定义:
data返回结构:
位置
功能说明:
小程序里提供了获取当前位置地理坐标的能力,以供小程序开发者使用,如基于定位、位置推荐的小程序等。
地理位置的坐标有一定的要求,根据文档getLocation描述,需要支持至少wgs84和gcj02两种坐标类型,默认为 wgs84 返回 gps 坐标,可选 gcj02。 设计原理:
在小程序前端开发者需要使用地理位置的时候,会通过JS的调用,最终调用到端上的接口。
端上的接口,会去请求定位,定位是个耗时过程,所以在定位成功之后,异步的将结果返回给开发者。 接口设计:
一共只有3个接口需要实现。
接口都在 IAiAppLocationIoc.java 中。
预初始化定位服务,为了在使用定位的时候,快速的返回定位结果,减少定位耗时(第三方可不实现)。
执行定位操作
以Observer形式进行定位(接口可能后续会删除,目前对外无使用场景,第三方可不用实现)
参考实现:无,完全有第三方自己实现,没有固定格式和规范。
分享
功能说明:小程序菜单点击分享,调起宿主分享功能,此功能需要宿主实现,调用宿主的分享面板 原理:SwanJS传递分享参数到Swan-Native后,Swan-Native通过接口调起宿主分享功能 标准协议必要字段:
实现
需要实现以下接口,完成分享功能。
图片
功能说明:图片功能主要分为图片预览和图片选择。
实现细节:
接入说明:
/**
地图
功能说明
地图功能包含(具体参考下文的使用文档):
推荐使用百度地图的SDK进行接入,有详细的实现代码,接入成本较低;其他地图SDK需要重新实现下文 接口设计 中的接口。
地图的使用和开发参考小程序文档:
设计原理
接口设计
*在新的页面打开指定的经纬度在地图上显示
参考实现
其他说明:参考代码只提供大概框架,具体细节未提供。
地址、发票
功能说明
地址、发票功能指
swan.chooseAddress
和swan.chooseInvoiceTitle
能力以及和宿主配套的地址、发票管理中心,管理中心一般包含添加、删除、编辑等能力使用示例:外卖小程序,填写配送地址时,可以调用
swan.chooseAddress
能力直接选择宿主管理的地址,获取信息后直接填写相关信息原理
小程序调用
swan.chooseInvoiceTitle
API时,会跳转到宿主发票管理中心,选择对应发票后返回发票信息到调起的小程序。流程
小程序调用 swan.chooseInvoiceTitle -> SwanJS -> Scheme -> 端能力 -> 管理中心 -> 选择后携带信息 -> 端能力 -> Scheme -> SwanJS -> 小程序
实现
发票
Invoice参数说明:
地址
Address返回参数说明:
3.7 夜间模式
功能说明
夜间模式指小程序夜间模式功能,主要需要实现和宿主夜间模式的状态联动,同时需要宿主维护夜间模式状态
原理
小程序夜间模式使用蒙层压黑的方式实现 小程序运行与独立的进程,跨进程状态实现通过小程序内置的CS通信机制(Messenger实现),涉及
AiAppsMessengerService
和AiAppsMessengerClient
实现
主进程 -> 小程序进程 在宿主夜间模式发生变化时,调用:
同时需要实现以下接口:
设置夜间模式开关状态,当前功能和
forceSyncNightModeState(boolean enable)
,功能重复,后续会整合主进程和小程序进程间,夜间模式状态强制同步,通过 Messenger 实现
获取夜间模式状态
此接口和手百夜间模式机制实现有关,后续标准接口时会去除
此接口和手百夜间模式机制实现有关,后续标准接口时会去除
3.8 支付
3.9 文档
功能说明
设计原理
接口设计
在打开文档前,先检查打开文档的插件是否可用
调起打开文档的插件展示文档
参考实现
3.10 用户反馈
功能说明
设计原理
接口设计
调起反馈
参考实现
3.11 直播
功能说明
小程序提供视频直播的能力,可以支持播放器在线推流的视频。对应开发者接口是swan.createLivePlayerContext,通过这个接口创建一个LivePlayerContext对象,后续对直播组件的操作均可通过该对象完成。 对应的组件是 ,支持的操作如下
实现原理
播放:
停止:
静音:
暂停:
恢复:
进入全屏:
退出全屏:
设计原理
开发者通过swan.createLivePlayerContext(string id)创建直播对象,参数id是 标签的id。创建的同时请求绑定相应的直播组件,随后在客户端创建一个AiAppsLivePlayer对象。
接口设计
涉及到的端能力:LivePlayerAction
接口
3.12 背景音乐
功能说明
小程序提供了背景音频播放能力,通过swan.getBackgroundAudioManager()创建BackgroundAudioManager对象,后续对背景音频的操作均是通过此接口执行。 注:背景音频是小程序全局唯一的控件,即在任何一个小程序中控制都会影响到其他小程序的使用。
支持以下操作:
播放:
暂停。暂停后的音频再播放会从暂停处开始播放:
停止。停止后的音频再播放会从头开始播放:
跳转到指定位置:
监听音频进入可以播放状态的事件,但不保证后面可以流畅播放:
监听音频播放事件:
监听音频暂停事件:
监听音频停止事件:
监听音频自然播放至结束的事件:
监听音频播放进度更新事件:
监听音频播放错误事件:
监听音频加载中事件,当音频因为数据不足,需要停下来加载时会触发
监听音频进行跳转操作的事件
监听音频完成跳转操作的事件
设计原理
开发者通过调用通过swan.getBackgroundAudioManager()创建BackgroundAudioManager对象。通过swan/backgroundAudio/open端能力在客户端创建音频播放器对象,后续通过update接口更细你参数,对播放器的播放、暂停、定位时间点等常用操作均通过BackgroundAudioManager完成。
接口设计
涉及到的端能力:AudioPlayerAction
目前百度智能小程序底层是通过Android系统的MediaPlayer实现音频播放,第三方可以根据自己的需求自行替换。
接口如下:
3.13 视频
功能说明
智能小程序提供了视频播放能力,通过实现video抽象接口就可以轻松让您的小程序拥有定制化的视频播放器,让小程序的的产品体验及产品功能更加完善。 开发者通过swan.createVideoContext来创建一个播放器实例,后续有关播放器的操作均在此对象上完成。
对应的组件是
支持的操作如下:
播放视频:
暂停视频:
停止视频:
跳转到指定位置:
发送弹幕:
进入全屏:
退出全屏:
设计原理
小程序调用swan.createVideoContext时,swan-core会通知客户端创建MediaPlayer对象。通过swan/video/open接口传入初始化参数,后续可以通过update接口更新参数。对播放器的播放、暂停、拖拽等常用操作均通过videoContext完成。
接口设计
涉及到的端能力:VideoOpenAction
以下是需要实现的基础播放器接口
3.14 音频
功能说明
小程序提供了通用音频播放能力,通过swan.createInnerAudioContext()创建audioContext对象,后续对audio的操作均是通过此接口执行。 对应的组件是
支持以下操作:
播放:
暂停。暂停后的音频再播放会从暂停处开始播放:
停止。停止后的音频再播放会从头开始播放:
跳转到指定位置:
销毁当前实例:
监听音频进入可以播放状态的事件,但不保证后面可以流畅播放:
取消监听音频进入可以播放状态的事件,但不保证后面可以流畅播放:
监听音频播放事件:
取消监听音频播放事件:
监听音频暂停事件:
取消监听音频暂停事件:
监听音频停止事件:
取消监听音频停止事件:
监听音频自然播放至结束的事件:
取消监听音频自然播放至结束的事件:
监听音频播放进度更新事件:
取消监听音频播放进度更新事件:
监听音频播放错误事件:
取消监听音频播放错误事件:
监听音频加载中事件,当音频因为数据不足,需要停下来加载时会触发
取消监听音频加载中事件,当音频因为数据不足,需要停下来加载时会触发
监听音频进行跳转操作的事件
取消监听音频进行跳转操作的事件
监听音频完成跳转操作的事件
取消监听音频完成跳转操作的事件
设计原理
开发者通过调用通过swan.createInnerAudioContext()创建audioContext对象,并传入id绑定相应的audio标签。通过swan/audio/open端能力在客户端创建MediaPlayer对象,后续通过update接口更细你参数,对播放器的播放、暂停、定位时间点等常用操作均通过audioContext完成。
接口设计
涉及到的端能力:
AudioPlayerAction
目前百度智能小程序底层是通过Android系统的MediaPlayer实现音频播放,第三方可以根据自己的需求自行替换。
接口如下:
3.15 端能力回调说明
接口中回调函数说明
根据逻辑的不同,端上有同步处理和异步处理两种情况。
同步处理:在完成相应的逻辑之后,直接调用以下代码,告诉前端JS的处理结果,又叫一级回调
异步处理:这个操作需要耗时,所以得处理完毕之后,在主动通知JS。
必须先告诉前端JS,已经收到它的命令,通过:
第二步才开始执行异步任务,此时在接口参数UnitedSchemeEntity entity中会有个cb=xxx的参数,这个cb就是异步回调,又叫二级回调
示例
同步回调(又叫一级回调):
删除一个View,是一个同步操作,不耗时,所以直接进行删除操作,操作完毕之后直接通知JS结果即可
异步回调(又叫二级回调)
动过程需要有动画,移动结束之后要通知JS,移动结束了,肯定是耗时操作,需要用异步回调。
4.需要接入方实现的服务
4.1 登录
功能说明
小程序登录功能(调用宿主登录),和宿主强相关
原理
需要宿主维护自己的账号体系
实现
标准接口,后续提供
4.2 授权
功能说明
在符合法务要求的情况下赋予小程序调用必要功能的权限,比如用户信息、直播、地理位置等 敏感功能权限风控,可以随时由用户或者云端平台撤回授权 用户的敏感信息都从开放平台统一输出
原理
暂无,后续提供
实现
暂无,后续提供
5.小程序核心结构、流程
6.第三方接入步骤说明
小程序SDK的仓库地址
http://icode.baidu.com/repos/baidu/searchbox-android/aiapps/tree/master
小程序结构说明
初始化说明
将配置好依赖的库,参考根目录的settigns.gradle build.gradle demo/build.gradle
需要使用apply plugin: 'com.baidu.pyramid.di'在application的build.gradle
在app的application中初始化用到了代码
实现com.baidu.searchbox.ng.ai.apps.ioc.interfaces包小所有的接口(目前需要参考手百的实现方式),demo中是默认实现。
和Server交互的需要有公参,内部可以参考URLConfig.java这个类
每个接入方使用的预置SwanJS都不一样(目前在/lib-ng-aiapps/src/main/assets/aiapps文件夹下),需要找 @侯禹 @任仲桦
后端的开放平台,授权相关 需要申请host_api_key,找 @刘青
理论上就接入完毕了,如有问题直接找 @康森(Android) @刘青(Server) @侯禹(FE)
iOS开源说明
iOS 开源说明
小程序依赖第三方库
外部开源库:
手百内部基础库:
小程序接入说明
接入方需实现的功能和服务
1. 分享
功能说明
小程序菜单点击分享,调起宿主分享功能,此功能需要宿主实现,调用宿主的分享面板
相关协议
BBAMNPPlatformProtocol
接入方法
遵循BBAMNPPlatformProtocol协议,并实现协议中的分享接口
示例
2. 图片
功能说明
相关协议
接入方法
使用方法
遵循BBAMNPPhotoProtocol协议,并实现协议中的图片选择接口。
使用方法
遵循BBAMNPPlatformProtocol协议,并实现协议中的图片预览接口
示例
3. 地图
功能说明
相关协议
接入方法
1、地图绘制、交互
2、地图上显示路线、步行导航
3、检索
示例
4. 定位
功能说明
相关协议
接入方法
示例
5. 支付
功能说明
相关协议
BBAMNPPaymentProtocol
接入方法
聚合支付
待方案确定后补充示例
6. 直播
功能说明
小程序提供视频直播的能力,可以支持播放器在线推流的视频。对应开发者接口是swan.createLivePlayerContext,通过这个接口创建一个LivePlayerContext对象,后续对直播组件的操作均可通过该对象完成。
相关协议
BBAMNPLiveProtocol
接入方法
1.使用方需要实现直播能力,且直播对象需要实现
BBAMNPMessageItemProtocol
协议 2.遵循BBAMNPMessageIMManagerProtocol协议,实现相关接口(返回直播对象)。7. 视频
功能说明
智能小程序提供了视频播放能力,通过实现video抽象接口就可以轻松让您的小程序拥有定制化的视频播放器,让小程序的的产品体验及产品功能更加完善。 开发者通过swan.createVideoContext来创建一个播放器实例,后续有关播放器的操作均在此对象上完成。
相关协议
BBAMNPVideoProtocol
接入方法
遵循BBAMNPVideoProtocol协议,实现相关接口
4.需要宿主提供的基础信息
背景
为了小程序能区分不同的宿主app,需要宿主提供一系列app基础信息,以维持小程序的正常运行。
提供方法
需要提供的信息都在
BBAMNPPlatformProtocol
中定义了接口,宿主app实现这些接口即可