自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Adobe AIR教程:ANE面向IAP的測(cè)試和開發(fā)

移動(dòng)開發(fā)
本文為AIR Native Extension實(shí)現(xiàn)iOS應(yīng)用內(nèi)付費(fèi)全教程的第四部分:ANE面向IAP的測(cè)試和開發(fā)。

本文的內(nèi)容如下

  • 在Native擴(kuò)展中使用StoreKit框架
  • ActionScript擴(kuò)展
  • ANE-IAP開發(fā)實(shí)例分享

本文用到的工具和設(shè)備如下
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擴(kuò)展中使用StoreKit框架

下載安裝XCode 4和iOS SDK之后,讓我們先來了解一下蘋果原生類庫是如何處理應(yīng)用內(nèi)付費(fèi)功能的。iOS SDK中有一個(gè)框架叫做StoreKit,它負(fù)責(zé)應(yīng)用程序和應(yīng)用商店的業(yè)務(wù)流程。StoreKit中有一些負(fù)責(zé)具體功能的類,商品的請(qǐng)求,請(qǐng)求結(jié)果,結(jié)果回調(diào),購買,購買隊(duì)列等都由不同的類來完成。

 

圖1 StoreKit的業(yè)務(wù)流程

如上圖所示,StoreKit解決內(nèi)付費(fèi)業(yè)務(wù)的大體流程可以概括成這樣,SKProductsRequest向商店發(fā)出請(qǐng)求獲得商品信息,商店通過回調(diào)函數(shù)SKProductsRequestDelegate把請(qǐng)求的結(jié)果SKProductsReponse傳了回來,如果用戶選擇購買商品,則創(chuàng)建一個(gè)SKPayment實(shí)例到購買隊(duì)列SKPaymentQueue中,然后通過回調(diào)SKPaymentTransactionObserver來返回購買的結(jié)果。

我現(xiàn)在拿請(qǐng)求商品信息的部分來舉例說明一下:

  1. SKProductsRequest* req = [[SKProductsRequest alloc] initWithProductIdentifiers:pids];
  2. req.delegate = observer;
  3. [req start]; 

上面的Objective-C的代碼如果轉(zhuǎn)譯成ActionScript 3.0,相當(dāng)于這個(gè)意思:

  1. var req:SKProductsRequest = SKProductsRequest.initWithProductIdentifiers(pids);
  2. req.delegate = observer;
  3. req.start();  

SKProductsRequest繼承于父類SKRequest,通過靜態(tài)方法initWithProductIdentifiers和參數(shù)pids創(chuàng)建了一個(gè)實(shí)例req,參數(shù)pids是一個(gè)數(shù)組,列出了需要請(qǐng)求的內(nèi)付費(fèi)商品ID。req通過start方法向商店發(fā)出請(qǐng)求,并在發(fā)出請(qǐng)求的動(dòng)作之前給自己注冊(cè)了一個(gè)回調(diào)函數(shù)observer。

observer是SKProductsRequestDelegate的實(shí)例,回調(diào)接口如下:

  1. - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response; 

轉(zhuǎn)譯成AS是如下的代碼:
 

  1. function productsRequest(request:SKProductsRequest, response:SKProductsResponse):void; 

其中response就是請(qǐng)求的結(jié)果。

下面是一個(gè)完整的Objective-C函數(shù)體:
 

  1. - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{
  2. NSLog(@"Products Received");
  3. NSMutableString* retXML = [[NSMutableString alloc] initWithString:@""];
  4. for (SKProduct* p in response.products) {
  5. [retXML appendFormat:@"%@%@%@%@",p.localizedTitle,p.localizedDescription,p.price,[p.priceLocale localeIdentifier],p.productIdentifier];
  6. }
  7. [retXML appendFormat:@""];
  8. for(NSString* s in response.invalidProductIdentifiers){
  9. [retXML appendFormat:@"%@",s];
  10. }
  11. [retXML appendFormat:@""];
  12. FREDispatchStatusEventAsync(g_ctx, (const uint8_t*)"productsReceived", (const uint8_t*)[retXML UTF8String]);
  13. [retXML release];
  14. [request release];

這里主要實(shí)現(xiàn)的是將結(jié)果格式化成一個(gè)XML流,然后通過派發(fā)事件傳回給AS擴(kuò)展類,注意這里派發(fā)事件用的是FREDispatchStatusEventAsync方法,它定義在FlashRuntimeExtension.h內(nèi)部,前文我介紹過,這是負(fù)責(zé)與AS擴(kuò)展類通信的類。

在AS類包中,通過注冊(cè)的StatusEvent來偵聽這個(gè)事件,并從e.level中取得XML流里的商品信息。

  1. ext.addEventListener(StatusEvent.STATUS,onStatus);
  2. ...
  3. function onStatus(e:StatusEvent):void{
  4. switch(e.code){
  5. case "productsReceived":
  6. var xml:XML = new XML(e.level);
  7. ......
  8. }
  9. }

購買的業(yè)務(wù)流程和請(qǐng)求信息的流程十分相似,這里我不一一介紹,大家可以在***下載項(xiàng)目的代碼來查看。

ActionScript擴(kuò)展

在Saumitra提供的ANE擴(kuò)展類中,AS部分的結(jié)構(gòu)是這樣的:

 com.adobe.nativeExtensions.AppPurchase;

com.adobe.nativeExtensions.AppPurchaseEvent;

com.adobe.nativeExtensions.Base64;

com.adobe.nativeExtensions.Product;

com.adobe.nativeExtensions.Transaction;

其中AppPurchase負(fù)責(zé)業(yè)務(wù)流程以及與Native擴(kuò)展的接口,AppPurchaseEvent定義了各種StatusEvent的狀態(tài),Product和Transaction定義了數(shù)據(jù)模型,Base64負(fù)責(zé)為參數(shù)轉(zhuǎn)碼。整個(gè)擴(kuò)展類庫簡單易懂,我會(huì)在下面的項(xiàng)目實(shí)例中介紹其中用到的一些方法。

ANE-IAP開發(fā)實(shí)例分享

***總結(jié)本系列教程所有的知識(shí)來做一個(gè)例子。

我首先做的準(zhǔn)備是在iTunesConnect中創(chuàng)建了一個(gè)新的應(yīng)用,并新建了四個(gè)內(nèi)付費(fèi)商品:plane(非消耗型),diary(非消耗型),bottle(消耗型),key(消耗型)。我希望在iPad的沙箱環(huán)境中測(cè)試以下的業(yè)務(wù)流程:

請(qǐng)求商品信息,購買消耗型和非消耗性商品,恢復(fù)非消耗型商品的購買狀態(tài),如果都成功則我的應(yīng)用調(diào)試成功。

分析一下這個(gè)應(yīng)用的UI需求,我需要一個(gè)按鈕來觸發(fā)請(qǐng)求商品信息的動(dòng)作,然后需要一個(gè)列表來顯示商品信息,接下來需要給每個(gè)商品添加一個(gè)購買的按鈕。由于iPad上無法用trace等debug方法調(diào)試,所以我還需要一個(gè)監(jiān)測(cè)的窗口來打印所有的流程信息。

下面是該應(yīng)用的截屏:

 

圖2 請(qǐng)求商品列表

 

圖3 顯示商品信息

 

圖4 恢復(fù)非消耗型商品的購買狀態(tài)

 

圖5 購買新的消耗型商品

 

圖6 輸入測(cè)試用戶密碼

 

圖7 購買成功

資源

實(shí)例ANE-IAP(包括AS擴(kuò)展類,Native擴(kuò)展類)下載

如何使用本例

開發(fā)者需要使用自己的證書和設(shè)備來打包和發(fā)布,有關(guān)如何打包ANE和如何發(fā)布IPA,我已經(jīng)在這個(gè)系列教程的前文提到過了,本文不做重復(fù)介紹。

注意事項(xiàng)

1,本例使用Flash Professional作為Compiler,使用Flash Builder作為代碼編輯IDE,請(qǐng)?jiān)贔lash Professional的發(fā)布設(shè)置中選擇Flash Player,并在發(fā)布的時(shí)候忽略這個(gè)錯(cuò)誤: VerifyError: Error #1014: Class flash.external::ExtensionContext could not be found。直接使用生成的SWF即可。

2,在iPad上測(cè)試之前務(wù)必要先注銷已經(jīng)登陸的蘋果帳號(hào),注銷方法為,進(jìn)入系統(tǒng)偏好設(shè)置,在左邊列表內(nèi)點(diǎn)擊Store圖標(biāo),然后點(diǎn)擊在右側(cè)出現(xiàn)的帳號(hào),再在彈出的窗口中點(diǎn)擊”注銷“。

3,如果你沒有用過XCode,不知道如何發(fā)布OBJC項(xiàng)目,請(qǐng)?jiān)诎惭bXCode之后打開下載的Native擴(kuò)展包里的AppPurchase.xcodeproj文件,項(xiàng)目打開后按Command+B,在左邊項(xiàng)目資源列表的Products文件夾內(nèi)會(huì)生成一個(gè).a文件,右鍵點(diǎn)擊后可以在Finder中找到這個(gè)文件。

總結(jié)

本文所提供的例子,只是應(yīng)用內(nèi)付費(fèi)的入門,如果要做真正的產(chǎn)品,你需要搭建自己的服務(wù)器用來驗(yàn)證購買商品的收據(jù),以及在本地記錄商品的使用狀態(tài)并與服務(wù)器同步等等。這些知識(shí)不是本文的重點(diǎn),這里不做詳細(xì)介紹,感興趣的朋友可以和我做進(jìn)一步的探討。謝謝各位!

 

責(zé)任編輯:佚名 來源: jamesli.cn/blog
相關(guān)推薦

2011-11-16 15:14:57

AdobeAIRiOS設(shè)備

2011-11-16 13:47:05

2011-11-16 16:21:09

AdobeAIR

2012-03-15 09:55:23

Adobe AIR安裝

2012-02-28 13:52:45

Adobe AIRAndroidFlash

2011-11-16 15:08:30

AdobeAIRiOS應(yīng)用

2012-03-09 10:46:35

Adobe AIR是什Adobe AIRAIR

2011-11-16 15:47:04

AdobeAIRiOS應(yīng)用

2013-05-03 15:06:08

AIR移動(dòng)應(yīng)用Android開發(fā)

2011-11-16 13:58:12

Adobe AIR

2011-11-17 15:01:37

AdobeAIR移動(dòng)應(yīng)用

2012-03-13 16:16:39

AdobeAIR for TV

2011-11-17 15:17:37

AdobeAIR調(diào)試性能

2009-06-25 10:46:22

Silverlight

2009-01-18 09:20:49

AIRAdobeFlex

2012-03-15 09:46:41

UbuntuLinux安裝Adobe AIR

2010-08-18 08:21:49

Adobe AIRAndroid

2010-10-29 09:28:52

Adobe AirAdobe MAXflash

2012-07-06 13:45:21

跨平臺(tái)工具Adobe AirFlex

2009-11-18 10:30:02

HTML5特性
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)