Android SDK接入

接入说明

SDK支持版本:Android 5.0及以上

Android Studio支持版本:3.0以上

接入流程

1、 获取Android签名(APK签名密钥的MD5值)。

2、填写《一键登录开户申请表》,提交给商务进行运营商报备:  申请表下载

3、报备成功后,在平台上开通一键登录账号,获得appId和appSecret。

开发流程

1、导入SDK中libs目录下所有文件到项目的libs目录下,并在gradle中做以下配置:

1
2
3
4
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation fileTree(dir: 'lib', include: ['*.so'])
implementation(name:'CMCCSSOSDK-release', ext: 'aar')
implementation(name:'CTAccountSdk_HY_v3.7.0_all', ext: 'aar')
implementation(name:'Ui-factory_oauth_mobile_3.8.3.1', ext: 'aar')
implementation(name:'loginsdk1.0.4-release', ext: 'aar')
implementation(name:'oneloginsdk-release', ext: 'aar')
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
implementation 'com.alibaba:fastjson:1.2.58'
implementation 'com.squareup.okhttp3:okhttp:3.14.1'
……
}

2、在gradle中使用申请时的签名秘钥来配置signingConfig签名信息,并在编译apk时,使用该签名。

3、在AndroidManifest.xml配置必要的权限支持,SDK也包含动态权限申请。

1
2
3
4
5
6
7
8
9
10
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />

4、配置proguard-rules.pro混淆策略

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-keep class com.cmic.sso.sdk.**{*;}
-keep class cn.com.chinatelecom.account.**{*;}
-dontwarncom.cmic.sso.sdk.**
-keep class com.cmic.sso.sdk.**{*;}
-dontwarncom.unicom.xiaowo.login.**
-keep class com.unicom.xiaowo.login.**{*;}
-dontwarncom.sdk.**
-keep class com.sdk.** { *;}
-dontwarncom.cmcc.allnetlogin.**
-keep class com.cmcc.allnetlogin.client.**{*;}
-keep class com.cmcc.allnetlogin.model.**{*;}
-keep class com.cmcc.allnetlogin.http.**{*;}
-keep class com.cmcc.allnetlogin.utils.**{*;}
-keep class org.apache.commons.codec1.**{*;}
-keep class cn.emay.ql.UniSDK{*;}
-keep class cn.emay.ql.LoginCallback{*;}
-keep class cn.emay.ql.UniLoginActivity{*;}
-keep class cn.emay.ql.utils.**{*;}
-keep class com.lyxxjs.onelogin.sdk.OneLoginSDK{*;}
-keep class com.lyxxjs.onelogin.sdk.OneLoginCallBack{*;}
-keep class com.mob.**{*;}

5、添加Activity和Style声明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!-- 移动 -->
<activity
android:name="com.cmic.sso.sdk.activity.LoginAuthActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:launchMode="singleTop"
android:screenOrientation="unspecified"
android:theme="@style/Theme.ActivityDialogStyle"></activity>
<!-- 联通 -->
<activity
android:name="com.sdk.mobile.manager.login.cucc.OauthActivity"
android:screenOrientation="portrait"
tools:replace="android:theme"
android:theme="@style/Theme.ActivityDialogStyle"
/>
<!-- 电信 -->
<activity
android:name="cn.com.chinatelecom.account.sdk.ui.AuthActivity"
android:exported="false"
android:theme="@style/ct_account_act_theme"
android:screenOrientation="portrait" />
<activity
android:name="cn.com.chinatelecom.account.sdk.ui.PrivacyWebviewActivity"
android:exported="false"
android:theme="@style/ct_account_act_theme"
android:screenOrientation="portrait" />
1
2
3
4
5
<style name="ct_account_act_theme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowBackground">@color/colorTans</item>
<item name="android:windowIsTranslucent">false</item>
<item name="android:windowNoTitle">true</item>
</style>

6、复制联通和电信layout

1
2
activity_oauth.xml                   //联通登录页面
ct_account_auth_activity_dynamic.xml //电信普通登录页面

将以上两个文件复制到res\layout目录下。

注:不可删除组件,不可修改组件ID。仅可修改文字、颜色、LOGO、边距等属性。

7、将一下代码加入使用一键登录的Activity中,即申请表中的登录类:

预准备

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void onCreate(Bundle savedInstanceState) {
……
OneLoginSDK.demoServer=true; //是否使用测试服务器
OneLoginSDK.apiVersion="v1"; //接口版本号(支持多版本)
OneLoginSDK.setConfig("{...}")//自定义配置,如果此处不设定,也可以在WEB管理台中设定
OneLoginSDK.prepare(this, appId,appSecret, new OneLoginCallBack() {
@Override
public void success(String s) {
}
@Override
public void error(String s) {
//隐藏一键登录按钮或提示错误信息
}
});
}

选择一键登录后

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
OneLoginSDK.start(this, new OneLoginCallBack() {
@Override
public void success(String s) {
//调用成功
try {
JSONObject obj=new JSONObject(s);
String mobile=obj.getString("mobile");
//TOKEN可用于进行后台验证
String token =obj.getString("token ");
//跳转到登录成功的Activity
……
} catch (JSONException e) {
}
}

@Override
public void error(String s) {
//一键登录出错,可以提示重试或切换到其它认证方式
}
});

8、UI定制:
(1)接口设定
调用OneLoginSDK.setConfig(“{…}”);将json格式的设定值传入:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
{

"ui": {

"nav": {
"color": "#ffffff",
"content": "一键登录",
"fontSize": 17,
"lineColor": "#cccccc",
"navHidden": false,
"returnImgPath": "arrow_back",
"backgroundColor": "#0086d0"
},

"logo": {
"top": 30,
"width": 70,
"height": 70,
"logoHidden": false,
"backgroundImage": "ic_launcher"
},

"login": {
"top": "100",
"color": "#ffffff",
"content": "本机号码一键登录",
"fontSize": 15,
"backgroundImage": "selector_button_cucc"
},

"mobile": {
"top": 30,
"color": "#333333",
"fontSize": 18
},

"slogan": {
"top": 30,
"color": "#999999",
"fontSize": 10
},

"privacy": {
"href": "https:\/\/www.baidu.com",
"color": "#0085d0",
"label": "自定义协议",
"bottom": 30,
"margin": 50,
"fontSize": 10
}

}

}

(2)WEB管理台中进行一键登录设定
详情查询自定义UI

9、通过token验证手机
详情查询服务接口

错误码

状态码 含义
ERROR_APPID AppId不存在
ERROR_PARAMS 请求参数错误
ERROR_PLATFORM 手机平台错误
ERROR_ENCRYPTION 解密失败
ERROR_DATA 数据格式错误
ERROR_CODE 平台验证错误