iOS开发

您所在的位置:网站首页 苹果开发app挣钱吗是真的吗 iOS开发

iOS开发

2024-07-07 22:14| 来源: 网络整理| 查看: 265

相信大家都有过做自己APP的想法,我把以前踩过的坑记录一下,大家多多少少也可以参考一下,受见识的局限可能会比较浅薄,请大家多多谅解。 👇下面是介绍,也可以直接下载源码

准备:

首先需要一个自己的开发者账号(因为我没有有国际支付功能的银行卡,所以找淘宝代充的,但是最后去银行办个visa卡,不然其他账号违规,容易被关联)(如果有账号的可以跳过准备,看下面) iOS的开发者账号分为3种。

个人账号:每年688RMB,容易申请,在上架App Store后,开发者直接显示申请人姓名,个人使用,每一种Apple产品,均有各类设备各100台测试权限。iPhone、iPad、Mac等。

公司账号:每年688RMB,需要邓白氏编码才能申请,上架App Store的App开发者显示公司,公司账号下,可以添加多个测试子账号,支持Xcode在真机测试,但是子账号没有上传App Store权限。与个人账号权限类似,均有各类设备各100台测试机权限,iPhone、iPad、Mac等。

企业账号: 每年299美元,自行换算因为就这个我没买过。申请相对负责,审核比较严格,与公司账号不同处在于,测试设备无限,可以不将开发的App上架App Store,而仅供内部公司人员使用。

我用的是第一种,个人账号

然后登陆苹果后台,创建证书

苹果后台.png 证书创建

然后创建应用,填写资料

创建应用 第一步 先说怎么赚钱吧:

基本上个人开发者做应用,赚钱的方式就那么几种:

1.应用做好了,有人买你的应用

这个有很大的风险,现在好多买应用的,都是做马甲号的,容易被封号;当然不排除你做的很好,被公司看上了的情况,但是几率很小

.2.应用收费下载

就是下载要钱,大部分都是游戏类,工具类或者是笔记类的APP 首先在苹果后台选择价格,然后保存,价格都是固定的,按照苹果价格表来的。

选择价格,然后保存 在应用商店就可以看到了 3.苹果内支付,增值收费

比如说购买会员,或者是礼物打赏的礼物之类的,要使用苹果内支付需要给苹果30%的分成,只有超过150刀才会给你打钱,而且具体使用中还有好多坑,等等慢慢吐槽。 需要付费的虚拟物品必须使用苹果内支付(比如直播打赏的道具),当然你也可以隐藏一个用于支付的H5页面(不过被发现了下场会很惨) 具体的过程简书作者Bison说得很清楚了,我就不细说了; 首先是类型的选择

屏幕快照 2017-01-04 上午11.22.41.png 然后是审核最好详细点,最好有图片,千万不要高估审核人员的智商,不要高估,不要高估(重要的事情说三遍,说多了都是泪啊,有可能在哪购买他都找不到) 最后只能被迫录视频给他们, 最后提醒大家一下 如果是企业开发的话一定要和后台说清楚,不要只和苹果服务器校验是否成功,要把例如产品ID,价格都校验一下,而且要把订单标记为已购买(因为苹果服务器订单校验成功是没有时间限制的,如果一个人花一块钱买个东西把数据抓到以后,用这个订单再买别的东西,你只校验成不成功的话会出问题的)

4.应用内加广告

虽然在App中加入广告来盈利是比较低级的商业化方式,但对于个人开发者或者小团队开发者来说也是个不错的选择, 基本上应用的广告收入都是按展示和点击计算的,各种广告联盟都有自己的SDK,直接引用就行了。 如果用户有好多是国外的,可以使用谷歌GoogleAdMob,但是访问得要梯子,而且是用美金结算的,只有超过100刀才会给你。 如果只是国内的话可以用腾讯广告,结算属于比较快的,一月一结没有金额限制。 腾讯广告后台详情,基本上是没有怎么理会过

腾讯广告后台

广告形式主要有: 开屏广告,原生广告,横幅广告,插页广告,视频广告; 开屏广告和原生广告用户体验好,大厂用的比较多,其它的用户体验都比较差

横幅广告 插页广告 第二步 数据接口:

因为没有服务器(当然会搭服务器的小哥可以跳过),网上有好多免费的API数据接口,大家可以找一下看看有没有需要的。 当然也可以使用各种的云服务,最稳定的应该属于腾讯云和阿里云了,但是比较贵。

免费的也有,像是bmob后端云或者是LeanCloud(不过免费版有很多限制)

我现在用的bmob后端云,控制台效果:

后端云控制台 具体实现代码奉上

//注册key [Bmob registerWithAppKey:BmobAppkey]; //登录 [BmobUser loginWithUsernameInBackground:@"用户名" password:@"登录密码" block:^(BmobUser *user, NSError *error) { if (user) { 登录成功 } else { 登录失败 } }]; BmobUser *bUser = [[BmobUser alloc] init]; bUser.username=views.username.textField.text;//名字 bUser.password=views.password.textField.text;//密码 [bUser signUpInBackgroundWithBlock:^ (BOOL isSuccessful, NSError *error){ @"注册成功" } else { @"注册失败" } }];

具体数据的增删改查,看文档吧这里就不细讲了

实在不行的话可以使用抓包工具来寻找自己需要的数据,工具下载奉上

第三步 用户第三方登录分享:

用户第三方登录分享(不需要的可以跳过去) 新浪开发平台地址 腾讯开放平台地址 微信开发平台地址 注册提交资料就行,注意微信提交审核的官网要正规点,不然审核不过,随便搭个好看点的静态页面吧。 SDK可以单独集成,也可以使用第三方,推荐使用友盟,使用简单点而且加入友盟统计的时候方便点

依赖库.png

第四步 应用统计:

集成友盟统计(不需要的可以跳过) 集成友盟统计可以分析流量来源、内容使用、用户属性和行为数据,可以知道用户干了什么

//初始化SDK //设置友盟Appkey [UMSocialData setAppKey:UmengAppkey]; //使用友盟统计 UMConfigInstance.appKey = UmengAppkey; UMConfigInstance.channelId = @"App Store";//来源 [MobClick startWithConfigure:UMConfigInstance];

设置用户的属性,这样用户做的事件就可以携带着这些属性,传的样式是字典

//设置超级属性 NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithObjectsAndKeys:user.idString, @"uid",user.nickName,@"name",user.gender, @"sex", nil]; [DplusMobClick registerSuperProperty:dic];

统计页面

- (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; [MobClick beginLogPageView:@"首页"]; } - (void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; [MobClick endLogPageView:@"首页"]; }

自定义事件,数量统计,比如可以统计充值按钮被点击的多少下

@param eventId 网站上注册的事件Id. @param label 分类标签。不同的标签会分别进行统计,方便同一事件的不同标签的对比,为nil或空字符串时后台会生成和eventId同名的标签. @param accumulation 累加值。为减少网络交互,可以自行对某一事件ID的某一分类标签进行累加,再传入次数作为参数。 [MobClick event:@"kaola_props"];//传定义的ID 第五步:bug收集

用过的感觉腾讯bugly界面好看点,友盟方便点直接友盟统计就可以收集到。其实也没啥好说的,腾讯bugly也可以统计,友盟统计也可以收集bug,感觉都差不多。

腾讯bugly.png 第六步:消息推送

现状推送的第三方SDK很多,像友盟推送,极光推送,信鸽消息推送等等,个人感觉极光推送是最快的(也有可能是自己的错觉,个人看法)

1.创建推送证书 创建推送证书1.png 创建推送证书2.png 2.导入SDK将SDK包解压

在Xcode中选择“Add files to 'Your project name'...”,将解压后的lib子文件夹(包含JPUSHService.h、jpush-ios-x.x.x.a,jcore-ios-x.x.x.a)添加到你的工程目录中。

3.使用

极光推送可以设置标签和别名达到个性化单独推送的效果,比如单独推送某人,或者按地区推送。 具体实现自己看极光开发者文档吧太多了,不细写了,

4.点击推送控制跳转的页面

在networkDidReceiveMessage函数里处理得到的参数, 来确定跳转的页面 注意设置角标,不过好像第一次点进角标不会消失,再点才会,好像简书的也是这样(不知道是不是错觉)

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { if (userInfos==nil) { userInfos =userInfo ; // 通知方法回调:接受自定义消息 [self networkDidReceiveMessage:userInfos]; } [JPUSHService handleRemoteNotification:userInfo]; [JPUSHService setBadge:0];// 设置角标(到服务器) } 第六步:应用内用到的图标

做应用需要这样的图标怎么办

图标讲解.png 做应用的话,需要用到好多图标(作为连画画都不会的人来说,能愁死。当然如果有好的UI朋友的话可以跳过) 矢量图的话推荐用阿里矢量图库图标算是最全的了,基本上搜的都有, 阿里矢量图.png 下载的话可以设置格式,颜色,大小 阿里矢量图2.png 应用图标尺寸 应用图标.png

App Icons的尺寸大小(里面有iPhone和iPad的尺寸,可以自己删除不需要的)

图标尺寸.png 启动图片尺寸输出列表: 640x960 640x1136 750x1334 1242x2208

第七步:应用国际化

说实话这可是个体力活(不然不就白叫码农了吗),英语分个美国英国等等,现在连繁体字也分香港和台湾(兄弟们准备好翻译软件了吗)

介绍宣传国际化(也可以叫本地化) 介绍本地化.png 代码国际化

首先点击项目->PROJECT->Info->Localizations中添加要支持的语言

代码国际化.png

然后就会多出两个文件来

添加效果图.png

InfoPlist.strings是应用名称国际化 例如: CFBundleDisplayName="XWstarNote"; CFBundleDisplayName="晓文星球笔记";

Localizable.strings是应用内容国际化 例如: //首页列表 (中) "HomeTite1" = "金星(衣)"; "HomeTite2" = "木星(食)"; "HomeTite3" = "水星(住)"; "HomeTite4" = "火星(行)"; "HomeTite5" = "土星(其它)"; "HomeTite6" = "创建自己的星球"; (英) //首页列表 "HomeTite1" = "Venus(dressing)"; "HomeTite2" = "Jupiter(eat)"; "HomeTite3" = "Mercury(live)"; "HomeTite4" = "Mars(motion)"; "HomeTite5" = "Saturn(other)"; "HomeTite6" = "Create your own planet";

宏定义 /** 代码切换语言 **/ #define Localized(key) NSLocalizedString(key, nil) 使用 titearray=[NSMutableArray arrayWithObjects:Localized(@"HomeTite1"),Localized(@"HomeTite2"),Localized(@"HomeTite3"),Localized(@"HomeTite4"),Localized(@"HomeTite5"),nil];

切换语言效果

效果图中文.png 效果图英文.png 第八步:数据持久化(应用储存)

持久存储是一种非易失性存储,在重启设备时也不会丢失数据。 NSUserDefaults,用于存储配置信息 SQLite,用于存储查询需求较多的数据 CoreData,用于规划应用中的对象 使用基本对象类型定制的个性化缓存方案

最常用和简单的应该就属于NSUserDefaults了 比如储存一些用户的信息或者设置的信息 最好封装一下节省代码 修改直接把key传过去就行会覆盖原来的数据 删除的话把key传过去个“”空也行

//获取数据 +(id)getData:(NSString*)key{ return [NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] objectForKey:key]]; } //设置数据 +(void)setData:(NSString *)key data:(id)data{ [[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:data] forKey:key]; [[NSUserDefaults standardUserDefaults] synchronize]; } //清空 [[NSUserDefaults standardUserDefaults] removeObjectForKey:key]; [[NSUserDefaults standardUserDefaults] synchronize];

那么问题来了 NSUserDefaults只适合存储轻量级的本地数据,一些简单的数据(如NSString类型的),但是如果我们自定义了一个对象,对象保存的是一些信息,这时候就不能直接存储到NSUserDefaults了怎么办 可以将自定义类型转换为NSData类型 我们先建立一个叫UserInfo 的类,这个类里有各种属性来储存用户的信息,这里要实现 在.h 文件中申明 NSCoding 协议,再 在 .m 中实现 encodeWithCoder 方法 和 initWithCoder 方法就可以了

@interface ModelUser : UserInfo -(void)encodeWithCoder:(NSCoder *)encoder{ [encoder encodeObject:self.usersecurityMoel forKey:@"usersecurityMoel"]; [encoder encodeObject:self.followIds forKey:@"followIds"]; [encoder encodeObject:[NSString stringWithFormat:@"%d",self.isLoginS] forKey:@"isLoginS"]; } - (id)initWithCoder:(NSCoder *)decoder { if (self = [super init]) { self.usersecurityMoel = [decoder decodeObjectForKey:@"usersecurityMoel"]; self.followIds = [decoder decodeObjectForKey:@"followIds"]; self.isLoginS =((NSNumber*) [decoder decodeObjectForKey:@"isLoginS"]).boolValue; } return self; }

最后转换储存就行了

//存储 NSData *securityObject = [NSKeyedArchiver archivedDataWithRootObject:model]; [user setObject:securityObject forKey:@"UserInfo"]; [user synchronize]; //读取 NSData* data = [[NSUserDefaults standardUserDefaults] objectForKey:@"UserInfo"]; UserInfo *userInfo = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 第九步:IM聊天消息( 单聊,群聊,聊天室)

应用有时候需要用户单聊,或者群聊,也有可能需要客服聊天,不管怎么说也可以增进用户的黏贴性。 市面上提供IM SDK服务的最大的应该就是环信了吧(个人感觉),但是自从腾讯把它的IM放出来之后感觉有点变化。 之前说腾讯的信鸽推送用得不太好,但是感觉腾讯云IM对并发的处理更好一些,而且功能多(虽然给的demo有点烂),支持创建超级大群(可以超过一万人 上限多少没说)像如果做直播聊天室的话还是挺方便的,而且腾讯云IM有自己的用户管理系统可以帮自己省很多事。

第十步:JSPatch(热更新)

原因 由于Apple严格的审核标准和低效率,iOS应用的发版速度极慢,稍微大型的app发版基本上都在一个月以上,所以代码需要热更新。 介绍 JSPatch 是一个 iOS 动态更新框架,只需在项目中引入极小的引擎,就可以使用 JavaScript 调用任何 Objective-C 原生接口,获得脚本语言的优势:为项目动态添加模块,或替换项目原生代码动态修复 bug。 基础原理 Objective-C是动态语言,具有运行时特性,该特性可通过类名称和方法名的字符串获取该类和该方法,并实例化和调用。 我们可以通过类名/方法名反射得到相应的类和方法, 也可以替换某个类的方法为新的实现, 还可以新注册一个类,为类添加方法。 具体的方法可以看它的官网

热更新.png 现在只说一下工程应用的步骤(因为后台不太想管理热补丁,所以整个流程都是客户端完成的) 1.先导入JSPatch SDK到工程里(很小的,只有几个文件) 2.根据JSPatch语法写好热补丁,然后MD5加密上传到七牛,因为要自己管理七牛文件命名 开头一个字母来判断是否是正式环境,后面加上版本号。 3.每次进入应用判断有没有热补丁就行了。。 4.苹果爸爸说以后热更新,热修复不让用了,恭喜热修复不用看(ᵒ̤̑ ₀̑ ᵒ̤̑)

未完待续。。。。。最近在找工作 有时间更新东西了,想到什么写什么吧!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3