日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ios 手游SDK 开发教程

發(fā)布時間:2023/12/10 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ios 手游SDK 开发教程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言:

各位同學(xué)大家好 ,有一段時間沒有見面了。 具體多久我也不清楚了, 最近在學(xué)習(xí)iOS 手游sdk 的開發(fā) 所以就想著寫完 寫一份教程分享給大家, 本人之前一直都是做安卓開發(fā)的 安卓 app和安卓手游SDK 開的都會。

需要用到的三方庫

pod 'AFNetworking'pod 'SDWebImage','4.0.0'pod 'WHToast','~>0.1.0'

效果圖

主要實現(xiàn)邏輯 手游SDK

初始化 init. 登錄 login 支付 pay. 區(qū)服登錄 servicelogin. 等級變化上報 updateuserinfo

接口設(shè)計

// // NineFunSdk.h // 016登錄界面 // // Created by xuqing on 2022/4/26. //#import <Foundation/Foundation.h> #import <UIkit/UIkit.h> #import "RoleInfo.h" #import "ServiceInfo.h" NS_ASSUME_NONNULL_BEGINtypedef void (^LoginFinishBlock)(BOOL success, id data);typedef void (^InitFinishBlock)(BOOL success, NSString * data); typedef void (^PayFinishBlock)(BOOL success, NSString * data);typedef void (^ServiceBlock)(BOOL success);typedef void (^UpdateUserInfoBlcok)(BOOL success);@interface NineFunSdk : NSObject+ (void)viewcontroller:(UIViewController *)controller sdkCheckLogin:(LoginFinishBlock)finishBlock;+ (void)initSdk:(InitFinishBlock)finishBlock;+ (void)pay:(PayFinishBlock)finishBlock;+ (void)serviceinfo:(ServiceInfo*)getserviceinfo serviceLogin:(ServiceBlock)finishBlock;+ (void)roleinfo:(RoleInfo*)getroleinfo updateUserInfo:(UpdateUserInfoBlcok)finishBlock;@endNS_ASSUME_NONNULL_END

我們定義這些對外方法 當(dāng)然你也可以寫成類方法 然后寫個單例 去掉也行 我這邊方便就用 + 然后每個方法我們定義了 block回調(diào) 這個看具體需求 因為參考了安卓了那邊寫法 每個對外接口都給回調(diào) 我就都給加了

具體接口的實現(xiàn)

// // NineFunSdk.m // // Created by xuqing on 2022/4/26. //#import "NineFunSdk.h" #import "ViewController.h" #import <AFNetworking.h> #import "NSString+Encrypt.h" #import "RoleInfo.h" #import "ServiceInfo.h" #import "Md5Utils.h"@implementation NineFunSdk// 登錄接口 + (void)viewcontroller:(UIViewController *)controller sdkCheckLogin:(LoginFinishBlock)finishBlock{ViewController * viewController= [[ViewController alloc]init];viewController.logBlock = finishBlock;[controller presentViewController:viewController animated:YES completion:nil]; }// 初始化接口 + (void)initSdk:(InitFinishBlock)finishBlock{}//支付接口 + (void)pay:(PayFinishBlock)finishBlock{}// 區(qū)服登錄接口 + (void)serviceinfo:(ServiceInfo*)getserviceinfo serviceLogin:(ServiceBlock)finishBlock{NSLog(@"區(qū)服登錄");NSString * sign = [NSString stringWithFormat:@"sid=%@role_id=%@role_anme=%@||0a649d6b-df9f-4583-bf7d-3fae84838519",getserviceinfo->_sid,getserviceinfo->_roleid,getserviceinfo->_rolename];NSLog(@" sign %@", sign);// NSString * getsign=[sign MD5];NSString * getsign=[Md5Utils getMd5_32Bit_String:sign isUppercase:NO];NSString * serviceLoginUrl=@"http://192.168.7.25:8090/boss/serviceinfo/servicelogin?";NSMutableString *geturl = [NSMutableString string];[geturl appendString:serviceLoginUrl];[geturl appendString:@"gid="];[geturl appendString:getserviceinfo->_gid];[geturl appendString:@"&"];[geturl appendString:@"sid="];[geturl appendString:getserviceinfo->_sid];[geturl appendString:@"&"];[geturl appendString:@"role_name="];[geturl appendString:getserviceinfo->_rolename];[geturl appendString:@"&"];[geturl appendString:@"role_level="];[geturl appendString:getserviceinfo->_rolelevel];[geturl appendString:@"&"];[geturl appendString:@"role_id="];[geturl appendString:getserviceinfo->_roleid];[geturl appendString:@"&"];[geturl appendString:@"sign="];[geturl appendString:getsign];NSString *url = [geturl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];// NSLog(@"geturl --- %@",geturl);[[AFHTTPSessionManager manager]GET:url parameters:nil headers:nil progress:^(NSProgress * _Nonnull downloadProgress) {NSLog(@"");} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {NSLog(@"");NSLog(@"請求成功---%@",responseObject);NSLog(@"請求 msg ---%@",[responseObject objectForKey:(@"msg")]);finishBlock(YES);} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {NSLog(@"");}];};//等級變化上報接口 + (void)roleinfo:(RoleInfo*)getroleinfo updateUserInfo:(UpdateUserInfoBlcok)finishBlock{NSLog(@"等級變化上報");NSString * sign = [NSString stringWithFormat:@"sid=%@role_id=%@role_anme=%@||0a649d6b-df9f-4583-bf7d-3fae84838519",getroleinfo->_sid,getroleinfo->_roleid,getroleinfo->_rolename];NSLog(@" sign %@", sign);// NSString * getsign=[sign MD5];NSString * getsign=[Md5Utils getMd5_32Bit_String:sign isUppercase:NO];NSLog(@" getsign %@", getsign);NSString * serviceLoginUrl=@"http://192.168.7.25:8090/boss/roleinfo/submitroleinfo?";NSMutableString *geturl = [NSMutableString string];[geturl appendString:serviceLoginUrl];[geturl appendString:@"gid="];[geturl appendString:getroleinfo->_gid];[geturl appendString:@"&"];[geturl appendString:@"sid="];[geturl appendString:getroleinfo->_sid];[geturl appendString:@"&"];[geturl appendString:@"role_name="];[geturl appendString:getroleinfo->_rolename];[geturl appendString:@"&"];[geturl appendString:@"role_level="];[geturl appendString:getroleinfo->_rolelevel];[geturl appendString:@"&"];[geturl appendString:@"role_id="];[geturl appendString:getroleinfo->_roleid];[geturl appendString:@"&"];[geturl appendString:@"sign="];[geturl appendString:getsign];NSString *url = [geturl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];// NSLog(@"geturl --- %@",geturl);[[AFHTTPSessionManager manager]GET:url parameters:nil headers:nil progress:^(NSProgress * _Nonnull downloadProgress) {NSLog(@"");} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {NSLog(@"");NSLog(@"請求成功---%@",responseObject);NSLog(@"請求 msg ---%@",[responseObject objectForKey:(@"msg")]);finishBlock(YES);} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {NSLog(@"");}];} @end

因為時間問題 我這邊制作了 login 和servicelogin. updateuserinfo 這幾個接口的實現(xiàn)

登錄接口

// 登錄接口 + (void)viewcontroller:(UIViewController *)controller sdkCheckLogin:(LoginFinishBlock)finishBlock{ViewController * viewController= [[ViewController alloc]init];viewController.logBlock = finishBlock;[controller presentViewController:viewController animated:YES completion:nil]; }

登錄接口我們需要傳入 UIViewController 實例和 實現(xiàn)LoginFinishBlock 回調(diào)

登錄界面邏輯

  • m 文件

// // ViewController.h // 016登錄界面 // // Created by xuqing on 2021/7/27. //#import <UIKit/UIKit.h>@interface ViewController : UIViewController{//登錄界面的組成UILabel *_usernameLabel;UILabel * _passwordLabel;UITextField *_userTextfield;UITextField *_passwordfield;UIButton * _loginBtn;UIButton * _registerBtn;} @property(retain,nonatomic)UILabel * usernameLabel; @property(retain,nonatomic)UILabel * pswLabel; @property(retain,nonatomic)UITextField * userTextfield; @property(retain,nonatomic)UITextField * pswfield; @property(retain,nonatomic)UIButton * loginBtn ; @property(retain, nonatomic)UIButton * registerBtn; @property (nonatomic,copy)void(^logBlock)(BOOL success, id data); @end
  • h 文件

// // ViewController.m // 016登錄界面 // // Created by xuqing on 2021/7/27. #import "ViewController.h" #import "RegisterController.h" #import <AFNetworking.h> #import <WHToast.h> #import "TextUtils.h" @interface ViewController () @end@implementation ViewController @synthesize usernameLabel=_usernameLabel; @synthesize pswLabel=_passwordLabel; @synthesize userTextfield=_userTextfield; @synthesize pswfield=_passwordfield; @synthesize loginBtn=_loginBtn; @synthesize registerBtn=_registerBtn;- (void)viewDidLoad {[super viewDidLoad];_usernameLabel =[[UILabel alloc]init];_usernameLabel.frame=CGRectMake(60, 100, 60, 40);_usernameLabel.text=@"賬號:";_usernameLabel.textColor=[UIColor blueColor];[self.view addSubview:_usernameLabel];_userTextfield =[[UITextField alloc] init];_userTextfield.frame=CGRectMake(100, 100,180, 40);_userTextfield.font= [UIFont systemFontOfSize:15];// 設(shè)置字體顏色_userTextfield.textColor=[UIColor blackColor];//設(shè)置邊框的風(fēng)格// UITextBorderStyleBezel bezel線框// UITextBorderStyleRoundedRect 圓角風(fēng)格// UITextBorderStyleLine 線框風(fēng)格// UITextBorderStyleNone 無邊框風(fēng)格_userTextfield.borderStyle= UITextBorderStyleRoundedRect;//設(shè)置虛擬鍵盤風(fēng)格//UIKeyboardTypeDefault 默認(rèn)風(fēng)格//UIKeyboardTypeNumberPad 純數(shù)字風(fēng)格//UIKeyboardTypeNamePhonePad 字母和數(shù)字組合風(fēng)格_userTextfield.keyboardType=UIKeyboardTypeNamePhonePad;_userTextfield.placeholder=@"請輸入用戶名...";//是否作為密碼輸入//YES 做為處理 圓點加密//NO: 正常顯示輸入的文字_userTextfield.secureTextEntry= NO;[self.view addSubview: _userTextfield];_passwordLabel =[[UILabel alloc]init];_passwordLabel.frame=CGRectMake(60, 150, 60, 40);_passwordLabel.text=@"密碼:";_passwordLabel.textColor=[UIColor blueColor];[self.view addSubview:_passwordLabel];_passwordfield =[[UITextField alloc] init];_passwordfield.frame=CGRectMake(100, 150,180, 40);_passwordfield.font= [UIFont systemFontOfSize:15];// 設(shè)置字體顏色_passwordfield.textColor=[UIColor blackColor];//設(shè)置邊框的風(fēng)格// UITextBorderStyleBezel bezel線框// UITextBorderStyleRoundedRect 圓角風(fēng)格// UITextBorderStyleLine 線框風(fēng)格// UITextBorderStyleNone 無邊框風(fēng)格_passwordfield.borderStyle= UITextBorderStyleRoundedRect;//設(shè)置虛擬鍵盤風(fēng)格//UIKeyboardTypeDefault 默認(rèn)風(fēng)格//UIKeyboardTypeNumberPad 純數(shù)字風(fēng)格//UIKeyboardTypeNamePhonePad 字母和數(shù)字組合風(fēng)格_passwordfield.keyboardType=UIKeyboardTypeNamePhonePad;_passwordfield.placeholder=@"請輸入密碼...";//是否作為密碼輸入//YES 做為處理 圓點加密//NO: 正常顯示輸入的文字_passwordfield.secureTextEntry= YES;[self.view addSubview: _passwordfield];_loginBtn=[UIButton buttonWithType: UIButtonTypeRoundedRect];_loginBtn.frame=CGRectMake(80, 220, 80, 40);[_loginBtn setTitle:@"登錄" forState:UIControlStateNormal];[_loginBtn addTarget:self action:@selector(login) forControlEvents:UIControlEventTouchUpInside];_loginBtn.backgroundColor=[UIColor blueColor];[_loginBtn setTitleColor: [UIColor whiteColor ] forState:UIControlStateNormal] ;//設(shè)置按鈕顏色[_loginBtn setTitleColor: [UIColor grayColor] forState:UIControlStateHighlighted] ;[self.view addSubview:_loginBtn];_registerBtn=[UIButton buttonWithType:UIButtonTypeRoundedRect];_registerBtn.frame=CGRectMake(180, 220, 80, 40);[_registerBtn setTitle:@"注冊" forState:UIControlStateNormal];[_registerBtn addTarget:self action:@selector(registerMethod) forControlEvents:UIControlEventTouchUpInside];_registerBtn.backgroundColor=[UIColor blueColor];[_registerBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];[self.view addSubview:_registerBtn];}-(void)registerMethod{RegisterController * registerController= [[RegisterController alloc]init];registerController.registerBlock = self.logBlock;[self presentViewController:registerController animated:YES completion:nil];}-(void)login{NSString * _strTextName=_userTextfield.text;NSString * _strTextPsw=_passwordfield.text;if(![TextUtils isBlankString:_strTextName]&&![TextUtils isBlankString:_strTextPsw]){NSLog(@"登錄成功");NSLog(@"%@ %@",_strTextName,_strTextPsw);NSString * registerString=@"http://192.168.7.25:8090/boss/user/validlogin?";NSString * str1=@"username=";NSString * str2=@"password=";NSMutableString *geturl = [NSMutableString string];[geturl appendString:registerString];[geturl appendString:str1];[geturl appendString:_strTextName];[geturl appendString:@"&"];[geturl appendString:str2];[geturl appendString:_strTextPsw];NSLog(@" geturl --- > %@",geturl);[[AFHTTPSessionManager manager]GET:geturl parameters:nil headers:nil progress:^(NSProgress * _Nonnull downloadProgress) {NSLog(@"");} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {NSLog(@"");NSLog(@"請求成功---%@",responseObject);NSLog(@"請求 msg ---%@",[responseObject objectForKey:(@"msg")]);if (self.logBlock) {self.logBlock(YES, responseObject);}[self dismissViewControllerAnimated:YES completion:nil];} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {NSLog(@"");}];}else {[WHToast showMessage:@"賬號或者密碼不能為空" duration:2 finishHandler:^{NSLog(@"登錄toast");}];}}- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{//回收鍵盤[_userTextfield resignFirstResponder];[_passwordfield resignFirstResponder]; } @end

我們看到 我們在登錄的viewcontroller 也定義了一個block 然后我們跳轉(zhuǎn)的時候?qū)⑼獠總鬟M來的 block 賦值給我們在登錄定義的block.然后我們在登錄網(wǎng)絡(luò)請求成功以后 回調(diào)我們數(shù)據(jù)回去即可。
還有注冊的viewcontroller 也是同理的 我就不展開講了 也是注冊成功 將服務(wù)端返回的數(shù)據(jù)結(jié)構(gòu) 回調(diào)回去

數(shù)據(jù)上報邏輯 servicelogin

// 區(qū)服登錄接口 + (void)serviceinfo:(ServiceInfo*)getserviceinfo serviceLogin:(ServiceBlock)finishBlock{NSLog(@"區(qū)服登錄");NSString * sign = [NSString stringWithFormat:@"sid=%@role_id=%@role_anme=%@||0a649d6b-df9f-4583-bf7d-3fae84838519",getserviceinfo->_sid,getserviceinfo->_roleid,getserviceinfo->_rolename];NSLog(@" sign %@", sign);NSString * getsign=[Md5Utils getMd5_32Bit_String:sign isUppercase:NO];NSLog(@" getsign --- > %@" ,getsign);NSString * serviceLoginUrl=@"http://192.168.7.25:8090/boss/serviceinfo/servicelogin?";NSMutableString *geturl = [NSMutableString string];[geturl appendString:serviceLoginUrl];[geturl appendString:@"gid="];[geturl appendString:getserviceinfo->_gid];[geturl appendString:@"&"];[geturl appendString:@"sid="];[geturl appendString:getserviceinfo->_sid];[geturl appendString:@"&"];[geturl appendString:@"role_name="];[geturl appendString:getserviceinfo->_rolename];[geturl appendString:@"&"];[geturl appendString:@"role_level="];[geturl appendString:getserviceinfo->_rolelevel];[geturl appendString:@"&"];[geturl appendString:@"role_id="];[geturl appendString:getserviceinfo->_roleid];[geturl appendString:@"&"];[geturl appendString:@"sign="];[geturl appendString:getsign];NSString *url = [geturl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; // NSLog(@"geturl --- %@",geturl);[[AFHTTPSessionManager manager]GET:url parameters:nil headers:nil progress:^(NSProgress * _Nonnull downloadProgress) {NSLog(@"");} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {NSLog(@"");NSLog(@"請求成功---%@",responseObject);NSLog(@"請求 msg ---%@",[responseObject objectForKey:(@"msg")]);finishBlock(YES);} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {NSLog(@"");}]; };

我們同樣定義對外接口方法 需要傳入 ServiceInfo 模型實例 然后實現(xiàn) ServiceBlock 回調(diào)
然后我們在這個方法內(nèi)部去請求服務(wù)端進去游戲里面數(shù)據(jù)上報邏輯 。

具體接入效果

  • 登錄接入

//登錄 - (IBAction)login:(id)sender {[NineFunSdk viewcontroller:self sdkCheckLogin:^(BOOL success, id data) {NSLog(@"回調(diào)成功成功---%@",data);}]; }
  • 數(shù)據(jù)上報 servicelogin

// 區(qū)服登錄上報 - (IBAction)servicelogin:(id)sender {ServiceInfo * serviceinfo=[ServiceInfo new];serviceinfo->_sid=@"1111";serviceinfo->_gid=@"424251";serviceinfo->_roleid=@"旋渦名人";serviceinfo->_rolename=@"最強王者";serviceinfo->_rolelevel=@"214141";[NineFunSdk serviceinfo:serviceinfo serviceLogin:^(BOOL success) {NSLog(@"區(qū)服登錄");}]; }
  • 數(shù)據(jù)上報 updateuserinfo

// 等級變化上報 - (IBAction)updateuserinfo:(id)sender {RoleInfo * roleinfo= [RoleInfo new];roleinfo->_gid=@"12232";roleinfo->_roleid=@"422422";roleinfo->_rolename=@"醉生夢死";roleinfo->_sid=@"測試服務(wù)器";roleinfo->_rolelevel=@"191";[NineFunSdk roleinfo:roleinfo updateUserInfo:^(BOOL success) {NSLog(@"等級變化上報");}]; }

整個iOS 手機SDK 大概就講完了

最后總結(jié):

有很多同學(xué)這時候就說 做成SDK 應(yīng)該最后要打包成靜態(tài)庫才對吧 。是的沒錯 這一期我只是講大概思路 因為我也不會打包靜態(tài)庫 所以我也還在學(xué)習(xí) 后面繼續(xù)更新哈代碼里面很多的三方庫其實也不是這樣去用的 我們應(yīng)該直接去拉代碼 不應(yīng)該用 pod file 這樣去依賴 我也是為了方便。最后希望我的文章能幫助到各位解決問題 ,以后我還會貢獻更多有用的代碼分享給大家。各位同學(xué)如果覺得文章還不錯 ,麻煩給關(guān)注和star,小弟在這里謝過啦!

總結(jié)

以上是生活随笔為你收集整理的ios 手游SDK 开发教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 噼里啪啦国语高清 | 精品久久久久久久久久久久久久久 | 久久久久草 | 免费视频色 | 各处沟厕大尺度偷拍女厕嘘嘘 | 欧美乱妇高清无乱码 | 日韩激情视频网站 | 淫羞阁av导航 | 法国空姐 在线 | 人超碰| 影音先锋男人天堂 | 免费看一区二区三区 | 李华月全部毛片 | 少妇高潮毛片 | 欧美老熟 | 欧美大片高清免费观看 | www四虎| 国产麻豆午夜三级精品 | 日韩黄色av | 中文字幕视频一区二区 | 男生女生搞黄色 | ass日本寡妇pics | 国产毛片毛片毛片毛片毛片毛片 | 国产精品一区二区麻豆 | 国产成人精品一区二区三区在线 | 色妞色视频一区二区三区四区 | av电影在线不卡 | 免费一级淫片 | 欧美视频三区 | 国产中文在线观看 | 国产精品jizz | 国产熟女一区二区三区四区 | 亚洲精品乱码久久久久久久久久久久 | 午夜精品极品粉嫩国产尤物 | 日本少妇在线观看 | 精品人妻无码一区二区三区换脸 | 成人福利一区二区 | 欧美精品成人一区二区三区四区 | 国产小视频在线看 | 国产成人精品电影 | 成人免费毛片男人用品 | 亚洲v欧美 | 国产精品久久久一区二区 | 欧美一区二区激情视频 | www亚洲天堂 | 东方伊甸园av在线 | 色a视频 | 中文字幕第十二页 | 国产午夜精品在线观看 | 激情午夜视频 | 成人久久久精品乱码一区二区三区 | 免费一级片网站 | 污网站免费观看 | 亚洲精品区 | 日批av | 日韩欧美视频一区 | 日本老熟妇毛茸茸 | 国产精品视频播放 | 国产又粗又猛又爽又黄av | 少妇精品久久久一区二区三区 | 贵族女沦为官妓h呻吟 | 国产精品久久久久久免费观看 | 在线免费不卡视频 | 国产免费www| 刘亦菲一区二区三区免费看 | 女色综合 | 一本大道伊人av久久综合 | 性欧美video另类hd尤物 | 成人午夜视频免费看 | 偷偷色噜狠狠狠狠的777米奇 | 欧美一区二区三区久久精品 | 欧美不卡一二三 | 午夜激情视频在线播放 | 日韩欧美视频一区二区三区 | 一区二区成人网 | 成年性生交大片免费看 | 玉女心经在线看 | 亚洲在线看 | 亚洲少妇18p | 午夜一级大片 | 天天爽天天射 | 99re6在线观看 | 亚洲av无码电影在线播放 | 免费日本黄色片 | 黄色免费看视频 | 国产精品视频一区在线观看 | 欧亚成人av | 成人1区2区 | 亚洲成人第一区 | 国产区欧美区日韩区 | 天天射视频 | 亚洲成a人v欧美综合天堂麻豆 | 色无五月 | 日韩免费视频一区 | 日韩精品久久久久久久酒店 | 亚洲第三十七页 | 国产乱码77777777 | 青青草综合网 | 蜜桃臀一区二区三区 |