http://mobile.51cto.com/others-302254.htm
本文的内容如下:
- 在Native扩展中使用StoreKit框架
- ActionScript扩展
- ANE-IAP开发实例分享
本文用到的工具和设备如下:
Flash Builder 4.5
Flex SDK 4.5.1
Flash Professional CS5.5
AIR SDK 3.0
Xcode 4.1 + iOS SDK 4.3
iPad 1
在Native扩展中使用StoreKit框架
下载安装XCode 4和iOS SDK之后,让我们先来了解一下苹果原生类库是如何处理应用内付费功能的。iOS SDK中有一个框架叫做StoreKit,它负责应用程序和应用商店的业务流程。StoreKit中有一些负责具体功能的类,商品的请求,请求结果,结果回调,购买,购买队列等都由不同的类来完成。
图1 StoreKit的业务流程
如上图所示,StoreKit解决内付费业务的大体流程可以概括成这样,SKProductsRequest向商店发出请求获得商品信息,商店通过回调函数SKProductsRequestDelegate把请求的结果SKProductsReponse传了回来,如果用户选择购买商品,则创建一个SKPayment实例到购买队列SKPaymentQueue中,然后通过回调SKPaymentTransactionObserver来返回购买的结果。
我现在拿请求商品信息的部分来举例说明一下:
SKProductsRequest* req = [[SKProductsRequest alloc] initWithProductIdentifiers:pids]; req.delegate = observer; [req start];
上面的Objective-C的代码如果转译成ActionScript 3.0,相当于这个意思:
var req:SKProductsRequest = SKProductsRequest.initWithProductIdentifiers(pids); req.delegate = observer; req.start();
SKProductsRequest继承于父类SKRequest,通过静态方法initWithProductIdentifiers和参数pids创建了一个实例req,参数pids是一个数组,列出了需要请求的内付费商品ID。req通过start方法向商店发出请求,并在发出请求的动作之前给自己注册了一个回调函数observer。
observer是SKProductsRequestDelegate的实例,回调接口如下:
SKProductsRequest* req = [[SKProductsRequest alloc] initWithProductIdentifiers:pids]; req.delegate = observer; [req start];
转译成AS是如下的代码:
var req:SKProductsRequest = SKProductsRequest.initWithProductIdentifiers(pids); req.delegate = observer; req.start();
其中response就是请求的结果。
下面是一个完整的Objective-C函数体:
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{ NSLog(@"Products Received"); NSMutableString* retXML = [[NSMutableString alloc] initWithString:@""]; for (SKProduct* p in response.products) { [retXML appendFormat:@"%@%@%@%@",p.localizedTitle,p.localizedDescription,p.price,[p.priceLocale localeIdentifier],p.productIdentifier]; } [retXML appendFormat:@""]; for(NSString* s in response.invalidProductIdentifiers){ [retXML appendFormat:@"%@",s]; } [retXML appendFormat:@""]; FREDispatchStatusEventAsync(g_ctx, (const uint8_t*)"productsReceived", (const uint8_t*)[retXML UTF8String]); [retXML release]; [request release]; }
这里主要实现的是将结果格式化成一个XML流,然后通过派发事件传回给AS扩展类,注意这里派发事件用的是FREDispatchStatusEventAsync方法,它定义在FlashRuntimeExtension.h内部,前文我介绍过,这是负责与AS扩展类通信的类。
在AS类包中,通过注册的StatusEvent来侦听这个事件,并从e.level中取得XML流里的商品信息。
ext.addEventListener(StatusEvent.STATUS,onStatus); ... function onStatus(e:StatusEvent):void{ switch(e.code) { case "productsReceived": var xml:XML = new XML(e.level); ...... } }
购买的业务流程和请求信息的流程十分相似,这里我不一一介绍,大家可以在最后下载项目的代码来查看。
ActionScript扩展
在Saumitra提供的ANE扩展类中,AS部分的结构是这样的:
com.adobe.nativeExtensions.AppPurchase;
com.adobe.nativeExtensions.AppPurchaseEvent; com.adobe.nativeExtensions.Base64; com.adobe.nativeExtensions.Product; com.adobe.nativeExtensions.Transaction; |
其中AppPurchase负责业务流程以及与Native扩展的接口,AppPurchaseEvent定义了各种StatusEvent的状态,Product和Transaction定义了数据模型,Base64负责为参数转码。整个扩展类库简单易懂,我会在下面的项目实例中介绍其中用到的一些方法。
ANE-IAP开发实例分享
最后总结本系列教程所有的知识来做一个例子。
我首先做的准备是在iTunesConnect中创建了一个新的应用,并新建了四个内付费商品:plane(非消耗型),diary(非消耗型),bottle(消耗型),key(消耗型)。我希望在iPad的沙箱环境中测试以下的业务流程:
请求商品信息,购买消耗型和非消耗性商品,恢复非消耗型商品的购买状态,如果都成功则我的应用调试成功。
分析一下这个应用的UI需求,我需要一个按钮来触发请求商品信息的动作,然后需要一个列表来显示商品信息,接下来需要给每个商品添加一个购买的按钮。由于iPad上无法用trace等debug方法调试,所以我还需要一个监测的窗口来打印所有的流程信息。
下面是该应用的截屏:
图2 请求商品列表
图3 显示商品信息
图4 恢复非消耗型商品的购买状态
图5 购买新的消耗型商品
图6 输入测试用户密码
图7 购买成功
资源:
实例ANE-IAP(包括AS扩展类,Native扩展类)下载
如何使用本例:
开发者需要使用自己的证书和设备来打包和发布,有关如何打包ANE和如何发布IPA,我已经在这个系列教程的前文提到过了,本文不做重复介绍。
注意事项:
1,本例使用Flash Professional作为Compiler,使用Flash Builder作为代码编辑IDE,请在Flash Professional的发布设置中选择Flash Player,并在发布的时候忽略这个错误: VerifyError: Error #1014: Class flash.external::ExtensionContext could not be found。直接使用生成的SWF即可。
2,在iPad上测试之前务必要先注销已经登陆的苹果帐号,注销方法为,进入系统偏好设置,在左边列表内点击Store图标,然后点击在右侧出现的帐号,再在弹出的窗口中点击”注销“。
3,如果你没有用过XCode,不知道如何发布OBJC项目,请在安装XCode之后打开下载的Native扩展包里的AppPurchase.xcodeproj文件,项目打开后按Command+B,在左边项目资源列表的Products文件夹内会生成一个.a文件,右键点击后可以在Finder中找到这个文件。
总结:
本文所提供的例子,只是应用内付费的入门,如果要做真正的产品,你需要搭建自己的服务器用来验证购买商品的收据,以及在本地记录商品的使用状态并与服务器同步等等。这些知识不是本文的重点,这里不做详细介绍,感兴趣的朋友可以和我做进一步的探讨。谢谢各位!
相关推荐
在移动应用开发领域,Adobe AIR为开发者提供了一种跨平台的方式,使得创建的富互联网应用程序(RIA)能够运行在桌面和移动设备上,包括Android平台。Adobe AIR通过使用ActionScript或Flex作为主要编程语言,允许...
ANE使得ActionScript开发者可以扩展Flash Player和Adobe AIR的功能,以接入iOS、Android、Windows等操作系统提供的本地API和服务。 **ANE的工作原理** ANE的核心在于一个桥接机制,它通过ActionScript接口与原生...
1. **Adobe AIR SDK**: 开发AIR应用需要Adobe AIR SDK,其中包含了开发、打包和测试应用所需的库和工具。SDK包括了AIR运行时、模拟器、编译器以及相关的文档。 2. **HTML5和CSS3支持**: Adobe AIR支持HTML5和CSS3的...
【AIR ANE - FullScreen (+Interactive Fullscreen)】是一个针对Adobe AIR开发的扩展库,它主要功能是使应用程序能够在运行时自动适应不同设备的屏幕尺寸,并全屏显示。这个功能对于那些希望提供沉浸式用户体验的...
7. **调试与测试**:Adobe AIR提供了强大的调试工具,如Adobe Flash Builder的调试器,可以帮助开发者在开发过程中定位和修复问题。对于"Hello World"应用,调试可能包括确保文本正确显示,以及检查JavaScript代码的...
【标题】"admob ane android ios 稳定附例子详细教程"涉及的主要知识点是Adobe Air应用开发中集成Google AdMob广告网络的过程,适用于Android和iOS平台。AdMob ANE(Adobe Native Extension)是一种扩展,它允许Air...
"AIR" 是Adobe Integrated Runtime的缩写,它允许开发人员创建可以在桌面和移动设备上运行的跨平台应用程序。AIR为Flex应用程序提供了一个运行环境,使它们可以在用户的计算机或移动设备上独立运行,而不仅仅局限于...
Adobe AIR的本机扩展是一种允许开发者在其...整个教程详细地介绍了开发Adobe AIR本机扩展的每一个环节,从理论基础到实际操作,从代码编写到打包部署,使得开发者能够全面掌握在Adobe AIR平台上实现本机扩展的能力。
air-ane-fullscreen, 在Android上,为 Adobe AIR启用 true 全屏支持 全屏显示,适用于 Adobe AIRa的一个最常见的抱怨是,他们无法获得 true 全屏屏幕上的屏幕导航栏( 。包含背面,家庭和任务按钮的按钮) 。如果你是...
ANE(Adobe Native Extensions)是Adobe AIR为扩展Flash和ActionScript的功能而引入的一种技术。它允许开发者使用本地代码(如Java、Objective-C或C++)创建功能丰富的桌面和移动应用程序。在"ANE打包规范及开发技巧...
Adobe Air 的核心优势在于跨平台特性,开发人员无需针对不同的操作系统编写特定的代码,而是可以面向 AIR 运行时进行开发,这降低了管理各种设备系统复杂低级别 API 的需要。对于 Flash 开发团队来说,Adobe Air ...
《Adobe AIR权威指南》是一本深入探讨Adobe AIR技术的专业书籍,其核心内容是围绕着如何使用Adobe AIR开发桌面应用程序。本书旨在帮助开发者充分利用AIR平台,创建具有丰富用户体验的跨平台应用。书中通过一个名为...
这篇教程将深入探讨如何实现这一功能,并结合ANE(Adobe Native Extensions)来构建IPA(iOS应用程序)。 首先,我们要理解AS3(ActionScript 3)是Adobe Flash中的编程语言,它支持Air框架,使得开发者可以创建跨...
支付宝ANE,全称为Alipay Native Extension,是一种针对Adobe Air开发的应用程序扩展,允许开发者在Air应用中集成支付宝的支付功能,实现iOS和Android双平台的支持。这个技术是为了解决移动应用中的付费问题,使用户...
在本文中,我们将深入探讨如何使用Adobe AIR(Adobe Integrated Runtime)和ANE(AIR Native Extensions)进行打包,以创建本机扩展并提供一个完整的使用示例。ANE是AIR框架的一个强大特性,它允许开发者利用本地...
首先,让我们了解ANE的基本结构和开发流程: 1. **ANE结构**:一个ANE通常包括三个主要部分——ActionScript接口(AS3), native library(本地库)和描述文件(extension.xml)。AS3接口定义了ANE在AIR应用中暴露...
ANE全称为Adobe Native Extensions,是Flash Player和Flash Air的一个重要特性,它使得开发者能够利用原生的系统功能,比如硬件设备的访问,来增强其应用程序的功能。 要实现串口通信,开发者需要创建或使用已有的...
3. **Adobe AIR更新**:Adobe会定期发布AIR的更新版本,修复已知问题并添加新功能。用户可以通过自动更新机制或手动访问Adobe官网获取最新版本。 **三、使用AIR API** AIR提供了丰富的API集,包括: 1. **特定于...
5. **打包和部署**:将ANE集成到AIR应用中的步骤,包括在AIR应用的XML配置文件中添加ANE引用,以及如何打包和测试应用。 6. **示例代码**:可能会包含ACTIONSCRIPT的调用示例和原生代码的实现,展示如何创建、显示...
AIR、ANE与Android开发详例,从头到尾的介绍