本文為您介紹iOS客戶端本機號碼校驗的集成方法及接口的功能示例。
在使用過程中如有疑問,可以提交工單聯系阿里云技術工程師處理。
下載SDK
登錄號碼認證產品控制臺,在概覽頁面右側API&SDK區域,單擊立即下載,進入API&SDK頁面,根據頁面提示下載并解壓對應SDK。
創建認證方案
您導入項目或調用API接口時,會用到方案Code等參數信息,請先在號碼認證產品控制臺,創建認證方案,獲取方案Code等參數信息。
集成方式
集成分動態庫和靜態庫。ATAuthSDK_D.framework和ATAuthSDK.framework不能同時集成到工程里,兩者是同一個SDK,前者是動態庫,后者是靜態庫。
若您集成靜態庫,則需要集成以下組件:
ATAuthSDK.framework、YTXMonitor.framework和YTXOperators.framework。
若您集成動態庫,則需要集成以下組件:
ATAuthSDK_D.framework。
集成靜態庫操作
創建工程。
下載并安裝Xcode,點擊Create a new Xcode project,根據頁面引導創建一個新工程。
添加主庫和系統庫。
方式一:在菜單欄選擇Targets > Build Phases > Link Binary With Libraries,添加主庫ATAuthSDK.framework、YTXMonitor.framework和YTXOperators.framework,添加系統庫Network.framework。
方式二:在Xcode中Targets > General > Frameworks,Libraries, and Embedded Content,添加主庫ATAuthSDK.framework、YTXMonitor.framework和YTXOperators.framework,添加系統庫Network.framework。
說明添加主庫時Embed選擇Do Not Embed類型。
iOS12.0版本開始支持Network.framework,請在菜單欄選擇Targets > Build Phases > Linked Frameworks and Libraries > Status,將Status設置為弱依賴關系。
BuildSettings設置。
在菜單欄選擇Targets > BuildSettings > Other Linker Flags。
Other Linker Flags增加
-ObjC
、-framework
、"YTXOperators"
。添加ATAuthSDK.bundle資源文件。
主項目右鍵添加ATAuthSDK.framework > ATAuthSDK.bundle資源?件,否則?鍵登錄授權頁面默認的圖片或icon不顯示。
或在Targets > Build Phases > Copy Bundle Resources,添加ATAuthSDK.bundle。
集成動態庫操作
動態庫不一定包含模擬器架構,可使用
lipo -info
指令查詢動態庫支持的模擬器架構。若因包含模擬器架構而導致編譯報錯,請使用lipo -thin
指令剔除可執行文件中的模擬器架構。無需將動態庫解壓文件直接拖到工程中,因解壓包含有ATAuthSDK_D.framework.dSYM符號文件,該文件是線上crash符號翻譯專用,如果放到工程中會影響App上架審核,只需將ATAuthSDK_D.framework拖進工程即可。
添加主庫。
方式一:在Xcode中Targets > General > Frameworks,Libraries, and Embedded Content,添加主庫ATAuthSDK_D.framework。
說明添加主庫時Embed選擇Embed & Sign類型。
方式二:
在Targets > Build Phases > Link Binary With Libraries和Embed Frameworks,添加主庫ATAuthSDK_D.framework。
添加ATAuthSDK.bundle資源文件。
主項目右鍵添加ATAuthSDK.framework > ATAuthSDK.bundle資源?件,否則?鍵登錄授權頁面默認的圖片或icon不顯示。
或在Targets > Build Phases > Copy Bundle Resources,添加ATAuthSDK.bundle。
交互流程詳解
完整的功能交互流程請參見本機號碼校驗交互流程。
SDK方法說明
獲取認證實例(sharedInstance)
/**
* 獲取該類的單例實例對象
* @return 單例實例對象
*/
+ (instancetype _Nonnull )sharedInstance;
使用示例
TXCommonHandler *handller = [TXCommonHandler sharedInstance];
設置SDK密鑰(setAuthSDKInfo)
/**
* 初始化SDK調用參數,App生命周期內調用一次
* @param info app對應的密鑰
* @param complete 結果異步回調到主線程,成功時resultDic=@{resultCode:600000, msg:...},其他情況時"resultCode"值請參考PNSReturnCode
*/
- (void)setAuthSDKInfo:(NSString * _Nonnull)info complete:(void(^_Nullable)(NSDictionary * _Nonnull resultDic))complete;
使用示例
[[TXCommonHandler sharedInstance] setAuthSDKInfo:@"xxxx"
complete:^(NSDictionary * _Nonnull resultDic) {
NSLog(@"設置密鑰結果:%@", resultDic);
}];
加速獲取本機號碼校驗Token(accelerateVerifyWithTimeout)
/**
* 加速獲取本機號碼校驗token,防止調用 getVerifyTokenWithTimeout:complete: 獲取token時間過長
* @param timeout 接口超時時間,單位s,默認為3.0s
* @param complete 結果異步回調到主線程,成功時resultDic=@{resultCode:600000, token:..., msg:...},其他情況時"resultCode"值請參考PNSReturnCode
*/
- (void)accelerateVerifyWithTimeout:(NSTimeInterval)timeout complete:(void (^_Nullable)(NSDictionary * _Nonnull resultDic))complete;
使用示例
[[TXCommonHandler sharedInstance] accelerateVerifyWithTimeout:3.0
complete:^(NSDictionary * _Nonnull resultDic) {
NSLog(@"為后面獲取本機號碼校驗Token加個速,加速結果:%@", resultDic);
}];
本機號碼校驗獲取Token(getVerifyTokenWithTimeout)
/**
* 獲取本機號碼校驗Token
* @param timeout 接口超時時間,單位:秒,默認為3.0s
* @param complete 結果異步回調到主線程,成功時resultDic=@{resultCode:600000, token:..., msg:...},其他情況時"resultCode"值請參考PNSReturnCode
*/
- (void)getVerifyTokenWithTimeout:(NSTimeInterval)timeout complete:(void (^_Nullable)(NSDictionary * _Nonnull resultDic))complete;
使用示例
[[TXCommonHandler sharedInstance] getVerifyTokenWithTimeout:3.0
complete:^(NSDictionary * _Nonnull resultDic) {
NSLog(@"獲取本機號碼校驗Token返回:%@", resultDic);
}];
其他接口說明
選調方法:獲取版本號
/**
* 獲取當前SDK版本號
* @return 字符串,SDK版本號
*/
- (NSString *_Nonnull)getVersion;
使用示例
NSString *version = [[TXCommonHandler sharedInstance] getVersion];
選調方法:環境檢查
/**
* 檢查當前環境是否支持一鍵登錄或號碼認證,resultDic返回 PNSCodeSuccess說明當前環境支持
* @param authType 服務類型 PNSAuthTypeVerifyToken 本機號碼校驗流程,PNSAuthTypeLoginToken 一鍵登錄流程
* @param complete 結果異步回調到主線程,成功時resultDic=@{resultCode:600000, msg:...},其他情況時"resultCode"值請參考PNSReturnCode,只有成功回調才能保障后續接口調用
*/
- (void)checkEnvAvailableWithAuthType:(PNSAuthType)authType complete:(void (^_Nullable)(NSDictionary * _Nullable resultDic))complete;
使用示例
[[TXCommonHandler sharedInstance] checkEnvAvailableWithAuthType:PNSAuthTypeVerifyToken complete:^(NSDictionary * _Nullable resultDic) {
NSLog(@"環境檢查結果:%@",resultDic);
}];
選調方法:設置checkbox選中狀態
/**
* 授權頁彈起后,修改checkbox按鈕選中狀態,當checkout按鈕隱藏時,設置不生效
*/
- (void)setCheckboxIsChecked:(BOOL)isChecked;
使用示例
[[TXCommonHandler sharedInstance] setCheckboxIsChecked:YES];
選調方法:隱藏一鍵登錄獲取登錄Token后的等待動畫
/**
* 手動隱藏一鍵登錄獲取登錄Token之后的等待動畫,默認為自動隱藏,當設置 TXCustomModel 實例 autoHideLoginLoading = NO 時, 可調用該方法手動隱藏
*/
- (void)hideLoginLoading;
使用示例
[[TXCommonHandler sharedInstance] hideLoginLoading];
日志埋點控制對象
獲取到該對象后可以進行相關的日志設置。
/**
* 獲取日志埋點相關控制對象
*/
- (PNSReporter * _Nonnull)getReporter;
使用示例
PNSReporter *reporter = [[TXCommonHandler sharedInstance] getReporter];
控制臺日志輸出開關
/**
* 控制臺日志輸出開關,若開啟會以PNS_LOGGER為開始標記對日志進行輸出,Release模式記得關閉!
* @param enable 開關參數,默認為NO
*/
- (void)setConsolePrintLoggerEnable:(BOOL)enable;
使用示例
PNSReporter *reporter = [[TXCommonHandler sharedInstance] getReporter];
[reporter setConsolePrintLoggerEnable:YES];
設置日志及埋點上傳開關
/**
* 設置日志及埋點上傳開關,但不會對通過 setupUploader: 接口實現的自定義上傳方法起作用
* @param enable 開關設置BOOL值,默認為YES
*/
- (void)setUploadEnable:(BOOL)enable;
使用示例
PNSReporter *reporter = [[TXCommonHandler sharedInstance] getReporter];
[reporter setUploadEnable:YES];
工具類TXCommonUtils
判斷設備蜂窩網絡是否開啟(checkDeviceCellularDataEnable)
/**
判斷當前設備蜂窩數據網絡是否開啟,即3G、4G
@return 結果
*/
+ (BOOL)checkDeviceCellularDataEnable;
判斷當前上網卡是否是中國聯通(isChinaUnicom)
/**
判斷當前上網卡運營商是否是中國聯通
@return 結果
*/
+ (BOOL)isChinaUnicom;
判斷當前上網卡是否是中國移動(isChinaMobile)
/**
判斷當前上網卡運營商是否是中國移動
@return 結果
*/
+ (BOOL)isChinaMobile;
判斷當前上網卡是否是中國電信(isChinaTelecom)
/**
判斷當前上網卡運營商是否是中國電信
@return 結果
*/
+ (BOOL)isChinaTelecom;
獲取當前上網卡運營商名稱(getCurrentCarrierName)
/**
獲取當前上網卡運營商名稱,比如中國移動、中國電信、中國聯通
@return 結果
*/
+ (NSString *)getCurrentCarrierName;
獲取當前上網網絡類型(getNetworktype)
/**
獲取當前上網卡網絡類型,比如Wi-Fi,4G
@return 結果
*/
+ (NSString *)getNetworktype;
判斷設備是否有SIM卡(simSupportedIsOK)
/**
判斷當前設備是否有SIM卡
@return 結果
*/
+ (BOOL)simSupportedIsOK;
判斷無線網絡是否開啟(isWWANOpen)
/**
判斷無線網絡是否開著(通過p0網卡判斷,無Wi-Fi或有Wi-Fi情況下都能檢測到)
@return 結果
*/
+ (BOOL)isWWANOpen;
判斷無Wi-Fi下無線網絡是否開啟(reachableViaWWAN)
/**
判斷無線網絡是否開啟(僅無Wi-Fi情況下)
@return 結果
*/
+ (BOOL)reachableViaWWAN;
獲取設備當前網絡私網IP地址(getMobilePrivateIPAddress)
/**
獲取設備當前網絡私網IP地址
@return 結果
*/
+ (NSString *)getMobilePrivateIPAddress:(BOOL)preferIPv4;
獲取當前設備的唯一標識ID(getUniqueID)
/**
獲取當前設備的唯一標識ID,用于埋點的精確查找使用
*/
+ (NSString *)getUniqueID;
通過顏色設置生成圖片(imageWithColor)
/**
通過顏色設置生成圖片,支持弧度設置,比如一鍵登錄按鈕背景圖片
*/
+ (UIImage *)imageWithColor:(UIColor *)color size:(CGSize)size isRoundedCorner:(BOOL )isRounded radius:(CGFloat)radius;