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下载

  1. 百度网盘下载链接: 链接: https://pan.baidu.com/s/179xcJ6HirWoDVofAcsJN5A 密码: 3vix

  2. 文件目录: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: 方法中调用

image1

​ 下图展示了如何在设备列表界面初始化SDK,接收设备列表回调

image2

results matching ""

    No results matching ""