ios 手游SDK 开发教程
前言:
各位同學大家好 ,有一段時間沒有見面了。 具體多久我也不清楚了, 最近在學習iOS 手游sdk 的開發 所以就想著寫完 寫一份教程分享給大家, 本人之前一直都是做安卓開發的 安卓 app和安卓手游SDK 開的都會。
需要用到的三方庫
pod 'AFNetworking'pod 'SDWebImage','4.0.0'pod 'WHToast','~>0.1.0'效果圖
主要實現邏輯 手游SDK
初始化 init. 登錄 login 支付 pay. 區服登錄 servicelogin. 等級變化上報 updateuserinfo接口設計
// // 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我們定義這些對外方法 當然你也可以寫成類方法 然后寫個單例 去掉也行 我這邊方便就用 + 然后每個方法我們定義了 block回調 這個看具體需求 因為參考了安卓了那邊寫法 每個對外接口都給回調 我就都給加了
具體接口的實現
// // 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{}// 區服登錄接口 + (void)serviceinfo:(ServiceInfo*)getserviceinfo serviceLogin:(ServiceBlock)finishBlock{NSLog(@"區服登錄");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 這幾個接口的實現
登錄接口
// 登錄接口 + (void)viewcontroller:(UIViewController *)controller sdkCheckLogin:(LoginFinishBlock)finishBlock{ViewController * viewController= [[ViewController alloc]init];viewController.logBlock = finishBlock;[controller presentViewController:viewController animated:YES completion:nil]; }登錄接口我們需要傳入 UIViewController 實例和 實現LoginFinishBlock 回調
登錄界面邏輯
-
m 文件
-
h 文件
我們看到 我們在登錄的viewcontroller 也定義了一個block 然后我們跳轉的時候將外部傳進來的 block 賦值給我們在登錄定義的block.然后我們在登錄網絡請求成功以后 回調我們數據回去即可。
還有注冊的viewcontroller 也是同理的 我就不展開講了 也是注冊成功 將服務端返回的數據結構 回調回去
數據上報邏輯 servicelogin
// 區服登錄接口 + (void)serviceinfo:(ServiceInfo*)getserviceinfo serviceLogin:(ServiceBlock)finishBlock{NSLog(@"區服登錄");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 模型實例 然后實現 ServiceBlock 回調
然后我們在這個方法內部去請求服務端進去游戲里面數據上報邏輯 。
具體接入效果
-
登錄接入
-
數據上報 servicelogin
-
數據上報 updateuserinfo
整個iOS 手機SDK 大概就講完了
最后總結:
有很多同學這時候就說 做成SDK 應該最后要打包成靜態庫才對吧 。是的沒錯 這一期我只是講大概思路 因為我也不會打包靜態庫 所以我也還在學習 后面繼續更新哈代碼里面很多的三方庫其實也不是這樣去用的 我們應該直接去拉代碼 不應該用 pod file 這樣去依賴 我也是為了方便。最后希望我的文章能幫助到各位解決問題 ,以后我還會貢獻更多有用的代碼分享給大家。各位同學如果覺得文章還不錯 ,麻煩給關注和star,小弟在這里謝過啦!
、
總結
以上是生活随笔為你收集整理的ios 手游SDK 开发教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue使用webPack打包发布后页面显
- 下一篇: vue-cli,webpack安装