社交软件开发6-客户端开发-ios端开发验证登陆部分
ztj100 2025-05-08 22:30 3 浏览 0 评论
欢迎订阅我的头条号:一点热
上一节说到,Android客户端的开发,主要是编写了,如何使用Android studio 如何创建一个Android项目,已经使用gradle来加载第三方库,并且使用了异步网路传输的库:android-async-http,最终通过网络传输,在客户端打印出我们之前在服务器的网络返回的JSON数据格式,这一节,我们继续以IOS客户端开发为例,开发一个ios客户端来验证我们服务器登录部分是否正确。
知识准备:
Object 的基础知识,Xcode的下载与安装,cocoapods的安装,AFNetworking的使用。前两节已经搭建好的服务器,用于客户端访问验证,如果没有看过,请自行看会之前的服务器端登录部分的开发。
开发语言:
object C,这里就以object C来开发,当然有一些人是直接从swift入手的,我看看到最后可以把所有功能完成后,在开发一个swift的客户端。
开发环境
Mac+Xcode
可能会遇到的难题:
不知道如何安装cocoapods。这个大家可以自行解决,或者给我留言。关注我的头条号:一点热,给我回复。
继续开始今天的课程:
1、创建项目
打开xcode,点击file->new -> project,这个时候选择ios 的apllication,然后选择single view appliction.
点击next后,输入自己的域名,公司组织,还有这里我用object C
点击next,创建好工程后,整个项目显示如下
这个时候我们可以点击左上角的运行,这是模拟器会启动,但是屏幕上显示的是空白的页面
这时候,我们可以添加我们需要的相应的布局文件,主要是添加一个邮箱和密码的输入框和登陆的输入框
if ([[[UIDevicecurrentDevice] systemVersion] floatValue] >= 7) {
[selfsetEdgesForExtendedLayout:UIRectEdgeNone];
}
_emailTextField = [[UITextFieldalloc] initWithFrame:CGRectMake(10, 40, self.view.bounds.size.width-20, 40)];
[_emailTextFieldsetBorderStyle:UITextBorderStyleRoundedRect];
[
_emailTextFieldsetPlaceholder:@"yeehot程序王:邮箱"];
[_emailTextFieldsetDelegate:self];
[_emailTextFieldsetCenter:CGPointMake(self.view.bounds.size.width / 2, _emailTextField.frame.origin.y + 20)];
[[selfview] addSubview:_emailTextField];
_passwordTextField = [[UITextFieldalloc] initWithFrame:CGRectMake(10, 90, self.view.bounds.size.width-20, 40)];
[_passwordTextFieldsetBorderStyle:UITextBorderStyleRoundedRect];
[
_passwordTextFieldsetPlaceholder:@"yeehot程序王:用户密码"];
[_passwordTextFieldsetDelegate:self];
[_passwordTextFieldsetCenter:CGPointMake(self.view.bounds.size.width / 2, _passwordTextField.frame.origin.y + 20) ];
[[selfview] addSubview:_passwordTextField];
_loginBtn = [[UIButtonalloc] initWithFrame:CGRectMake(60, 150, self.view.bounds.size.width-120, 40)];
[_loginBtnsetBackgroundColor:RGB(21, 23, 14)];
[[_loginBtnlayer] setCornerRadius:8];
[_loginBtnsetTitle:@"登录"
forState:UIControlStateNormal];
[[selfview] addSubview:_loginBtn];
注意,由于上面我们这里有一个RGB的函数,但是找不到,那是我们引入了一个宏,这时我们需要创建一个YeehotProgramKing.pch,用来定义一些宏,或者头文件等等。我这里定义了一个颜色值,简化输入。
#ifndef YeehotProgramKing_pch
#define YeehotProgramKing_pch
// Include any system framework and library headers here that should be included in all compilation units.
// You will also need to set the Prefix Header build setting of one or more of your targets to reference this file.
#define RGB(r, g, b) RGBA(r,g,b,1.0f)
#define RGBA(r, g, b,a) [UIColor colorWithRed:r / 255.0 green:g / 255.0 blue:b / 255.0 alpha:a]
#endif /* YeehotProgramKing_pch */
这个时候需要我们在编译器是加载.pch位置,我们需要将Precompile Prefix Header为Yes,这样我们在预编译后的pch文件会将缓存起来,下一次就不用再次编译,提高编译速度,点击target的项目,在Apple LLVM 7.0 -Language 栏目中找到 Prefix Header,这里输入的格式:"项目名字/创建pch的的名字.pch",我这里就是
YeehotPorgramKing/YeehotProgramKing.pch,
这个时候我们编译一次,如果没有错误的话,就可以在模拟器可以看到我们刚刚的布局文件了。
到这里,我们还没有实现网络的连接,那么我们需要加入网络连接的功能,我这里也是使用第三方的库。AFNetworking 3.0我们可以在github上找到。
https://github.com/AFNetworking/AFNetworking/
我这里是用cocospod来管理,真的方便,所以我也建议大家使用这个,当然大家可以下载afnetworking然后导入到项目中,
要使用cocoapods,我们是需要安装cocoapods
sudo gem install cocoapods
如果不能下载可以使用国内淘宝的库,这里我就不做详细的介绍了。
接着我们需要创建一个Podfile,我们需要在项目的的根目录,也就是和
YeehotPorgramKing.xcodeproj这里同一个目录创建,创建后,输入如下的代码。
platform :ios, '8.0'
target 'YeehotPorgramKing' do
pod 'AFNetworking', '~> 3.0'
end
这个时候,我们使用控制台定位到Podfile的目录下。输入
pod install,最后会下载我们的afnetworking库,如下图
这个时候我们退出程序,打开我们的根目录,项目多了一个
YeehotPorgramKing.xcworkspace,我们以后就打开这个工作空间,
打开后,我们可以看到afnetwork已经加入到工程里面了。
我们在刚刚创建的YeehotProgramKing.pch加入afnetwork的头文件,这样就不用我们在每个文件加入头文件了。
#import <AFURLSessionManager.h>
#import <AFHTTPSessionManager.h>
加入后,我们还需要回到ViewController编写登陆的函数。
首先增加登陆按钮的点击响应的函数
[_loginBtnaddTarget:selfaction:@selector(login:) forControlEvents:UIControlEventTouchUpInside];
然后添加登陆的方法
- (void)login:(UIButton *)sender {
[_emailTextFieldresignFirstResponder];
[_passwordTextFieldresignFirstResponder];
NSString *email = [_emailTextFieldtext];
NSString *password = [_passwordTextFieldtext];
// 初始化Manager
AFHTTPSessionManager *manager = [AFHTTPSessionManagermanager];
// 不加上这句话,会报“Request failed: unacceptable content-type: text/plain”错误,因为我们要获取text/plain类型数据
manager.responseSerializer = [AFHTTPResponseSerializerserializer];
manager.responseSerializer.acceptableContentTypes = [NSSetsetWithObject:@"text/html"];
// 请求的参数,我们这里有两个参数,email和passwd
NSDictionary *parameters = @{@"email": email, @"passwd" :password};
NSLog(@"infos===%@",email);
[manager GET:@"http://192.168.3.4:8080/Yeehot-Program-King/user/login"parameters:parameters progress:^(NSProgress * _Nonnull downloadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id_Nullable responseObject) {
// 请求成功,解析数据
NSLog(@"%@", responseObject);
NSDictionary *dic = [NSJSONSerializationJSONObjectWithData:responseObject options:NSJSONReadingMutableContainers | NSJSONReadingMutableLeaveserror:nil];
// 请求成功,解析数据
NSLog(@"%@", responseObject);
NSData *info = responseObject;
NSString *datas = [[NSStringalloc]initWithData:info encoding:NSUTF8StringEncoding];
// NSLog(@"JSON: %@", datas);
NSData *jsonData = [datas dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *jsonDict=[NSJSONSerialization
JSONObjectWithData:jsonData
options:NSJSONReadingMutableLeaves
error:nil];
UIAlertController *alertController = [
UIAlertControlleralertControllerWithTitle:@"yeehot程序王登陆情况"message:datas
preferredStyle:UIAlertControllerStyleAlert];
// Create the actions.
UIAlertAction *cancelAction = [
UIAlertActionactionWithTitle:@"取消"
style:UIAlertActionStyleCancelhandler:^(UIAlertAction *action) {
}];
UIAlertAction *otherAction = [
UIAlertActionactionWithTitle:@"确定"
style:UIAlertActionStyleDefaulthandler:^(UIAlertAction *action) {
}];
// Add the actions.
[alertController addAction:cancelAction];
[alertController addAction:otherAction];
[selfpresentViewController:alertController animated:YEScompletion:nil];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
// 请求失败
NSLog(@"%@", [error localizedDescription]);
}];
// // post请求
// [manager POST:@"http://192.168.3.4:8080/Yeehot-Program-King/user/login" parameters:parameter constructingBodyWithBlock:^(id _Nonnull formData) {
//
//
// } progress:^(NSProgress * _Nonnull uploadProgress) {
//
//
// } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
//
// // 请求成功,解析数据
// NSLog(@"%@", responseObject);
//
// NSData *info = responseObject;
// NSString *datas = [[NSString alloc]initWithData:info encoding:NSUTF8StringEncoding];
// // NSLog(@"JSON: %@", datas);
// NSData *jsonData = [datas dataUsingEncoding:NSUTF8StringEncoding];
// NSDictionary *jsonDict=[NSJSONSerialization
// JSONObjectWithData:jsonData
// options:NSJSONReadingMutableLeaves
// error:nil];
//
// UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"yeehot程序王登陆情况" message:datas
preferredStyle:UIAlertControllerStyleAlert];
//
// // Create the actions.
// UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消"
style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
// NSLog(@"The \"Okay/Cancel\" alert's cancel action occured.");
// }];
//
// UIAlertAction *otherAction = [UIAlertAction actionWithTitle:@"确定"
style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
// NSLog(@"The \"Okay/Cancel\" alert's other action occured.");
// }];
//
// // Add the actions.
// [alertController addAction:cancelAction];
// [alertController addAction:otherAction];
//
// [self presentViewController:alertController animated:YES completion:nil];
//
//
// } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
//
// // 请求失败
// NSLog(@"%@", [error localizedDescription]);
// }];
}
最后我们还需要修改http协议,这是由于iOS9中新增App Transport Security(简称ATS)特性。所以我们需要在Info.plist,增加如下的代码:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
这是时候启动测速,输入账号和密码
如果密码错误弹出如下的信息:
如果正确的话,或弹出如下的信息
这一节,就写得这里,下一节我们讲解登陆验证的一些优化。
欢迎订阅我的头条号:一点热,未经同意,请勿转载
相关推荐
- 利用navicat将postgresql转为mysql
-
导航"拿来主义"吃得亏自己动手,丰衣足食...
- Navicat的详细教程「偷偷收藏」(navicatlite)
-
Navicat是一套快速、可靠并价格适宜的数据库管理工具,适用于三种平台:Windows、macOS及Linux。可以用来对本机或远程的MySQL、SQLServer、SQLite、...
- Linux系统安装SQL Server数据库(linux安装数据库命令)
-
一、官方说明...
- Navicat推出免费数据库管理软件Premium Lite
-
IT之家6月26日消息,Navicat推出一款免费的数据库管理开发工具——NavicatPremiumLite,针对入门级用户,支持基础的数据库管理和协同合作功能。▲Navicat...
- Docker安装部署Oracle/Sql Server
-
一、Docker安装Oracle12cOracle简介...
- Web性能的计算方式与优化方案(二)
-
通过前面《...
- 网络入侵检测系统之Suricata(十四)——匹配流程
-
其实规则的匹配流程和加载流程是强相关的,你如何组织规则那么就会采用该种数据结构去匹配,例如你用radixtree组织海量ip规则,那么匹配的时候也是采用bittest确定前缀节点,然后逐一左右子树...
- 使用deepseek写一个图片转换代码(deepnode处理图片)
-
写一个photoshop代码,要求:可以将文件夹里面的图片都处理成CMYK模式。软件版本:photoshop2022,然后生成的代码如下://Photoshop2022CMYK批量转换专业版脚...
- AI助力AUTOCAD,生成LSP插件(ai里面cad插件怎么使用)
-
以下是用AI生成的,用AUTOLISP语言编写的cad插件,分享给大家:一、将单线偏移为双线;;;;;;;;;;;;;;;;;;;;;;单线变双线...
- Core Audio音频基础概述(core 音乐)
-
1、CoreAudioCoreAudio提供了数字音频服务为iOS与OSX,它提供了一系列框架去处理音频....
- BlazorUI 组件库——反馈与弹层 (1)
-
组件是前端的基础。组件库也是前端框架的核心中的重点。组件库中有一个重要的板块:反馈与弹层!反馈与弹层在组件形态上,与Button、Input类等嵌入界面的组件有所不同,通常以层的形式出现。本篇文章...
- 怎样创建一个Xcode插件(xcode如何新建一个main.c)
-
译者:@yohunl译者注:原文使用的是xcode6.3.2,我翻译的时候,使用的是xcode7.2.1,经过验证,本部分中说的依然是有效的.在文中你可以学习到一系列的技能,非常值得一看.这些技能不单...
- 让SSL/TLS协议流行起来:深度解读SSL/TLS实现1
-
一前言SSL/TLS协议是网络安全通信的重要基石,本系列将简单介绍SSL/TLS协议,主要关注SSL/TLS协议的安全性,特别是SSL规范的正确实现。本系列的文章大体分为3个部分:SSL/TLS协...
- 社交软件开发6-客户端开发-ios端开发验证登陆部分
-
欢迎订阅我的头条号:一点热上一节说到,Android客户端的开发,主要是编写了,如何使用Androidstudio如何创建一个Android项目,已经使用gradle来加载第三方库,并且使用了异步...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 利用navicat将postgresql转为mysql
- Navicat的详细教程「偷偷收藏」(navicatlite)
- Linux系统安装SQL Server数据库(linux安装数据库命令)
- Navicat推出免费数据库管理软件Premium Lite
- Docker安装部署Oracle/Sql Server
- Docker安装MS SQL Server并使用Navicat远程连接
- Web性能的计算方式与优化方案(二)
- 网络入侵检测系统之Suricata(十四)——匹配流程
- 使用deepseek写一个图片转换代码(deepnode处理图片)
- AI助力AUTOCAD,生成LSP插件(ai里面cad插件怎么使用)
- 标签列表
-
- idea eval reset (50)
- vue dispatch (70)
- update canceled (42)
- order by asc (53)
- spring gateway (67)
- 简单代码编程 贪吃蛇 (40)
- transforms.resize (33)
- redisson trylock (35)
- 卸载node (35)
- np.reshape (33)
- torch.arange (34)
- node卸载 (33)
- npm 源 (35)
- vue3 deep (35)
- win10 ssh (35)
- exceptionininitializererror (33)
- vue foreach (34)
- idea设置编码为utf8 (35)
- vue 数组添加元素 (34)
- std find (34)
- tablefield注解用途 (35)
- python str转json (34)
- java websocket客户端 (34)
- tensor.view (34)
- java jackson (34)