开发者账号接入SDK
一、接入应用注册
所有接入应用都需要在开放平台进行统一注册(可以到open.flyme.cn统一提交接入申请),在注册流程中,应用需要提供“接入应用信息”,开放平台会据此提供应用接入需要client_id和client_secret标识。
1、接入应用信息
在应用注册中需要提供应用接入应用的信息,其中包括
参数 | 是否必填 | 含义 |
redirect_uri | 必须 | 成功授权后的回调地址,必须是注册appid时填写的主域名下的地址,建议设置为网站首页或网站的用户中心。注意需要将url进行URLEncode。 |
scope | 可选 | 请求用户授权时向用户显示的可进行授权的列表。 可填写的值是API文档中列出的业务scope。这些scope对应于开放平台提供的扩展服务,通过不同scope,将可访问服务限制在应用申请的范围,实现对于不同服务的权限管理。一方面服务使用必须通过平台申请,另一方面用户在确认授权时能明确看到对应应用需要申请哪些扩展服务、获取哪些帐号隐私数据等。在保证服务使用的同时,提升用户隐私保护,提升了用户体验。 建议控制授权项的数量,只传入必要的接口名称,因为授权项越多,用户越可能拒绝进行任何授权。 |
其他 | 待补充 |
2、应用标识信息
开发者在开放平台应用管理配置页填写”接入应用信息“之后,开放平台会针对应用分配独立的应用标识信息。
参数 | 含义 |
client_id | 申请应用接入之后,分配给应用的appId |
client_secret | 申请应用接入之后,分配给应用的appKey,该参数用于应用进行AuthCode方式获取access_token,需要保存在接入应用的业务服务器。(对于无服务器应用,可使用implict_grant方式获取access_token) |
3、选择授权方式
接入应用包含两种授权方式,两种方式都可以获得业务token。结合不同的应用场景,接入应用可选择使用不同的授权方式。
(1)AuthCode_Grant
该方式通过AuthCode的方式进行登陆、授权、获取token,主要特点如下:
1.限用于有服务器的接入应用;
2.需要业务服务器支持client_secret的获取;
3.在获取access_token的接口中可获得RefreshToken,在应用使用周期中可通过RefreshToken和client_secret刷新token。
4.授权流程为
- 通过访问统一登陆授权页登陆,并获取auth_code
- 通过业务服务器接口,传递auth_code获取应用的client_secret
- 通过返回的client_secret和auth_code调用统一的access_token获取接口获取access_token和refreshToken
5.Token刷新流程,通过本地保存的refreshToken和应用的client_secret刷新access_token
6.SDK封装了获取AuthCode的逻辑,开发者可以直接使用,具体授权逻辑待补充。
(2)Implicit_Grant
1.不需要业务服务器支持,应用可以直接通过client_id获取access_token;
2.在获取access_token的接口中不可获得RefreshToken。
3.授权流程支持访问统一授权页登陆,授权,获得token。
4.开发者可使用SDK直接调用对应授权方式,具体授权逻辑待补充。
4、定制登陆模块界面
登陆模块界面包含登陆页面、注册界面、找回密码相关界面。需要定制化登陆模块界面的应用,需要遵循统一的登陆界面设计规范,包含必须的视觉元素,提供登陆模块界面设计样式PSD。
针对注册和找回密码界面,因为涉及多种不同的业务逻辑,仅支持界面主色等简单定制。
(1)登陆页面
基础页面请参考通用登陆页面。
界面元素 | 是否保持 | 可定制 | 不可定制 |
账户输入 | 是 | 颜色、字体 | 文案 |
密码输入 | 是 | 颜色、字体 | 文案 |
登陆按钮 | 是 | 颜色、字体 | 文案 |
注册按钮 | 是 | 颜色、字体 | 文案 |
找回密码按钮 | 是 | 颜色、字体 | 文案 |
总体设计 | 是 | 界面主色 |
(2)登陆界面和找回密码界面
基础页面请参考通用的注册和找回密码界面。
界面元素 | 是否保持 | 可定制 | 不可定制 |
总体设计 | 是 | 界面主色 | 业务逻辑 |
二、魅族开放平台MzOpenSDK接入
1、接入方式
开放平台SDK采用aar的方式提供,接入应用可将MzOpenSDK.aar包添加到代码libs目录中,并关联SDK的引用。
说明:
SDK内部在AndroidManifest.xml中已声明了以下权限:
<uses-permission android:name=”android.permission.INTERNET” />
<uses-permission android:name=”android.permission.ACCESS_NETWORK_STATE” />
<uses-permission android:name=”android.permission.GET_ACCOUNTS” />
<uses-permission android:name=”android.permission.USE_CREDENTIALS” />
和登陆页Activity:
<activity
android:name=”sdk.meizu.auth.ui.AuthActivity”
android:launchMode=”singleTask”
android:screenOrientation=”portrait”
android:exported=”false”/>
2、授权登陆
登陆授权的核心管理类为MzAuthenticator,其具体实现包含在MzOpenSDK的aar包当中,开发者需要根据具体的业务需求,通过该类调用不同的授权登陆接口,获得应用授权的关键数据。
如上文所述,魅族开放平台支持两种方式的授权,其分别有不同的适用场景,开发者可以根据应用需要进行选择,并通过MzAuthenticator类分别调用。
(1)AuthCode_Grant
唤起登陆授权页并处理MzAuthCodeCallBack
MzAuthenticator mAuthenticator = new MzAuthenticator(this, CLIENT_ID, REDIRECT_URL);
mAuthenticator.requestCodeAuth(TestAuthInfo.SCOPE, new CodeCallback() {
@Override
public void onError(OAuthError error) throws RemoteException {
String errorMsg = “OAuthError: ” + error.getError();
Toast.makeText(TestAuthActivity.this, errorMsg, Toast.LENGTH_SHORT).show();
}
@Override
public void onGetCode(String code) throws RemoteException {
String authCodeResult = “AuthCode:” + code;
Toast.makeText(TestAuthActivity.this, authCodeResult, Toast.LENGTH_SHORT).show();
}
});
根据authCode去业务服务器请求client_secret
该接口需要业务服务器提供。
获取access_token
根据业务服务器返回的clientSecret和第一步中获取到的authCode,通过开放平台通用的token获取接口获取accessToken。在该授权方式中,返回数据包含
参数 | 含义 |
access_token | 开放平台业务服务依赖的accessToken |
refresh_token | 可缓存到本地用于刷新accessToken |
expire_in | accessToken过期时间 |
其他 |
Token过期处理
在该授权方式中,开放平台支持接入应用通过业务服务器返回的clientSecret和本地缓存的refreshToken刷新accessToken。
(2)Implicit_Grant
唤起登陆授权页并处理MzImplicitCallBack
MzAuthenticator mAuthenticator = new MzAuthenticator(this, CLIENT_ID, REDIRECT_URL);
mAuthenticator.requestImplictAuth(TestAuthInfo.SCOPE, new ImplictCallback() {
@Override
public void onError(OAuthError error) throws RemoteException {
String errorMsg = “OAuthError: ” + error.getError();
Toast.makeText(TestAuthActivity.this, errorMsg, Toast.LENGTH_SHORT).show();
tvAuthResult.setText(errorMsg);
}
@Override
public void onGetToken(OAuthToken token) throws RemoteException {
String oauthTokenResult = “OAuthToken:” + token.getAccessToken();
Toast.makeText(TestAuthActivity.this, oauthTokenResult, Toast.LENGTH_SHORT).show();
tvAuthResult.setText(oauthTokenResult);
}
});
获取access_token
该种授权方式通过步骤一,直接在回调方法中返回了应用需要accessToken。返回数据包含
参数 | 含义 |
access_token | 开放平台业务服务依赖的accessToken |
expire_in | accessToken过期时间 |
其他 |
Token过期处理
该种授权方式在获取token接口中不包含refreshToken,不能直接刷新token。当token过期是重新执行步骤一进行登陆获取。
通过access_token获取用户信息
接口调用请求说明
http请求方式: GET
参数说明
参数 | 是否必须 | 说明 |
access_token | 是 | open api的授权token |
返回说明
正确的json返回:
{“code”:”200″,”message”:””,”redirect”:””,”value”:{“icon”:”http://img.res.meizu.com/img/download/uc/14/62/35/00/00/1462350/w200h200“,
“nickname”:”test_nickname3″,”openId”:”8mUAF421px8wVt2O3eym3saKtCAkRU-71B3qQBccPFg”}
}
参数 | 说明 |
code | 状态码 |
message | 消息内容 |
icon | 用户头像 |
nickname | 用户昵称 |
openId | 开放平台openId |
错误时会返回错误码等信息
校验access_token相关信息
接口调用请求说明
http请求方式: GET
参数说明
参数 | 是否必须 | 说明 |
access_token | 是 | open api的授权token |
返回说明
正确的json返回:
{“code”:”200″,”message”:””,”value”:{“scope”:[],
“open_id”:”8mUAF421px8wVt2O3eym3saKtCAkRU71B3qQBccPFg”,
“client_id”:”z5A8pb9zA5bN”,”expired_at”:1438273448915},”redirect”:””}
参数 | 说明 |
code | 状态码 |
message | 消息内容 |
open_id | 开放平台openId |
client_id | clientId |
expired_at | 过期时间的毫秒表示 |
错误时会返回错误码等信息
3、快速授权登陆
在Flyme系统平台中,如果当前系统登陆了系统帐号并且支持快速登陆。MzOpenSDK封装了应用快速登陆模块,可自动识别到当前系统登陆的Flyme帐号,并跳转到快速授权登陆页面提示用户可使用系统帐号快速登陆应用。在该登陆页用户也可以根据使用场景切换为非系统帐号登陆。
在此逻辑中,SDK封装了中间处理过程,对于开发者登陆授权接口