1. JdPlaySdk iOS 集成文档
1.1. 修订记录
版本 | 日期 | 修改记录 | 修改人 |
---|---|---|---|
V1.0.0 | 20160819 | 初始版本 | MuYang |
V1.2.0 | 20161117 | 开放音乐资源请求 | MuYang |
V1.2.3 | 20170419 | 开放设备管理模块 | MuYang |
V1.2.4 | 20190610 | 开放音乐搜索功能 | MuYang |
1.2. JdPlaySdk概述
JdPlaySdk.framework用于局域网内媒体发现和媒体控制。第三方可 以采用两种方式接入: 1.基于开放 demo接入:接入简单,短时间内可接入完成(推荐方式) 2.基于开放 SDK 接口接入:采用MVP模式开发
1.3. demo下载
百度网盘下载链接: 链接: https://pan.baidu.com/s/179xcJ6HirWoDVofAcsJN5A 密码: 3vix
文件目录:jdplay_open_sdk_ios
1.4. 基于开放 SDK 的接入流程
1.将 JdPlaySdk.framework拖拽到工程导航视图(project navigator) 中的 Frameworks 虚拟目录下。
2.添加 SDK依赖的系统库文件。分别是“SystemConfiguration. framework”、“libstdc++.tbd”、“libz.1.2.5.tbd”、 “AVFoundation.framework”、“Foundation.framework”。另外 还 需添加的第三方库有 Reachability、MJRefresh、MJExtension。
3. 禁用 Xcode7下iOS9 App 传输安全,修复无法连接服务器错误,在项目 info.plist 中添加一个键“App Transport Security Settings”,类型 为 Dictionary,在该 dictionary 下添加一个键“Allow Arbitrary Loads”,类型为 Boolean,值为 YES,然后保存文件。
1.5. 开放SDK接口详解
(注意:此接口非正式,仅作demo演示用)
1.5.1. JdPushPlayListManager 音乐推送单例类
1. sharedInstance
/**
* 初始化单例类JdPushPlayListManager
*/
+(JdPushPlayListManager *)sharedInstance;
2. pushDouBanListWithCategory:
/**
* 推送豆瓣歌单至设备端播放
* @param model 音乐分类模型
*/
- (void)pushDouBanListWithCategory:(JdCategoryModel *)model;
3. pushPlayListWithInfos:withIndex:
/**
* 推送歌单中的某首歌曲至设备端播放
* @param models 歌曲数组
* @param index 要播放的歌曲在列表中的下标
*/
-(void)pushPlayListWithInfos:(NSArray *)models withIndex:(int)index;
1.5.2. JdDeviceListContract 设备列表相关接口
1. onJdDeviceInfoChange:
/**
* 当JDPlay设备状态发生改变时回调,设备状态包括设备发现、上线、离线等
*
* @param infos JDPlay设备信息列表
*/
-(void)onJdDeviceInfoChange:(NSArray *)infos;
2. onLinkDeviceBySoundWave:
/**
* 声波配网成功连接设备的回调
*
* @param device 设备信息
*/
-(void)onLinkDeviceBySoundWave:(JdDeviceInfo *)device;
3. selectDevice:
/**
* 选中JDPlay设备作为当前操作设备,因为局域网内可能存在多个JDPlay设备
*/
-(void)selectDevice:(JdDeviceInfo *)device;
4. getSelectedDeviceUuid
/**
* 获取当前选中JDPlay设备的id
*
* @return JDPlay设备的id
*/
-(NSString *)getSelectedDeviceUuid;
1.5.3. JdDeviceListPresenter 设备列表单例类
1. sharedManager
/**
* 初始化
*
* @return JdDeviceListPresenter实例
*/
+(instancetype)sharedManager;
2. getDeviceStateInfo:
/**
* 获取当前设备信息
* @param deviceInfoStr 设备信息
*/
-(void)getDeviceStateInfo:(char *)deviceInfoStr;
1.5.4. JdDeviceContract 设备相关接口
View层相关接口
1. onGetDeviceMode:
/**
获取设备模式的回调
@param dict 装有模式的字典
*/
-(void)onGetDeviceMode:(NSMutableDictionary *)dict;
2. onGetShutDowmStatus:
/**
获取设备开关机状态的回调
@param result 开关机状态 result为1表示开机状态,为0表示关机状态
*/
-(void)onGetShutDowmStatus:(int)result;
3. onGetAlarm: nextAlarmArr:
/**
获取设备所有闹钟的回调
@param alarms 装有全部闹钟的数组 <包括普通闹钟、开机闹钟、关机闹钟>
@param nextAlarms 装有下一个响应闹钟的数组 <包括普通闹钟、开机闹钟、关机闹钟>
*/
-(void)onGetAlarm:(NSMutableArray *)alarms nextAlarmArr:(NSMutableArray *)nextAlarms;
4. onGetBTName:
/**
获取蓝牙密码的回调
@param btPwd 蓝牙密码
*/
-(void)onGetBTPassword:(NSString *)btPwd;
5. onGetLightMode:
/**
获取灯开关状态的回调
@param mode 开关状态 mode值为1表示开,为0表示关
*/
-(void)onGetLightMode:(int)mode;
6. onGetLightBrightness:
/**
获取灯亮度的回调
@param bright 灯的亮度 取值范围在0 ~ 100
*/
-(void)onGetLightBrightness:(int)bright;
7. onGetSmartLogInfo:
/**
获取登录状态的回调
@param 状态信息
*/
-(void)onGetSmartLogInfo:(NSString *)res;
8. onSetClock:
/**
设置闹钟的回调
@param res 闹钟id
*/
-(void)onSetClock:(NSString *)res;
9. onUpdateClock:
/**
更新闹钟的回调
@param res 等于1表示更新成功,等于0表示更新失败
*/
-(void)onUpdateClock:(NSString *)res;
10. onDeleteClock:
/**
删除闹钟的回调
@param res 等于1表示删除成功,等于0表示删除失败
*/
-(void)onDeleteClock:(NSString *)res;
11. onSetBTPwd:
/**
设置蓝牙密码的回调
@param res 蓝牙密码
*/
-(void)onSetBTPwd:(NSString *)res;
12. onSetBTName:
/**
获取蓝牙名称的回调
@param res 蓝牙名称
*/
-(void)onSetBTName:(NSString *)res;
13.onSetDeviceName:data:
/**
更改设备名称的回调
@param code 标志是否更改成功 code为1成功,为0失败
@param data 设备名称
*/
-(void)onSetDeviceName:(int)code data:(NSString *)data;
14. onSetDeviceMode:
/**
设置设备模式的回调
@param res 默认成功,暂不处理
*/
-(void)onSetDeviceMode:(NSString *)res;
15. onSetLightMode:
/**
设置灯开关的回调
@param res 等于1表示设置成功,等于0表示设置失败
*/
-(void)onSetLightMode:(NSString *)res;
16. onSetLightBrightness:
/**
设置灯亮度的回调
@param res 默认成功,暂不处理
*/
-(void)onSetLightBrightness:(NSString *)res;
17. onSmartDeviceLogin:message:
/**
登录回调
@param code 为0表示登录成功 非0表示登录失败
@param message 登录信息
*/
-(void)onSmartDeviceLogin:(int)code message:(NSString *)message;
18. onSmartDeviceLogout:message:
/**
登出回调
@param code 为0表示登出成功 非0表示登出失败
@param message 登出信息
*/
-(void)onSmartDeviceLogout:(int)code message:(NSString *)message;
19. onRegisterSuccessWithEmail:pwd:
/**
注册成功的回调
@param email 注册邮箱
@param pwd 密码
*/
-(void)onRegisterSuccessWithEmail:(NSString *)email pwd:(NSString *)pwd;
20. onNotifyShareSuccess
/**
美的分享成功的回调
*/
-(void)onNotifyShareSuccess;
21. onNotifyShareFailWitherrCode:erroMsg:
/**
美的分享失败的回调
@param errCode 错误码
@param erroMsg 错误信息
*/
-(void)onNotifyShareFailWitherrCode:(int)errCode erroMsg:(NSString *)erroMsg;
22. onQueryBinderSuccess:
/**
* 获取设备绑定者的回调
* @param binders 绑定者数组
*/
-(void)onQueryBinderSuccess:(NSMutableArray *)binders;
23. onUnbindSuccess:
/**
* 解绑设备联系人的回调
* @param 状态码 0 解绑成功 非0 解绑失败
*/
-(void)onUnbindSuccess:(int)code;
24. onUpdate:msg:
/**
* 检查设备是否有更新的回调
@param state 更新状态码 UPDATE_STATE_NO_UPDATE 无更新
UPDATE_STATE_MSG 更新过程中提示信息
UPDATE_STATE_START_UPDATE 存在更新 (存在更新调用startUpdate()则设备端会自动下载并更新)
@param msg 更新消息
*/
-(void)onUpdate:(int)state msg:(NSString *)msg;
25. onTimeOut
/**
* 执行指令超时的回调
*/
-(void)onTimeOut;
26. onChangeDeviceMode:
/**
改变设备模式的回调
@param mode 当前模式
*/
-(void)onChangeDeviceMode:(NSString *)mode;
27. onQuitShareSuccess
/**
取消分享成功
*/
-(void)onQuitShareSuccess;
28. onQuitShareFail:msg:
/**
取消分享失败
@param code 错误码 0表成功 非0表失败
@param msg 错误信息详情
*/
-(void)onQuitShareFail:(int)code msg:(NSString *)msg;
Presenter层接口
参数设置详情见DEMO
1. setClock:
/** 设置闹钟 */
-(void)setClock:(NSString *)args;
2. updateClock:
/** 更新闹钟 */
-(void)updateClock:(NSString *)arg;
3. deleteClock:
/** 删除闹钟 */
-(void)deleteClock:(NSString *)args;
4. getAlarmClock
/** 获取闹钟 */
-(void)getAlarmClock;
5. setDeviceName:
/** 更改设备名 */
-(void)setDeviceName:(NSString *)args;
6. setDeviceStatus:
/** 设置设备 开 关 */
-(void)setDeviceStatus:(BOOL)args;
7. getDeviceMode
/** 获取设备模式 */
-(void)getDeviceMode;
8. getShutdownStatus
/** 获取开关机状态 */
-(void)getShutdownStatus;
9. setDeviceMode:
/** 设置设备模式 */
-(void)setDeviceMode:(NSString *)args;
10. getBtName
/** 获取蓝牙名称 */
-(void)getBtName;
11. getBtPassword
/** 获取蓝牙密码 */
-(void)getBtPassword;
12. setBtName:
/** 设置蓝牙名称 */
-(void)setBtName:(NSString *)args;
13. setBtPwd:
/** 设置蓝牙密码 */
-(void)setBtPwd:(NSString *)args;
14. getLightMode
/** 获取灯状态 */
-(void)getLightMode;
15. getLightBrightness
/** 获取灯亮度 */
-(void)getLightBrightness;
16. setLightMode:
/** 设置灯 开或关 */
-(void)setLightMode:(NSString *)args;
17. setLightBrightness:
/** 设置灯亮度 */
-(void)setLightBrightness:(NSString *)args;
18. checkDeviceUpdate
/** 检查设备更新 */
-(void)checkDeviceUpdate;
19. startUpdate
/** 开始更新设备 */
-(void)startUpdate;
20. unBindWithQQ
/** 解除QQ物联绑定 */
-(void)unBindWithQQ;
21. getQQBinders:
/** 查询QQ物联绑定者列表
* TYPE_QQ = 1
* TYPE_WX = 2
* TYPE_BOX = 3
*/
-(void)getQQBinders:(int)binderType;
22. loginWithAccount:pwd:
/** 登录 */
-(void)loginWithAccount:(NSString *)acc pwd:(NSString *)pwd;
23. logout:
/** 登出 */
-(void)logout:(NSString *)args;
24. getDeviceLogInfo
/** 获取登录信息 */
-(void)getDeviceLogInfo;
25. mideaRegisterWithVendor:sn:
/**
注册
@param vendor 厂商
@param sn 设备的uuid
*/
-(void)mideaRegisterWithVendor:(NSString *)vendor sn:(NSString *)sn;
26. notifyShareWithVendor:msg:
/**
* 分享接口
* @param vendor 厂商
*/
-(void)notifyShareWithVendor:(NSString *)vendor msg:(NSString *)msg;
27. getCurrentDeviceMode
/**
获取当前设备模式
具体模式表示请到JdDeviceMode.h查看
@return 设备模式
*/
-(NSString *)getCurrentDeviceMode;
28. quitShareHomeWithHouseId:
/**
取消分享
@param houseId 家庭ID
*/
-(void)quitShareHomeWithHouseId:(NSString *)houseId;
1.5.5. JdDevicePresenter 设备单例类
1. shareInstance
/**
初始化
*/
+(instancetype)shareInstance;
2. getCurrentDeviceInfo:action:str:
/**
设备端回调方法
@param type 类型
@param action 指令
@param str 详情
*/
-(void)getCurrentDeviceInfo:(int)type action:(int)action str:(NSString *)str;
1.5.6. JdPlayControlContract 播放控制相关接口
View层接口
1. setVolume:
/**
* 设置音量百分比
*
* @param percent 0-100 音量百分比
*/
-(void)setVolume:(int)percent;
2. setPosition:
/**
* 设置当前播放时间
*
* @param position 时间,单位秒
*/
-(void)setPosition:(int)position;
3. setDuration:
/**
* 设置总时间
*
* @param percent 时间,单位秒
*/
-(void)setDuration:(int)duration;
4. setSeekProgress:
/**
* 设置跳播
*
* @param percent 跳播的百分比 0-1
*/
-(void)setSeekProgress:(float)percent;
5. setPlayOrPause:
/**
* 设置播放或暂停状态
*
* @param isPlay 0:暂停 1:播放
*/
-(void)setPlayOrPause:(BOOL)isPlay;
6. setPlayMode:
/**
* 设置播放模式
*
* @param order 0:顺序播放 1:单曲循环 2:随机播放
*/
-(void)setPlayMode:(int)order;
7. setSongName:
/**
* 设置歌曲名称
*
* @param name 歌曲名称
*/
-(void)setSongName:(NSString *)name;
8. setSingerName:
/**
* 设置歌手名称
*
* @param name 歌手名称
*/
-(void)setSingerName:(NSString *)name;
9. setAlbumPic:
/**
* 设置专辑图片链接
*
* @param url 专辑图片链接
*/
-(void)setAlbumPic:(NSString *)url;
10. setPlaylist:
/**
* 设置播放列表
*
* @param songs 播放列表
*/
-(void)setPlaylist:(NSArray *)songs;
11. onEditPlaylist:
/**
* 编辑播放列表的反馈状态
* @param code 状态码 0 成功 非0 不成功
*/
-(void)onEditPlaylist:(int)code;
Presenter层接口
1. togglePlay
/**
* 播放暂停切换
*/
-(void)togglePlay;
2. next
/**
* 下一首
*/
-(void)next;
3. prev
/**
* 上一首
*/
-(void)prev;
4. changePlayMode
/**
* 改变播放模式
*/
-(void)changePlayMode;
5. changeVolume:
/**
* 设置音量
*
* @param percent 0-100 音量百分比
*/
-(void)changeVolume:(int)percent;
6. seekTo:
/**
* 跳播
*
* @param percent 跳播百分比
*/
-(void)seekTo:(float)percent;
7. getPlayList
/**
* 获取播放列表
*/
-(void)getPlayList;
8. playPlaylistWithPos:
/**
* 播放播放列表中点击的歌曲
*
* @param pos 选中的歌曲在播放列表中的下标(从0开始)
*/
-(void)playPlaylistWithPos:(int)pos;
9. getPlayMode
/**
* 获取当前播放模式
* 0:顺序播放 1:单曲循环 2:随机播放
*/
-(int)getPlayMode;
10. clearPlayList
/**
* 清空整个列表
*/
-(void)clearPlayList;
11. deletePlayListByPos:
/**
* 根据下标删除当前播放列表中的某首歌
* @param pos 待删除的歌曲下标
*/
-(void)deletePlayListByPos:(int)pos;
12 addSongToNextPlay:
/**
* 设置歌曲为下一首播放
* @param song 待播放的歌曲
*/
-(void)addSongToNextPlay:(EglSong *)song;
13 searchMusicWithKeyword:
/**
搜索歌曲
@param keyword 被搜索的关键字
*/
-(void)searchMusicWithKeyword:(NSString *)keyword;
1.5.7. JdPlayControlPresenter 播放控制单例类
1. onCurrentPlaySongChange:
/**
当前播放歌曲改变的回调
@param title 歌曲名
*/
- (void)onCurrentPlaySongChange:(NSString *)title;
2. onCurrentPlayStatusChange:
/**
当前播放状态改变的回调
@param state true表播放状态 false表暂停状态
*/
- (void)onCurrentPlayStatusChange:(BOOL)state;
3. onSearchMusic:
/**
查询歌曲的回调
@param songs 查询到的歌曲数组
*/
-(void)onSearchMusic:(NSMutableArray *)songs;
4. onTimeOut
/**
查询歌曲超时的回调
*/
-(void)onTimeOut;
5. getCurrentPlayInfoWithType:action:payload:
/**
* 媒体类信息的回调
* @param type 类型
* @param action 指令
* @param payLoadInfoStr 详细信息
*/
-(void)getCurrentPlayInfoWithType:(int)type action:(int)action payload:(char *)payLoadInfoStr;
6. sharedManager
/**
初始化
*/
+(instancetype)sharedManager;
7. onNextToPlaySuccess
/**
添加歌曲至下一首播放成功的回调
*/
- (void)onNextToPlaySuccess;
8. onNextToPlayFail:
/**
添加歌曲至下一首播放失败的回调
@param msg 失败信息
*/
- (void)onNextToPlayFail:(NSString *)msg;
9. onNextToPlayTimeOut
/**
添加歌曲至下一首播放超时的回调
*/
- (void)onNextToPlayTimeOut;
1.5.8. JdMusicSourceContract 音乐源相关接口
View层相关接口
1. setMusicResource:isLast:loadMore:
/**
请求音乐源成功的回调
@param infos 资源数组
@param last 是否是最后一级目录
@param loadMore 是否加载更多
*/
- (void)setMusicResource:(NSMutableArray *)infos isLast:(BOOL)last loadMore:(BOOL)loadMore;
2. onGetMusicResourceFail:errMsg:
/**
请求音乐源失败的回调
@param infos 资源数组
@param last 是否是最后一级目录
@param loadMore 是否加载更多
*/
- (void)onGetMusicResourceFail:(int)erroCode errMsg:(NSString *)errMsg;
Presenter层相关接口
1. getMusicResource:
/**
根据model,获取音乐源
@param model 音乐源种类模型
*/
- (void)getMusicResource:(JdCategoryModel *)model;
2. playWithEglSongs:pos:
/**
播放歌曲
@param songs 歌曲数组
@param pos 当前播放歌曲在数组中的下标
*/
- (void)playWithEglSongs:(NSArray *)songs pos:(int)pos;
3. playWithCategory:
/**
播放歌曲
@param model 分类模型
*/
- (void)playWithCategory:(JdCategoryModel *)model;
4. getMusicResourceMore
/**
加载更多音乐源
*/
- (void)getMusicResourceMore;
1.5.9. JdMusicResourcePresenter 音乐源类
1. initWithDelegate:
/**
初始化方法
@param vc 代理对象
@return JdMusicResourcePresenter实例
*/
-(JdMusicResourcePresenter *)initWithDelegate:(id<MusicResourceView>)vc;
1.5.10. SoundWaveTool 声波配网相关接口
1. onSoundWaveEnd
/**
声波发送完毕的接口
*/
- (void)onSoundWaveEnd;
2. getWifiName
/**
获取网关
@return WiFi名
*/
- (NSString*)getWifiName;
3. startPlayWithPwd:
/**
开始发送声波
@param pwd WiFi密码
*/
- (void)startPlayWithPwd:(NSString *)pwd;
4. generatedRandomNumber
/**
获取声波随机数
@return 随机数字符串
*/
- (NSString *)generatedRandomNumber;
5. exitNetConfig
/**
退出配网模式
*/
-(void)exitNetConfig;
1.6. 注意事项
- 本 SDK 只适用于真机调试。
在集成 SDK 的过程中中要确保 JdPlayManagerInit()先于 updateInterfaceWithReachability:(监测网络状态发生改变调用的方 法)调用,这样才能成功开启底层服务。
在 AppDelegate.m 文件的方法里加入以下代码,确保程序进入后 台后 socket 保持长连接,以此达到流畅播控音乐的目的。
代码如下:
- (void)applicationDidEnterBackground:(UIApplication *)application {
JdPlay_appOnSuspend();
//程序进入后台保持socket长连接
UIApplication * app = [UIApplication sharedApplication];
__block UIBackgroundTaskIdentifier bgTask;
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
dispatch_async(dispatch_get_main_queue(),^{
if(bgTask != UIBackgroundTaskInvalid)
{
bgTask = UIBackgroundTaskInvalid;
}});
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{ dispatch_async(dispatch_get_main_queue(),^{
if(bgTask != UIBackgroundTaskInvalid){
bgTask = UIBackgroundTaskInvalid;
}});
});
}
- 下图中代码块不一定非要在 application:didFinishLaunchingWithOptions: 方法中调用
下图展示了如何在设备列表界面初始化SDK,接收设备列表回调