唐巧的博客

唐巧的博客

记录下自己学习的点滴

iOS应用内支付(IAP)的那些坑

前言

udacity 中的在线课程 《How to build a startup》 中提到,所谓创业,就是尝试寻找新的赢利模式。正因为这是一种尝试,所以不可避免地需要调整产品方向,寻找市场中还未被发现的用户需求,给用户创造价值,进而获得收入。最近很火的 精益创业 的观点,则是强调将这种尝试成本降到最小,使得自己可以根据市场反馈迅速调整产品。

我们在今年春节后上线了新的在线智能题库:猿题库。这应该是我们在互联网教育这个创业领域尝试的第二个方向。

猿题库现在推出了公务员考试行测和申论 2 个产品,均包括 web, iOS 和 Android 三个平台。这次我们尝试做一个收费的产品,所以在 iOS 端集成了应用内支付(IAP)功能。在开发过程中和上线后,我们遇到了 IAP 中的一些坑,在此分享给各位。

是否应该使用ARC?

我和身边做 iOS 开发的同事组建了一个 QQ 群,每隔一段时间,大家就会讨论是否应该使用 ARC。所以我觉得有必要将这些讨论分享出来,让大家消除对于 ARC 的疑虑。

分享iOS开发技巧的微信公共账号

记得我以前刚学 iOS 开发的时候,常常会遇到各种问题,身边没有人交流,遇到问题只能上网搜。虽然 stackoverflow 能解决大部分问题,但是还是很渴望和身边的一些同行进行讨论和交流。

后来,我组建了一个 QQ 群,尽力把自己通过各种渠道认识的 iOS 同行聚集到群里面,希望形成一个讨论环境。现在群里面加入了包括网易,腾讯,百度,新浪,搜狐,美团,豆瓣等公司的 iOS 程序员以及一些自由职业者。因为大家都是比较有经验的开发者,所以每天大家的讨论不太多,但是都很有价值。

设置应用内的系统控件语言

在iOS应用中,有时候会需要调用系统的一些UI控件,例如:

  1. 在UIWebView中长按会弹出系统的上下文菜单
  2. 在UIImagePickerController中会使用系统的照相机界面
  3. 在编译状态下的UITableViewCell,处于待删除时,会有一个系统的删除按钮。

以上这些UI控件中,其显示的语言并不是和你当前手机的系统语言一致的。而是根据你的App内部的语言设置来显示。结果就是,如果你没有设置恰当的话,你的中文App可能会出现一些英文的控件文字。

谈ObjC对象的两段构造模式

前言

Objective-c 语言在申请对象的时,需要使用两段构造 (Two Stage Creation) 的模式。一个对象的创建,需要先调用 alloc 方法或 allocWithZone 方法,再调用 init 方法或 initWithSomething 方法。如下是一个 NSString 对象的创建示例:

NSString * str = [[NSString alloc] initWithString:@"http://blog.devtang.com"];

由于该语言的对象创建方法和大多数其它语言(如 C、C++、Java、JavaScript)都不一样,所以引起了我的好奇。是什么原因促使 Objective-C 做了这种设计,而又是什么原因促使大多数其它语言都采用 “new” 方法来一次性创建对象呢?

在看了 《Cocoa Design Patterns》 一书(顺便吐槽一下该书中文版翻译质量不高,建议看英文版),并且做了一些调研之后,我将总结分享给大家,欢迎大家讨论。

在iOS中使用ZXing库

前言

ZXing(Github镜像地址)是一个开源的条码生成和扫描库(开源协议为Apache2.0)。它不但支持众多的条码格式,而且有各种语言的实现版本,它支持的语言包括:Java, C++, C#, Objective-C, ActionScript和Ruby。

我上周在iOS项目开发中使用了ZXing的扫描二维码功能。在此总结一下如何将ZXing集成到已有的iOS工程中,分享给大家。

StoryBoard--看上去很美

介绍

StoryBoard 是苹果在 2011 年的 WWDC Session 309《Introducing Interface Builder Storyboarding》中介绍的 Interface Builder 的新功能。其基本想法是将原本的 xib 进行升级,引入一个容器用于管理多个 xib 文件,并且这个容器可以通过拖拽设置 xib 之间的界面跳转。而这个容器就是被苹果称做的 StoryBoard。下图是一个 Storyboard 的截图。

关于IAP的破解

介绍

大概在今年7月份,有俄罗斯黑客破解了苹果的应用内付费(In-App Purchases),设备在不越狱的情况下就可以免费获得来自苹果官网App Store里应用的收费道具。受影响的产品众多,包括著名的Angry Birds,切水果,Mega Jump, Pandora等。这里有一份受影响的著名的游戏应用列表。

正常的越狱行为还是比较复杂的,需要下载破解软件,并且操作进入DFU模式,所以大部分人并不能够方便地越狱。但该方案不需要越狱就可以破解应用内付费,给用户实施该行为提供了方便。

iOS应用内付费(IAP)开发步骤列表

前两天和服务端同事一起,完成了应用内付费(以下简称IAP, In app purchase)的开发工作。步骤繁多,在此把开发步骤列表整理如下。因为只是步骤列表,所以并不含详细的说明教程,需要看教程的新手,可以看我附在最后的一些参考链接。

使用Privoxy做智能代理切换

You take the blue pill, the story ends, you wake up in your bed, and believe whatever you want to believe.

You take the red pill, you stay in Wonderland, and I show you just how deep the rabbit hole goes.

– 《黑客帝国》

如果你不知道什么是“墙”,那么应该祝福你继续活在美丽的Matrix里。但如果你选择服用红色药丸,那么在享受了墙外的信息流畅之后,你就再也无法忍受墙内的世界了。

放弃iOS4,拥抱iOS5

前言

苹果在2011年的WWDC大会上发布了iOS5,不过考虑到要支持iOS4.x的系统,大多数App都无法使用iOS5的新特性。现在将近1年半过去了,从我们自己的App后台的统计数据、一些第三方的统计数据和一些业界的朋友告知我的数据都显示,iOS4.x的系统所占比例已经小于5%了,并且还在持续下降。所以,我们有必要放弃对iOS4.x的支持,全面拥抱iOS5。

只支持iOS5.0以上版本使得我们可以使用iOS5带来的诸多新特性,有些新特性可以极大地方便我们的开发,我将这些新特性列举如下。

让Xcode的 stack trace信息可读

昨天在写 iOS 代码的时候,调试的时候模拟器崩溃了。异常停在了如下整个 main 函数的入口处:

int main(int argc, char *argv[])
{
@autoreleasepool {
// 异常停在了下面这行,毫无提示作用
return UIApplicationMain(argc, argv, nil, NSStringFromClass([MyClass class]));
}
}
改进iOS客户端的升级提醒功能

功能设计

先申明一下,我是码农,不是一个产品经理,但我觉得现有市面上的很多 App,设计的 “升级提示功能” 都不太友好。在此分享一下我的想法,欢迎大家讨论。

这些 App 包括:新浪微博、网易微博、网易新闻客户端以及大部分带有升级提示功能的 App,所以我觉得这个问题还是挺普遍的。对于该问题,一句话描述起来就是:“这些 App 都会在用户刚刚使用它的时候,提示有新版本,让用户去 AppStore 上下载最新的版本”。下面是某个应用的升级提示截图:

为什么我认为这是一个糟糕的设计呢?因为用户刚刚打开你的 App,明显就是想使用你的功能。例如刚刚打开新浪微博,可能就是想看一下最新的消息或回复。刚刚打开网易新闻客户端,可能就是想看看最新的新闻。这个时候,你告诉用户有新版本,是想让用户暂时放弃使用该 App 吗?我不知道有多少用户会去点 “升级” 这个按钮,反正我每次看到这个提示都很郁闷,因为我如果点了,我就暂时不能使用该应用了(升级时原版本的 App 是无法使用的)。所以我在想,这个提示升级的时间能不能做得更友好一些?

在MacOS和iOS系统中使用OpenCV

前言

OpenCV 是一个开源的跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法。

最近试着在 MacOS 和 iOS 上使用 OpenCV,发现网上关于在 MacOS 和 iOS 上搭建 OpenCV 的资料很少。好不容易搜到些资料,却发现由于 OpenCV 和 Xcode 的版本更新,变得不再有用了。有些问题费了我很多时间,在此总结分享给大家,希望后来人少走些弯路。

可以预见到,随着 Xcode 和 OpenCV 的版本更新,本文可能不再有效了。

所以特此注明,文本介绍的搭建方法仅针对于 Xcode4.5.1 和 OpenCV 2.4.2 版本。

(2013-6-22)更新: 我在 Xcode4.6.2 和 OpenCV 2.4.5 版本的时候重新进行了一次环境搭建,以下内容做了相应调整,应该也是有效的。

粉笔网的架构和项目管理
10 月 10 日,在 CMDN 炫姐姐 的邀请下,我们粉笔网团队通过 CSDN 的 CMDN Club, 对外进行了第一次 技术分享。分享的内容主要包括 2 部分: 第一部分是关于粉笔网使用 ...
让你的APP支持iPhone5

前言

国庆节前,为了支持 iPhone5 的屏幕分辨率 (640 象素 x 1136 象素),我尝试着升级粉笔网 iPhone 客户端。整个过程花了大概一天的时间,我把这个过程总结下来,希望对大家有帮助。

谈谈我的创业感受

5 个程序员,3 个多月时间,30 多万行代码,1000 个 bug,只为打造卓越产品。

开发历程

先简单介绍一下产品。我们的产品叫 “粉笔网”,这是一个新颖的学习社区。我们公司的创始人是前网易高管 李勇。我们团队从 4 月份开始筹备,5 月份开始工作,整个开发历经 3 个多月,其中网站于 8 月 28 号顺利上线,iPhone 客户端Android 客户端 于 9 月 8 日顺利通过审核上线。

用脚本来简化iOS美术同学的工作

问题

我们知道,在 iOS 开发中,为了使我们的 app 能够同时支持 iPhone 的 Retina 屏幕和普通屏幕,美术同学需要对 UI 设计稿中的每个元素进行 2 次切图。苹果要求对图片元素的命名分别为 name.png 和 name@2x.png,带 @2x 的表示是 Retina 屏幕的贴图,不带 @2x 的同名文件为普通屏幕的贴图。

我在开发的时候发现很难要求美术同学按照开发的要求来对图片命名。她们通常对于切图的命名是例如 * 登录按钮大 .png* ,* 登录按钮小 .png, * 登录按钮按下大 .png * 登录按钮按下小 .png* 这样的形式。于是,对这些文件按照苹果的要求进行重命名就成了我这个码农的一个体力活。

avatar
唐巧
一个中年程序员,正在努力学习做业务