Android SDK 接入指南
概覽
此文檔為Andorid一鍵登陸SDK1.0.1版本開發(fā)文檔。點(diǎn)擊下載SDK以及Demo
名詞解釋
- 初始化:一次有效,通過(guò)getLoginAccessCode方法完成,會(huì)進(jìn)??絡(luò)流量請(qǐng)求。預(yù)取號(hào)失敗返回錯(cuò)誤信息,業(yè)務(wù)方可跳轉(zhuǎn)到其他登錄方式;預(yù)取號(hào)成功后,在回調(diào)函數(shù)中返回已開啟蜂窩流量的運(yùn)營(yíng)商類型,脫敏手機(jī)號(hào)(188**8888)和accessCode,可縮短拉起登錄授權(quán)頁(yè)面的時(shí)間。建議在判斷當(dāng)前?戶處于未登錄狀態(tài),且在執(zhí)行拉起登錄授權(quán)頁(yè)前調(diào)用(1-3s),已登錄狀態(tài)?戶請(qǐng)不要調(diào)?該?法。
- Token:?來(lái)和后臺(tái)置換完整?機(jī)號(hào)(18888888888)。?次有效。通過(guò)getLoginToken方法獲取。必須在授權(quán)頁(yè)(見(jiàn)授權(quán)頁(yè)規(guī)范)中調(diào)用。Token是業(yè)務(wù)方實(shí)現(xiàn)登錄的必備參數(shù)。
- 授權(quán)頁(yè):取token必須在授權(quán)頁(yè)中調(diào)用,各運(yùn)營(yíng)商對(duì)授權(quán)頁(yè)樣式要求有所不同(見(jiàn)授權(quán)頁(yè)規(guī)范)。
一鍵登錄能力時(shí)序表
準(zhǔn)備工作
前置條件:
- 本SDK必須打開蜂窩數(shù)據(jù)流量并且手機(jī)操作系統(tǒng)給予應(yīng)用蜂窩數(shù)據(jù)權(quán)限才能使用
- ?持中國(guó)移動(dòng)3/4G、聯(lián)通3/4G、電信4G的取號(hào)能?,在3G?絡(luò)下時(shí)延會(huì)更?
- ?持單數(shù)據(jù)?絡(luò)/數(shù)據(jù)?絡(luò)與WiFi?絡(luò)雙開,不?持單WiFi?絡(luò)
- 對(duì)于雙卡?機(jī),只對(duì)當(dāng)前流量卡取號(hào),雙卡均未開數(shù)據(jù)流量SDK將會(huì)返回錯(cuò)誤碼
- SDK請(qǐng)求過(guò)程需要消耗用戶少量數(shù)據(jù)流量(國(guó)外漫游時(shí)可能會(huì)產(chǎn)生額外的費(fèi)用)
- 一鍵免密登錄接口必須在授權(quán)頁(yè)面中調(diào)用
接入流程
前往(SUBMAIL控制臺(tái))申請(qǐng)appid和appkey,并按要求填寫申請(qǐng)所需資料。
開發(fā)流程
1.下載SDK以及demo代碼
請(qǐng)?jiān)谀~戶一鍵登錄控制臺(tái)下下載SDK包以及代碼示列。
2.搭建開發(fā)環(huán)境
- Android Studio版本需要使用3.0以上
- 集成 'quick_login_android_5.9.5 submail_onelogin 到項(xiàng)目的libs目錄下,并在gradle中做以下配置:
compileOptions {
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
}
repositories {
flatDir { dirs 'libs' }
}
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation(name: 'quick_login_android_5.9.5', ext: 'aar')
implementation(name: 'submail_onelogin', ext: 'aar')
implementation 'com.alibaba:fastjson:1.2.58'
implementation 'com.squareup.okhttp3:okhttp:3.6.0'
- 在gradle中配置signingConfig簽名信息,并在編譯apk時(shí),使用該簽名。
將app包名和簽名提供給SUBMAIL審核。
平臺(tái)需要校驗(yàn)app包名和簽名,請(qǐng)務(wù)必提供準(zhǔn)確信息。信息更改后,需要重新向SUBMAIL重新申請(qǐng)應(yīng)用能力。
可使用命令:keytool -v -list -keystore 你的應(yīng)用簽名文件.jks獲取簽名的MD5信息。 - 在AndroidManifest.xml配置必要的權(quán)限支持,并在代碼中做動(dòng)態(tài)權(quán)限申請(qǐng)。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
- 配置Activity
<activity
android:name="com.cmic.gen.sdk.view.GenLoginAuthActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="unspecified"
android:launchMode="singleTop">
</activity>
- 配置混淆策略
-dontwarn com.cmic.gen.sdk.**
-keep class com.cmic.gen.sdk.**{*;}
-keep class com.submail.onelogin.sdk.client.SubSDK {*;}
-keep class com.submail.onelogin.sdk.client.SubCallback {*;}
-keep class com.submail.onelogin.sdk.model.*{*;}
-keep class com.submail.onelogin.sdk.utils.Logger{*;}
-keep class com.submail.onelogin.sdk.utils.CallbackUtil{*;}
SDK方法及說(shuō)明
初始化請(qǐng)求(init方法)
本方法用于初始化SDK,SDK完成網(wǎng)絡(luò)請(qǐng)求并根據(jù)運(yùn)營(yíng)商類型自動(dòng)選擇配置信息。
方法示列
public static void init(Context context, String appid, String appkey, SubCallback subCallback)
參數(shù)說(shuō)明
參數(shù) | 是否必選 | 類型 | 說(shuō)明 |
---|---|---|---|
context | 是 | Context | 上下文 |
appid | 是 | String | Submail一鍵登錄應(yīng)用id |
appkey | 是 | String | Submail一鍵登錄應(yīng)用秘鑰 |
callback | 是 | SubSDK.SubCallback | SubCallback為回調(diào)監(jiān)聽(tīng)器,需要調(diào)用者自己實(shí)現(xiàn);void onResult(boolean isSuccess, String result)是該接口中唯一的抽象方法 |
響應(yīng)參數(shù)
SubCallback 響應(yīng)參數(shù):
參數(shù) | 類型 | 說(shuō)明 |
---|---|---|
isSucces | boolean | 是否初始化成功 |
result | String | 初始化結(jié)果描述 |
代碼示列
SubSDK.init(mCtx, appid, appkey, new SubCallback() {
@Override
public void onResult(boolean var1, final String var2) {
Logger.d("測(cè)試結(jié)果:", var1 + "," + var2);
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(mCtx, var2, Toast.LENGTH_SHORT).show();
}
});
}
});
獲取AccessCode(getLoginAccessCode方法)
方法原型
public static void getLoginAccessCode(Context ctx, SubCallback callback)
參數(shù)說(shuō)明
參數(shù) | 是否必選 | 類型 | 說(shuō)明 |
---|---|---|---|
context | 是 | Context | 上下文 |
callback | 是 | SubSDK.SubCallback | SubCallback為回調(diào)監(jiān)聽(tīng)器,需要調(diào)用者自己實(shí)現(xiàn);void onResult(boolean isSuccess, String result)是該接口中唯一的抽象方法 |
響應(yīng)參數(shù)
SubCallback 響應(yīng)參數(shù):
參數(shù) | 類型 | 說(shuō)明 |
---|---|---|
isSucces | boolean | 是否獲取accesscode成功 |
result | String | 獲取accesscode結(jié)果描述 |
callback成功時(shí)返回參數(shù):
{
"accessCode":"nmf12db627f7a44f268d56813bfdf89ee4",
"expiredTime":"3600",
"operator":3,
"others":{"gwAuth":"1306","reqId":"24bd961b4f47380bb5cbd5cded57a041"},
"phone":"199****5361"
}
代碼示列
SubSDK.getLoginAccessCode(mCtx, new SubCallback() {
@Override
public void onResult(boolean isSuccess, String result) {
if(isSuccess){
//獲取AccessCode成功處理邏輯,需要客戶自行實(shí)現(xiàn)
}
}
});
獲取Token(getLoginToken方法)
方法原型
public static void getLoginToken(Context ctx, GenAuthThemeConfig genAuthThemeConfig, SubCallback callback)
參數(shù)說(shuō)明
參數(shù) | 是否必選 | 類型 | 說(shuō)明 |
---|---|---|---|
context | 是 | Context | 上下文 |
genAuthThemeConfig | 是 | genAuthThemeConfig | 移動(dòng)授權(quán)頁(yè)配置參數(shù) |
callback | 是 | SubSDK.SubCallback | SubCallback為回調(diào)監(jiān)聽(tīng)器,需要調(diào)用者自己實(shí)現(xiàn);void onResult(boolean isSuccess, String result)是該接口中唯一的抽象方法 |
響應(yīng)參數(shù)
SubCallback 響應(yīng)參數(shù):
參數(shù) | 類型 | 說(shuō)明 |
---|---|---|
isSucces | boolean | 是否獲取token成功 |
result | String | 獲取token結(jié)果描述 |
callback成功時(shí)返回參數(shù):
{
"operator":3,
"others":{
"phone":
"199****5361",
"gwAuth":"5079",
"expiredTime":"3600",
"reqId":"c8 bf5081e5ef3b6492a46c139e540937"
},
"token":"nm8eff132bb0414c63a08390cb976c2287"
}
代碼示列
public void getLoginToken(){
SubSDK.getLoginToken(mCtx, loginPageConfig,new SubCallback() {
@Override
public void onResult(boolean isSuccess, String result) {
if(isSuccess){
//獲取token成功處理邏輯,需要客戶自行實(shí)現(xiàn)
}
}
});
}
獲取手機(jī)號(hào)碼
為了提高安全性,不建議在app端直接獲取手機(jī)號(hào)碼明文,需要開發(fā)者自行實(shí)現(xiàn)。通過(guò)獲取的token值對(duì)接獲取手機(jī)號(hào)碼API,即可以換取手機(jī)號(hào)碼,具體請(qǐng)參考獲取手機(jī)號(hào)碼API文檔。
SDK其他方法說(shuō)明
1.獲取?絡(luò)狀態(tài)和運(yùn)營(yíng)商類型
方法原型
public static int getNetworkType(Context context);
參數(shù)說(shuō)明
參數(shù) | 是否必選 | 類型 | 說(shuō)明 |
---|---|---|---|
context | 是 | Context | 上下文 |
返回參數(shù)
參數(shù) | 類型 | 說(shuō)明 |
---|---|---|
networktyp e | int | ?絡(luò)類型:0-未知、1-數(shù)據(jù)流量、2-純WiFi、3-流量+WiFi |
2.獲取?絡(luò)狀態(tài)和運(yùn)營(yíng)商類型
方法原型
public static int getOperatortype(Context context);
參數(shù)說(shuō)明
參數(shù) | 是否必選 | 類型 | 說(shuō)明 |
---|---|---|---|
context | 是 | Context | 上下文 |
返回參數(shù)
參數(shù) | 類型 | 說(shuō)明 |
---|---|---|
operatortype | int | 運(yùn)營(yíng)商類型:0-未知;1-移動(dòng);2-聯(lián)通;3-電信 |
3.打印日志
方法原型
public static void isShowLog(boolean isShowLog)
參數(shù)說(shuō)明
參數(shù) | 是否必選 | 類型 | 說(shuō)明 |
---|---|---|---|
isShowLog | 是 | boolean | 是否打印日志 |
4.刪除取號(hào)緩存
方法原型
public void delScrip()
5.設(shè)置請(qǐng)求超時(shí)時(shí)間
方法原型
public void setOverTime(long overTime)
參數(shù)說(shuō)明
參數(shù) | 是否必選 | 類型 | 說(shuō)明 |
---|---|---|---|
overTime | 否 | long | 設(shè)置超時(shí)時(shí)間(單位:秒) |
配置授權(quán)頁(yè)
開發(fā)者可以通過(guò)在調(diào)用getLoginToken方法shi傳入AuthThemeConfig參數(shù)進(jìn)行移動(dòng)授權(quán)頁(yè)的配置。
GenAuthThemeConfig配置參數(shù)說(shuō)明
方法 | 說(shuō)明 |
---|---|
狀態(tài)欄 | |
setStatusBar | 設(shè)置狀態(tài)欄顏色(系統(tǒng)版本在5.0以上可設(shè)置)、字體顏色(系統(tǒng)版本6.0以上可以設(shè)置黑色、白色) |
服務(wù)條款 | |
setNavTextColor | 設(shè)置服務(wù)條款標(biāo)題字體顏色 |
setNavColor | 設(shè)置服務(wù)條款標(biāo)題顏? |
setNavTextSize | 設(shè)置服務(wù)條款標(biāo)題字體大小 |
setClauseLayoutResID | 設(shè)置服務(wù)條款標(biāo)題布局資源?件ID(包括返回按鈕) |
授權(quán)?布局 | |
setAuthContentView | 設(shè)置授權(quán)?布局顯?View |
setAuthLayoutResID | 設(shè)置授權(quán)頁(yè)布局文件ID |
安卓底部導(dǎo)航欄?適應(yīng) | |
setFitsSystemWindows | 開啟安卓底部導(dǎo)航欄?適應(yīng),開啟后,導(dǎo)航欄喚起時(shí),授權(quán)??元素 也會(huì)相對(duì)變化;不開啟?適應(yīng),?定義內(nèi)容可以鋪滿全屏,設(shè)置狀態(tài) 欄透明后,可以達(dá)到沉浸式顯?效果。true-開啟?適應(yīng),false-關(guān)閉 ?適應(yīng),默認(rèn)開啟。 |
授權(quán)頁(yè)號(hào)碼欄 | |
setNumberColor | 設(shè)置手機(jī)號(hào)碼字體顏色 |
setNumberSize | 設(shè)置號(hào)碼欄字體大小 |
setNumFieldOffsetY | 設(shè)置號(hào)碼欄相對(duì)于標(biāo)題欄下邊緣y偏移 |
setNumFieldOffsetY_B | 設(shè)置號(hào)碼欄相對(duì)于底部y偏移 |
setNumFieldOffsetX | 設(shè)置號(hào)碼欄相對(duì)于默認(rèn)位置的x軸偏移量 |
授權(quán)?登錄按鈕 | |
setLogBtnText | 設(shè)置登錄按鈕文本內(nèi)容、字體顏色,字體大小 |
setLogBtnImgPath | 設(shè)置授權(quán)登錄按鈕圖片 |
setLogBtn | 設(shè)置登錄按鈕的寬高 |
setLogBtnMargin | 設(shè)置登錄按鈕相對(duì)于屏幕左右邊緣邊距 |
setLogBtnOffsetY | 設(shè)置按鈕相當(dāng)于標(biāo)題欄下邊緣y偏移 |
setLogBtnOffsetY_B | 設(shè)置按鈕相對(duì)于底部y偏移 |
setLogBtnClickListener | 設(shè)置登錄按鈕點(diǎn)擊事件 |
授權(quán)?隱私欄 | |
setPrivacyAlignment | 設(shè)置隱私條款的協(xié)議文本,自定義條款,自定義條款鏈接 |
setPrivacyText | 設(shè)置隱私條款字體大小、文字顏色、是否居中 |
setCheckBoxImgPath | 設(shè)置復(fù)選框圖片 |
setPrivacyOffsetY | 設(shè)置隱私條款相對(duì)于標(biāo)題欄下邊緣y偏移 |
setPrivacyOffsetY_B | 設(shè)置隱私條款相對(duì)于底部y偏移 |
setPrivacyMargin | 設(shè)置隱私條款距離手機(jī)左右邊緣的邊距 |
setPrivacyState | 設(shè)置是否默認(rèn)勾選復(fù)選框。 |
setPrivacyBookSymbol | 設(shè)置書名號(hào),0=設(shè)置,1=不設(shè)置,默認(rèn)設(shè)置 |
setCheckBoxLocation | 設(shè)置復(fù)選框相對(duì)右側(cè)協(xié)議?案居上或者居中,默認(rèn)居上。 0-居上,1-居中 |
setGenCheckBoxListener | 設(shè)置授權(quán)?勾選框和登錄按鈕的監(jiān)聽(tīng)事件 |
setGenCheckedChangeListener | 設(shè)置授權(quán)?勾選框是否勾選的監(jiān)聽(tīng)事件 |
setWebDomStorage | 0:關(guān)閉,1:打開。默認(rèn)關(guān)閉,可以通過(guò)?法的設(shè)置來(lái)? 持dom storage。 |
setPrivacyAnimation | 設(shè)置協(xié)議勾選框+協(xié)議?本的抖動(dòng)動(dòng)畫效果,默認(rèn)?抖動(dòng)。 |
setCheckTipText | 設(shè)置未勾選提?的?定義提??案。不設(shè)置則?提?。 |
授權(quán)?轉(zhuǎn)場(chǎng)動(dòng)畫 | |
setAuthPageActIn | 設(shè)置授權(quán)頁(yè)進(jìn)場(chǎng)動(dòng)畫 |
setAuthPageActOut | 設(shè)置授權(quán)頁(yè)出場(chǎng)動(dòng)畫 |
彈窗模式 | |
setAuthPageWindowMode | 設(shè)置授權(quán)頁(yè)寬高比例 |
setAuthPageWindowOffset | 設(shè)置授權(quán)頁(yè)窗口X軸Y軸偏移 |
setWindowBottom | 設(shè)置授權(quán)頁(yè)是否居于底部,0=居中;1=底部,設(shè)置1時(shí)Y軸偏移失效 |
setThemeId | 設(shè)置授權(quán)頁(yè)彈窗主題,也可以在Manifest中設(shè)置。 |
setBackButton | 彈窗授權(quán)?模式下,設(shè)置物理返回鍵是否有效,默認(rèn) 有效。true=有效,false=?效。 |
授權(quán)?語(yǔ)?切換 | |
appLanguageType | 0.中?簡(jiǎn)體1.中?繁體2.英? |
返回鍵監(jiān)聽(tīng) | |
setGenBackPressedListener | 設(shè)置授權(quán)?返回鍵監(jiān)聽(tīng)事件 |
setGenAuthLoginListener | 設(shè)置授權(quán)按鈕監(jiān)聽(tīng)事件,?參回調(diào)GenAuthLoginListener,??點(diǎn)擊登 錄按鈕時(shí)如果未勾選協(xié)議,觸發(fā)GenAuthLoginListener的 onAuthLoginListener (Context context,AuthLoginCallBack authLoginCallBack) ?法。可以實(shí)現(xiàn)?次彈窗確認(rèn)的功能 |
AuthLoginCallBack | 授權(quán)回調(diào),通過(guò)onAuthLoginCallBack(boolean b)決定是否繼續(xù)登錄流 程??梢詫?shí)現(xiàn)?次彈窗確認(rèn)的功能 |
finish授權(quán)頁(yè)
SDK完成回調(diào)后,不會(huì)立即關(guān)閉授權(quán)頁(yè)面,需要開發(fā)者主動(dòng)調(diào)用離開授權(quán)頁(yè)面方法去完成頁(yè)面的關(guān)閉,請(qǐng)調(diào)用 SubSDK.quitActivity(mCtx);
授權(quán)頁(yè)規(guī)范
中國(guó)移動(dòng)授權(quán)頁(yè)規(guī)范
為了確保用戶在登錄過(guò)程中將手機(jī)號(hào)碼信息授權(quán)給開發(fā)者使用的知情權(quán),一鍵登錄需要開發(fā)者提供授權(quán)頁(yè)登錄頁(yè)面
供用戶授權(quán)確認(rèn)。開發(fā)者在調(diào)用授權(quán)登錄方法前,必須彈出授權(quán)頁(yè),明確告知用戶當(dāng)前操作會(huì)將用戶的本機(jī)號(hào)碼信
息傳遞給應(yīng)用。
為了確保用戶在登錄過(guò)程中將手機(jī)號(hào)碼信息授權(quán)給開發(fā)者使用的知情權(quán),一鍵登錄需要開發(fā)者提供授權(quán)頁(yè)登錄頁(yè)面
供用戶授權(quán)確認(rèn)。開發(fā)者在調(diào)用授權(quán)登錄方法前,必須彈出授權(quán)頁(yè),明確告知用戶當(dāng)前操作會(huì)將用戶的本機(jī)號(hào)碼信
息傳遞給應(yīng)用。
授權(quán)頁(yè)規(guī)范
注意:
1、開發(fā)者不得通過(guò)任何技術(shù)手段,破解授權(quán)頁(yè),或?qū)⑹跈?quán)頁(yè)面的號(hào)碼欄、隱私欄、品牌露出內(nèi)容隱
藏、覆蓋。
2、登錄按鈕文字描述必須包含“登錄”或“注冊(cè)”等文字,不得誘導(dǎo)用戶授權(quán)。
3、對(duì)于接入移動(dòng)認(rèn)證SDK并上線的應(yīng)用,我方會(huì)對(duì)上線的應(yīng)用授權(quán)頁(yè)面做審查,如果有出現(xiàn)未按要求
彈出或設(shè)計(jì)授權(quán)頁(yè)面的,將關(guān)閉應(yīng)用的認(rèn)證取號(hào)服務(wù)。
中國(guó)聯(lián)通授權(quán)頁(yè)規(guī)范
服務(wù)條款需文字標(biāo)明 聯(lián)通統(tǒng)一認(rèn)證服務(wù)條款
,協(xié)議內(nèi)容鏈接如下:?https://opencloud.wostore.cn/authz/resource/html/disclaimer.html?fromsdk=true
中國(guó)電信授權(quán)頁(yè)規(guī)范
為了確保用戶在登錄過(guò)程中將手機(jī)號(hào)碼信息授權(quán)給接入方使用的知情權(quán),天翼賬號(hào)登錄認(rèn)證需要接入方滿足如下要求:
(1)接入方在調(diào)用登錄認(rèn)證方法前,必須顯示出授權(quán)頁(yè)面,授權(quán)頁(yè)面需明確告知用戶操作會(huì)將用戶本機(jī)號(hào)碼信息授權(quán)給應(yīng)用;(天翼賬號(hào)服務(wù)與隱私協(xié)議url地址:https://e.189.cn/sdk/agreement/detail.do?hidetop=true)
(2)接入方需展示“天翼賬號(hào)”品牌露出,不得通過(guò)任何技術(shù)手段,將授權(quán)頁(yè)面的隱私欄、品牌露出內(nèi)容隱藏、覆蓋;
(3)接入方上線前需要將授權(quán)頁(yè)面提交給我方進(jìn)行審核,審核通過(guò)后才可正式開放登錄功能調(diào)用使用量。若有出現(xiàn)未按要求設(shè)計(jì)授權(quán)頁(yè)面的行為或有非正常調(diào)用行為,為了保護(hù)用戶的隱私安全,我方有權(quán)將接入方應(yīng)用的登錄功能下線。
如下是天翼賬號(hào)標(biāo)準(zhǔn)頁(yè)面的設(shè)計(jì)規(guī)范,供合作方參考;