Skip to content

SDK for iOS

huamiLilg edited this page Dec 12, 2017 · 20 revisions

一定要确保华米应用(小米运动、手表助手)已经登录,否则只会唤起app而无法授权!!!

注:本文为华米授权iOS终端SDK的新手使用教程,只涉及教授SDK的使用方法,默认读者已经熟悉XCode开发工具的基本使用方法,以及具有一定的编程知识基础等。下文中的SDK都是指华米授权SDK华米SDK Sample Demo源码

1.向华米注册你的应用程序id

2.下载SDK文件

SDK中只包含一个libHuamiSDK.framework

3.搭建开发环境

3.1 通过CocoaPods集成

[1] 在XCode中建立你的工程。
[2] 在工程的Podfile里面添加以下代码:

	  
    pod 'libHuamiSDK'

保存并执行pod install,然后用后缀为.xcworkspace的文件打开工程。

3.2 手动集成

[1] 在XCode中建立你的工程。
[2] 将SDK文件中包含的libHuamiSDK.framework文件导入到测试工程
[3] 在Xcode中,选择你的工程设置项,选中“TARGETS”一栏,在“Build Settings”标签栏的“Other c Flag“添加“-ObjC”效果图如下 配置Other c Flag

3.3 配置华米ID

[1] 在Xcode中,选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“URL type“添加“URL scheme”为你所注册的应用程序id,注意添加scheme的id需要默认添加$(PRODUCT_BUNDLE_IDENTIFIER).前缀,即$(PRODUCT_BUNDLE_IDENTIFIER).xxxxxxxx,其中xxxxxxxx就是你的id。代码如下


	CFBundleURLTypes
	
		
			CFBundleTypeRole
			huami
			CFBundleURLName
			huami
			CFBundleURLSchemes
			
				$(PRODUCT_BUNDLE_IDENTIFIER).xxxxxxxx
			
		
	

效果图如下 配置URLTypes [2] iOS9.0之后好需要在“info”标签栏中增加LSApplicationQueriesSchemes

	
LSApplicationQueriesSchemes
midong
midongauth
mifit
mifitauth
huamiwatch
watchauth

效果图如下 配置白名单

4.在代码中使用开发工具包

[1] 首先引入头文件HMApi和实现HMApiDelegate协议,图片如下 引入库
[1] 要使你的程序启动后SDK能响应你的程序,必须在代码中向SDK注册你的id。(在 AppDelegate 的 didFinishLaunchingWithOptions 函数中向SDK注册id)。


  • (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary )launchOptions { //给的ID没有hm,但是注册的时候必须手动添加hm / 华米授权策略,由于账号数据不互通,暂时只能用这三种策略,其他策略暂时不建议使用 HMApiAuthPolicyHealthOnly: 只用华米健康 HMApiAuthPolicyMiFitOnly: 只用小米运动 HMApiAuthPolicyWatchOnly: 只用手表助手 */ [HMApi registerAppWithAuthPolicy:HMApiAuthPolicyMiFitFirst];
    return YES; }

[2] 重写AppDelegate的openURL方法:

//iOS9之前版本会调用这个方法
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation {
    return [HMApi handleOpenURL:url delegate:self];
}
//iOS9之后才支持的这个方法
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options{
    return [HMApi handleOpenURL:url delegate:self];
}

[3] 现在,你的程序要实现和SDK交互的具体请求与回应,因此需要实现HMApiDelegate协议的一个方法:


- (void)hmApiDelegateDidReceiveResponse:(HMBaseResponse *)response{
    if (response.errorCode == HMApiSuccess) {
        if (response.type == HMAppRequestTypeAuth) {
            UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"授权成功" message:nil preferredStyle:UIAlertControllerStyleAlert];
            [alertController addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleCancel handler:nil]];
            [self.window.rootViewController presentViewController:alertController animated:YES completion:nil];
        }
    } else if (response.errorCode == HMApiErrCodeUserCancel){
        if (response.type == HMAppRequestTypeAuth) {
            UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"取消授权" message:nil preferredStyle:UIAlertControllerStyleAlert];
            [alertController addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleCancel handler:nil]];
            [self.window.rootViewController presentViewController:alertController animated:YES completion:nil];
        }
    } else if (response.errorCode == HMApiErrCodeAuthDeny){
        if (response.type == HMAppRequestTypeAuth) {
            UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"授权失败" message:response.errorMessage preferredStyle:UIAlertControllerStyleAlert];
            [alertController addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleCancel handler:nil]];
            [self.window.rootViewController presentViewController:alertController animated:YES completion:nil];
        }
    }
}

如果第三方程序向支持授权的华米应用发送了sendReq的请求,那么hmApiDelegateDidReceiveResponse会被回调。sendReq请求调用后,会切到华米应用终端程序界面。
[4] 如果你的程序要授权,那么需要调用HMApi的sendRequest函数:


+ (BOOL)sendRequest:(HMBaseRequest *)request;

至此,你已经能使用SDK的API内容了。详细的使用请看下载Sample Demo源码
遇到错误码,请查阅官网API文档