IMG_0001.PNG    

不眠不休,棄而不捨的搞了好多天,終於把In-App Purchase的問題搞定了,嚴格說來啟用In-App不難,但難的是一旦有問題時不容易了解問題出在哪,得花很大的精神去檢查,所以趁剛搞定時趕緊來寫個簡單的心得。希望和我一樣的有志一同,想上AppStore用IAP賺錢的iOS開發者,可以少走一點冤枉路...

首先是設定的部份,步驟相當的複雜且煩瑣,但是可以參考底下這篇文章,它把整個設定和程式碼的部份交代得非常詳細,請務必照這篇文章來試做,且每一個環節都不能疏忽,所以我這邊就不再重複了。

In App Purchases: A Full Walkthrough

那...滿滿的都是英文,對於像我這種有英文障礙的人是很大的困擾,沒關係,對岸有人將它完整翻譯成簡體中文,這真是功德無量,佛心來的。

IAP(程序内购买): 完全攻略

如果還是對簡體中文有若干的閱讀障礙,那那那...只好把文章整篇複製貼到Word文件,然後用內建的繁簡轉換吧~

簡單的說,當一切就緒時,可以先透過簡單的程式碼,用SKProductsRequest檢查ProductID是否合法,來判定整個設定/環境/程式碼是否正常。

if ([SKPaymentQueuecanMakePayments]) {

NSLog(@"Parental-controls are disabled");

SKProductsRequest *productsRequest = [[SKProductsRequestalloc] initWithProductIdentifiers:

[NSSetsetWithObject:@"com.yourcompany.appname.productid1"]];

productsRequest.delegate = self;

[productsRequest start];

} else {

NSLog(@"Parental-controls are enabled");

}

 

//SKProductsRequestDelegate

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {

SKProduct *validProduct = nil;

int count = [response.products count];

if (count > 0) {

validProduct = [response.products objectAtIndex:0];

NSLog(@"validProduct = %@",validProduct.productIdentifier);

} else if (!validProduct) {

NSLog(@"No products available");

}

 

for (NSString *invalidProductId in response.invalidProductIdentifiers)

   {

        NSLog(@"Invalid product id: %@" , invalidProductId);

   }

}

 

- (void)request:(SKRequest *)request didFailWithError:(NSError *)error{  

    UIAlertView *alerView =  [[UIAlertViewalloc] initWithTitle:@"Alert"message:[error localizedDescription]  

delegate:nil 

cancelButtonTitle:@"Close"

otherButtonTitles:nil];  

[alerView show]; 

[alerView release]; 

 

}

 

如果一路照著做下來,很僥倖的成功了,代表你的命好,運氣相當不錯,一次就能成功。不過,台灣的程式設計師幾乎都是命運坎坷來的(有這種好運的人,應該去買樓炒股買彩卷),而且有越來越多的iOS開發者都是原本錢途暗淡,事業財運不佳才轉職來幹的工作,所以命運乖違的iOS Programmer不用奢望一次搞定,第一次接觸IAP一定會遇到不能運作的問題,這是正常的。

成功的話,Console會顯示validProduct = com.yourcompany.appname.productid1,若不幸失敗,Console會顯示 No products avalable,Invalid product id: com.yourcompany.appname.productid1。如果是其他錯誤(通常是無法連線網路這種明顯問題),會跳出Alert視窗。最麻煩的是出現response.invalidProductIdentifiers,就是所謂的『Invalid Product ID』羅生門事件,這表示ProductID回傳錯誤,卻沒有錯誤碼可以對照。

一旦ProductID回傳錯誤,表示這個產品(Product)無法被付款購買,也不會進入付款的流程,於是開發者也收不到任何收入,於是開發者很快就餓死了,所以這個問題很嚴重...

ProductID錯誤的原因,請參考底下的一篇英文文章,內容已經整理出個大概,原因相當多,一旦發生問題時可依條列逐一檢查:

Invalid Product IDs

節錄文章內容如下:

  • Have you enabled In-App Purchases for your App ID?
  • Have you checked Cleared for Sale for your product?
  • Have you submitted (and optionally rejected) your application binary?
  • Does your project’s .plist Bundle ID match your App ID?
  • Have you generated and installed a new provisioning profile for the new App ID?
  • Have you configured your project to code sign using this new provisioning profile?
  • Are you building for iPhone OS 3.0 or above?
  • Are you using the full product ID when when making an SKProductRequest?
  • Have you waited several hours since adding your product to iTunes Connect?
  • Are your bank details active on iTunes Connect? 
  • Have you tried deleting the app from your device and reinstalling? 

以上的答案都要是YES,如果有一項答案是NO,它就極可能是導致Invalid Product ID的原因。最後再補充一項...應該是日以繼夜蒐遍網海,誠心跪拜股狗大神,終於打動股狗大仙顯靈,特賜的苦味良藥一帖,開示第101個Invalid Product ID的原因...

You can not use a JB device to test IAP.

看懂了嗎?就這個原因讓我搞很多天...TNND搞死我了...

sandbox  

benjenq 發表在 痞客邦 PIXNET 留言(2) 人氣()


留言列表 (2)

發表留言
  • 葉日維
  • 第一次接觸iOS系統(買了iPAD 第4代 wifi+cellular 64G),用了十天的感想是垃圾一臺= .=跟當初接觸 Mac OS X的感覺差了十萬八千里= .=

    什麼都要錢,根本是騙錢的......自由度又很差........真搞不懂為什麼iPhone 5這麼搶手???
  • 蘋果的產品就是,電腦有它該做的事,iPad有它該做的事,iPhone有它該做的事,三個產品定位永遠不會互相打架,用戶也養成什麼時候拿iPad,什麼時後用電腦,習慣了根本想都不用想,反應跟直覺完全就是照著產品設定的定位在走,講難聽點是被制約,講好聽的就是這些設定完全符合直覺習慣與需求。
    換句話說,如果你滿懷期待iPad能做些不一樣的事,那麼真的會覺得它跟廢物一樣。

    benjenq 於 2012/12/13 07:45 回覆

  • 葉日維
  • 可能我之前中了windows的毒太深,用什麼都想 all in one ...........

    這次買iPad真的是「想買」的衝動而沒有經腦袋思考,本來對iPhone也充滿好奇(只看別人用,自己沒用過)被iPad 4澆了一大盆冷水(說iPhone 5是縮小版又能打電話的iPad 4應該不違過)
  • 最早iPad發表示時,還被譏為納美人的iPod touch(不能打電話的iPhone)了無新意,不過還是一樣賣得嚇嚇叫。最早我也是覺得iPad這產品根本就是笑話,後來我竟然是依靠這個笑話混口飯吃。

    誰想得到這個笑話(以及其他廠牌的笑話產品)目前正在聯手終結傳統出版產業,韓國中小學正在導入無紙化教科書,美國四千多所教育機構將iPad列為重要教學載具,更別說印刷廠都倒得差不多了。這股洪流擋都擋不了。原因,它不是電腦那樣的萬能,但它確實改變了很多人使用電腦的習慣。以往開電腦的時間有一大部份都是上網、收信、看影片,現在大多轉移到平板上了。

    在福特發明車子前,大家都很期待能養出跑得飛快的馬。不過對想要馬的人來說,其實根本並不需要車子。至於想要馬還是車子呢?只有您自己最清楚了。

    benjenq 於 2012/12/14 01:46 回覆