您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > IAP(应用程序内购买)完全攻略
原文:原帖地址:=69165&fpage=4参考:第一印象觉得In-AppPurchase(简称IAP)非常简单。Apple提供的大量文档应该让开发者很快熟悉地熟悉。那么,为什么在你的应用中集成IAP特性就如此令人生厌呢?这是因为在开发过程中不可避免会出现一些错误。而但这些错误发生的时候,你就抓瞎了。虽然Apple提供了有关IAP的大量文档,但他们并未提及集成IAP的详细步骤。而且对StoreKit集成过程中出现的问题也没有一个核对清单。另外对于为什麽诸如产品ID非法之类的问题也没有提供NSError之类的对象来告诉你原因。在试用了各种可能的解决方桉后,你只能身心疲惫,彷徨无助。为了提高你的效率和减少你的痛苦,我觉定利用此文来介绍一下实现IAP的详细步骤。本文很详细,有点长。甚至可能太长了,但不像Apple的文档,它提供了为实现IAP的每一个步骤。废话少说,我们直入主题吧。概况IAP能正常工作的秘诀:分成两个步骤:创建及提取产品描述购买产品第一个步骤是你可能遇到问题的部分。一旦你在代码中成功地获取了产品描述,编写购买产品的代码不过是小菜一碟。我们先看看步骤1。创建及提取产品描述下面是有关创建产品及提取其描述的非常粗略的步骤:创建唯一的AppID生成及安装新的provisioningprofile文件在Xcode中更新bundleID及codesigningprofile如果还没做的话,请在iTunesConnect中提交有关你程序的metadata如果还没做的话,请在iTunesConnect中提交你程序的二进制码为IAP添加新产品编写提取产品描述的代码等待几小时提取产品描述的代码非常简单,但其他步骤则很容易错。注意:为提取产品描述,你并不需要在iTunesConnect中创建IAP测试用户。1.创建唯一的AppID为支持IAP,你的AppID不能包括通配符(“*”)。为确定你的AppId是否包括通配符,请登录在iPhoneDeveloperProgramPortal中选择左边菜单中的“AppIDs”检查你的AppID。下面是一个唯一的AppID:7DW89RZKLY.com.runmonster.runmonsterfree下面不是一个唯一的AppID:7DW89RZKLY.com.runmonster.*如果你还没有一个唯一的AppID,按如下步骤创建一个:在developerportal中的AppIDs部分,选择“NewAppID”填写下列信息:Displayname(显示名):选取一个不同的AppID的名称。你不能编辑或删除旧的AppID,所以你必须为你的AppID提供一个新名称以避免溷淆。Prefix(前缀):生成一个新的前缀,或者如果你的程序是通过KeychainServicesAPI分享数据的系列程序中之一的话,则选用已存在的前缀。Suffix(后缀):com.companyname.appname(这是通用格式–注意没有使用通配符)。按“Save”按AppID旁的“Configure”链接选取“EnableInAppPurchase”选择框按“Done”2.创建一个新的ProvisioningProfile文件在创建了新的AppID后,你需要生成一个指向这个AppID的新provisioningprofile。下面就是令人痛苦的生成和安装新provisioningprofile的详细步骤:在iPhoneDeveloperPortal中,选择左边的Provisioning部分确保你处于Development标籤下,按下右上角的“NewProfile”填入所需信息并指向你刚创建的唯一的AppID如果你在Actions条目下看到“Pending”,那麽请按下“Development”标籤标题进行刷新点击“Download”下载新的profile文件将profile文件拖入到Dock中Xcode图标上进行安装如果你想在硬盘上保存provisioningprofile,那麽你可以按如下步骤手工安装profile:在Xcode中,选择WindowOrganizer选择左边“ProvisioningProfiles”分类Ctrl-按下profileRevealinFinder将新profile拖入到profileFinder窗口3.更新Xcode设置在Xcode中安装了profile文件后,你需要对使用此provisiongprofile的项目进行一些编辑工作:编辑项目.plist文件使其BundleID与AppID匹配。忽略ID开始部分的字母数字序列。例如,在DeveloperPortal中你的AppID为“7DW89RZKLY.com.runmonster.runmonsterfree”,那麽在BundleID中你只需输入“com.runmonster.runmonsterfree”。编辑项目的target信息以使用新的provisioningprofile:选取ProjectEditActiveTarget选取顶部“Build”标籤选取需要的configuration(通常为Debug)在CodeSigningIdentity中选择新的provisioningprofile在CodeSigningIdentity之下的行中(可能名为AnyiPhoneOSDevice)选择新的provisioningprofile4.添加你的应用程序如果你的程序已经发表到AppStore了,那麽可以略过此步骤。在你将产品添加到iTunesConnect之前,你必须添加此产品所需的程序。如果你的程序还没有100%完成也无需担心,你可以先提交具有部分数据的程序,最后再提交真实的程序。注意:只有SKU和version(版本)部分是以后不可修改的登录到点击右边链接进入iTunesConnect注意:你必须先登录到developer.apple.com,否则会有不测发生(译者注:具体是什麽不测我也不太清楚,胆大的请自己试一下)在iTunesConnect主页点击“ManageYourApplications”在右上角点击“CreateNewApplication”填写程序所需的一切信息。当要求程序二进制码时,请选择稍后上传选项。5.提交程序二进制码Apple的文档中没有任何地方提及详情,但它却是必须的步骤。要成功测IAP功能,你必须提交程序的二进制码。即使你的程序还没有100%完成,你仍然需要提交二进制码。然而,你也可以立即摈弃你的二进制码,使其不会进入审核阶段。下面这些步骤非常关键,我可是因为少做了某些步骤而度过了一段非常痛苦的时间:生成AppStore发佈版程序如果你不知怎麽做,请在iPhoneDeveloperPortal中点击左方的Distribution标籤,并选择“PrepareApp”标籤。然后,根据蓝色链接的指示:获取iPhone发行许可证创建并下载在AppStore发行所需的iPhoneDistributionProvisioningProfile在Xcode中生成程序的发行版在iTunesConnect中进入程序页选择“UploadBinary”上传.zip压缩程序如果你的程序还没有100%完成以进行审核,那麽请点击iTunesConnect中你程序首页中的“RejectBinary”链接。程序的状态应该更新为“DeveloperRejected”.不用担心,由于程序的状态是“DeveloperRejected”,Apple是不会对其进行审核的。你可以在任何时候提交程序的新版本并使其状态为“DeveloperRejected”,这不会对以后程序正式提交的等待时间有任何影响。6.添加产品完成了以上所有步骤后,我们最终可以向iTunesConnect中添加产品了。确保登录到进入iTunesConnect主页点击“ManageYourinAppPurchases”链接点击“CreateNew”选择你的程序填写下列产品信息:ReferenceName(参考名称):产品的通用名称。比如,我使用的是“ProUpgrade”。此名称是不允许进行编辑的,它不会显示于AppStore中。ProductID(产品ID):你产品的唯一id。通常格式是com.company.appname.product,但它可以说任何形式。它并不要求以程序的AppID作为前缀。Type(类型):有三种选择Non-consumable(非消耗品):仅需付费一次(例如你希望将出现从免费版升级为专业版)Consumable(消耗品):每次下载都需要付费Subscription(预订):循环反覆PriceTier(价格等级):产品价格。参见不同等级的价格列表。ClearedforSale(等待销售):一定要选取此项,否则的话,测试时会发生非法产品ID的错误。LanguagetoAdd(增加的语言):选一项。下列两项将出现:DisplayedName(显示名称):用户看到的产品名称。比如我选择“UpgradetoPro”。Description(描述):对产品进行描述。此处输入的文本将与DisplayedName及Price一起在你代码中提取SKProduct时出现。Screenshot(截屏):展示你产品的截屏。儘管屏幕上会显示“提交截屏会触发产品审核过程”之类的文字(个人拙见,这是非常糟糕的设计),你还是可以安全地提交截屏而不会使产品进入审核过程。存储后,选择“Submitwithappbinary”(随程序二进制码一起提交)选项。是产品与程序二进制绑定在一起,所以在你最后正式提交100%完成的程序二进制码时,产品也会随之提交。点击“Save”7.编写代码下面我们开始编写代码对刚加入到iTunesConnect中的产品信息进行提取。我访问产品数据,我们需要使用StoreKitframework。注意:StoreKit无法在模拟器上工作。你必须在真机上进行测试。1.添加StoreKitframework到你的项目中。2.添加SKProduct引用到你的.h文件中:复制代码//InAppPurchaseManager.h#importStoreKit/StoreKit.h#definekInAppPurchaseManagerProductsFetchedNotification@kInAppPurchaseManagerProductsFetchedNotification@interfaceInAppPurchaseManager:NSObjectSKProductsRequestDelegate{SKProduct*proUpgradeProduct;SKProductsRequest*productsRequest;}注意:InAppPurchaseManager是一个单例类,它处理程序中所有IAP任务。它是本文中的示例程序。3.产品请求,并在相应.m文件中实现代理协议:复制代码//InAppPurchaseManager.m-(void)requestProUpgradeProductData{NSSet*productIdentifiers=[NSSetsetWithObject:@com.runmonster.runmonsterfree.upgradetopro];productsRequest=[[SKP
本文标题:IAP(应用程序内购买)完全攻略
链接地址:https://www.777doc.com/doc-2876657 .html