1、在開發(fā)者賬號(hào)設(shè)置協(xié)議、打開itunes Connect,選擇協(xié)議,稅務(wù)和銀行業(yè)務(wù)。

創(chuàng)新互聯(lián)一直秉承“誠(chéng)信做人,踏實(shí)做事”的原則,不欺瞞客戶,是我們最起碼的底線! 以服務(wù)為基礎(chǔ),以質(zhì)量求生存,以技術(shù)求發(fā)展,成交一個(gè)客戶多一個(gè)朋友!為您提供做網(wǎng)站、成都做網(wǎng)站、成都網(wǎng)頁(yè)設(shè)計(jì)、微信小程序定制開發(fā)、成都網(wǎng)站開發(fā)、成都網(wǎng)站制作、成都軟件開發(fā)、手機(jī)APP定制開發(fā)是成都本地專業(yè)的網(wǎng)站建設(shè)和網(wǎng)站設(shè)計(jì)公司,等你一起來見證!
2、點(diǎn)擊Request Contracts(申請(qǐng)合同)下面的,request,點(diǎn)了幾個(gè)確定和下一步后回到主界面。
Contact info:聯(lián)系人信息
Bank info:銀行信息
Tax info:稅務(wù)信息
3、首先設(shè)置聯(lián)系人信息,點(diǎn)擊Contact info下面的 Set up(設(shè)置),點(diǎn)擊Add New Contract(增加先的聯(lián)系方式)。
4、填寫詳情,填寫完成后點(diǎn)擊save(保存)。
5、在下面的所有項(xiàng)目中都選擇剛剛填寫的信息,選擇后點(diǎn)擊右下角的done(完成),你可以創(chuàng)建很多聯(lián)系人,在不同的職務(wù)選擇不同的聯(lián)系人。因?yàn)槲沂仟?dú)立開發(fā),所以我全部填寫的我自己。
6、設(shè)置銀行信息,點(diǎn)擊Back info下面的Set up,彈出頁(yè)面,點(diǎn)擊Add Bank Account(添加銀行賬號(hào))
6.1、選擇china,后點(diǎn)擊next。
6.2、填寫了CNAPS Code后點(diǎn)擊Next
查詢現(xiàn)代化支付行號(hào)
6.3、會(huì)彈出你的銀行卡開戶地的信息,確認(rèn)一下點(diǎn)擊next
6.4、填寫銀行卡信息,注意:戶主名只能寫拼音,比如:李三(Li San)。填完后點(diǎn)擊Next
6.5、彈出確定信息頁(yè)面,在下面打鉤后點(diǎn)擊Save
6.6、點(diǎn)擊了save后就可以在彈出的頁(yè)面中選擇剛剛填寫的卡了。選擇后點(diǎn)擊Save
7、設(shè)置稅務(wù)信息,點(diǎn)擊Tax info下面的Set up,此時(shí)聯(lián)系人信息已經(jīng)變成可以編輯狀態(tài),銀行信息為瀏覽狀態(tài)。
7.1、彈出的界面中,稅務(wù)分為三種 U.S Tax Forms: 美國(guó)稅務(wù)、Australia Tax Forms:澳大利亞稅務(wù)、Canada Tax Forms: 加拿大稅務(wù)
這里我選擇的美國(guó)稅務(wù),就是第一個(gè)
彈出第一個(gè)選擇,點(diǎn)擊submit(提交)后,彈出第二個(gè)選擇
彈出第二個(gè)選擇,選擇后點(diǎn)擊submit
彈出第三個(gè)頁(yè)面,填寫的資料后點(diǎn)擊提交,記得勾選頁(yè)面上的幾個(gè)復(fù)選框
在提交成功后,狀態(tài)就變成processing成功
1.進(jìn)入到項(xiàng)目的APP信息頁(yè)面,點(diǎn)擊功能,在彈出的頁(yè)面點(diǎn)擊App內(nèi)購(gòu)買項(xiàng)目后面的?。
2.在彈出的新對(duì)話框中選擇你需要哪一種服務(wù),由于我的項(xiàng)目需要兌換成消耗的金幣,所以我選擇第一個(gè)。選擇后點(diǎn)擊創(chuàng)建。
3.開始填寫內(nèi)購(gòu)項(xiàng)目信息。填完后點(diǎn)擊右上角的存儲(chǔ)(所有信息必須填寫完整)。
4.點(diǎn)擊存儲(chǔ)后,內(nèi)購(gòu)列表就會(huì)有剛剛創(chuàng)建的內(nèi)購(gòu)條目。
1.點(diǎn)擊用戶和職能
2.點(diǎn)擊沙盒測(cè)試員,然后點(diǎn)擊左邊的?按鈕
3.設(shè)置好信息點(diǎn)擊右上角存儲(chǔ)就可以,記住里面的郵箱和密碼用于支付的時(shí)候登陸Apple id
注意:
1.必須用真機(jī)測(cè)試。
2.測(cè)試的時(shí)候必須退出自己的apple ID。彈出頁(yè)面后登陸沙盒的測(cè)試apple id。
// 1.首先導(dǎo)入支付包#import Storekit
[iOS]應(yīng)用內(nèi)支付(內(nèi)購(gòu))的個(gè)人開發(fā)過程及坑!
APP內(nèi)購(gòu)集成詳解
這個(gè)問題是最典型的財(cái)務(wù)問題之一,只要你公司內(nèi)購(gòu)有收入,你多多少少都會(huì)被財(cái)務(wù)同事或者老板問過這個(gè)問題。可能你會(huì)說是漏單啊,蘋果誤差啊,匯率啊等等各種原因,來解釋過去。這些似乎也對(duì),似乎又不對(duì),如果你深究下去,會(huì)發(fā)現(xiàn)很多有意思的事情。這里筆者來詳細(xì)的分析下為什么會(huì)出現(xiàn)這個(gè)情況。 首先要區(qū)分下,公司的蘋果財(cái)務(wù)報(bào)表數(shù)據(jù)是怎么來的?在這里我們假設(shè)為最通常的場(chǎng)景。即公司的報(bào)表數(shù)據(jù)是由后臺(tái)同事統(tǒng)計(jì)而得。而后臺(tái)同事的數(shù)據(jù)是由客戶端傳的憑證來統(tǒng)計(jì),驗(yàn)證通過,xx商品售出數(shù)量+1,收入+xxx。然后統(tǒng)計(jì)出來一個(gè)月的內(nèi)購(gòu)數(shù)據(jù)。這就是公司的財(cái)務(wù)報(bào)表數(shù)據(jù)了。蘋果后臺(tái)的財(cái)務(wù)預(yù)付款數(shù)據(jù)為 付款和財(cái)務(wù)報(bào)告-估計(jì)總收入欄的值。如下圖
在明確了兩個(gè)統(tǒng)計(jì)數(shù)據(jù)來源后,我們來列舉下產(chǎn)生這個(gè)問題的所有可能性原因。
后臺(tái)統(tǒng)計(jì)金額時(shí),時(shí)間用的不是UTC時(shí)間(0時(shí)區(qū)時(shí)間)
此類原因比較容易排除,分別看后臺(tái)數(shù)據(jù)xx商品銷售量和蘋果后臺(tái)xx商品銷售量一一比較即可。這里需要注意,可能后臺(tái)會(huì)出現(xiàn)銷售量比蘋果銷售量還多的情況,這個(gè)情況原因可能是后臺(tái)判重邏輯未做好,有Bug。也有可能是用戶發(fā)生了退款。那么如何看用戶是否退款了呢?
銷售和趨勢(shì)-產(chǎn)品銷量-添加過濾器-交易類型-退款 如下圖
如果你發(fā)現(xiàn)后臺(tái)銷售量與蘋果銷售量完全對(duì)的上,沒有出現(xiàn)丟單多單退單等現(xiàn)象。但是蘋果的預(yù)付款收入還是比財(cái)務(wù)統(tǒng)計(jì)的要少幾百,幾千甚至幾萬刀。那么很有可能這個(gè)巨大的誤差是來自蘋果坑爹的財(cái)務(wù)日歷系統(tǒng)。
我們正常理解是假設(shè)為內(nèi)購(gòu)5月份的收入,那自然是5月1日-5月31日的總收入。然后蘋果會(huì)在7月初進(jìn)行打款。打款的金額應(yīng)該是5月整個(gè)自然月,然后扣除掉30%手續(xù)費(fèi)的收入。后臺(tái)同事往往也是這么統(tǒng)計(jì)的。然鵝。蘋果對(duì)于自然月的理解并非如此。點(diǎn)擊付款和財(cái)務(wù)報(bào)告-選中日期-點(diǎn)擊最下方的查看財(cái)務(wù)日歷,如下圖
點(diǎn)進(jìn)去,我們會(huì)發(fā)現(xiàn),蘋果的5月是這么算的。。。
如果你不知道這個(gè)事情,可能會(huì)連續(xù)兩個(gè)月被財(cái)務(wù)追問,為什么這個(gè)月蘋果又少打錢了....
當(dāng)然這些錢,蘋果也并未貪你的,比如蘋果的7月是指6月28日到8月1日。嗯,一般多打款的話,財(cái)務(wù)是不會(huì)找你的。。。
我們上面說的都是蘋果后臺(tái)預(yù)估總收入的數(shù)據(jù),實(shí)際上這個(gè)數(shù)據(jù)并不一定準(zhǔn)確,可能會(huì)有變動(dòng)。變動(dòng)的原因一般是因?yàn)橥丝睿脩敉丝睿O果是不會(huì)承擔(dān)任何責(zé)任的,會(huì)扣掉你的收入。即使你內(nèi)購(gòu)商品早已經(jīng)發(fā)放了,還一個(gè)原因是因?yàn)閰R率。
所以如果你分析了以上所有的情況,發(fā)現(xiàn)數(shù)據(jù)還是相差,不妨等等最終公司銀行卡到賬的金額。
另外實(shí)際到賬的金額也可能會(huì)有偏差,這個(gè)偏差主要是是否有中間的金融機(jī)構(gòu)或銀行進(jìn)行手續(xù)費(fèi)扣除。實(shí)際到賬的金額應(yīng)該不是正好為真實(shí)收入*0.7,多少都會(huì)有損耗。
如果你的App是面向全球用戶的App,那么肯定遇到過此類問題。產(chǎn)生這個(gè)問題的主要原因是,各地區(qū)的稅率問題。比如我們商品定金是0.99美金。但是在歐盟區(qū),用戶實(shí)際支付的金額(換成歐元后)的價(jià)值 也是大于0.99美金,大概是1.幾美金。所以看蘋果后臺(tái)你的銷售額會(huì)增長(zhǎng)很多。然鵝實(shí)際上,收入還是0.99美金*0.7。多出來的那些錢是歐盟向蘋果收取了,跟公司沒關(guān)系,只是表面上看著讓公司銷售額增長(zhǎng)了。
付款和財(cái)務(wù)報(bào)告上面會(huì)有詳細(xì)的預(yù)估蘋果打款日期。如果日期還未顯示,則說明還未到打款時(shí)間。
一般來說,當(dāng)月的款,會(huì)在下下個(gè)月的月初進(jìn)行轉(zhuǎn)賬。
即5月份的款項(xiàng) 一般是7月月初(最晚不超過15號(hào))。也就是說如果你發(fā)現(xiàn)你的款項(xiàng)已經(jīng)超過45天都未收到。那肯定是有問題的。可能的原因如下:
①內(nèi)購(gòu)收入未達(dá)到當(dāng)?shù)亻_發(fā)者賬號(hào)結(jié)款的最低要求。
②賬號(hào)本身出現(xiàn)問題,涉嫌欺詐、隱瞞、或被調(diào)查(非必要原因,有時(shí)候調(diào)查期也會(huì)正常打款)
③其他原因(如銀行卡有問題,蘋果嘗試轉(zhuǎn)賬卻扣款失敗,或者已經(jīng)超過匯率結(jié)算,被銀行攔截等)。等等這些問題都可以去聯(lián)系蘋果支持來尋求幫助。
對(duì),也不對(duì)。
對(duì)于大部分地區(qū)的開發(fā)者賬號(hào),最低打款門檻限制為150美金(如中國(guó))
對(duì)于部分地區(qū)的開發(fā)者賬號(hào),最低打款門檻限制為10美金(如香港,印度,英國(guó),法國(guó),日本,意大利,加拿大等)
對(duì)于韓國(guó)來說,其最低付款門檻為 50 美金。
具體數(shù)據(jù)可參考以下網(wǎng)址:
蘋果最低打款金額限制
點(diǎn)擊 “協(xié)議、稅務(wù)和銀行業(yè)務(wù)”
內(nèi)購(gòu)用的是付費(fèi)應(yīng)用程序,先簽署《付費(fèi)應(yīng)用程序協(xié)議》,同意后狀態(tài)變更為“用戶信息待處理”,等待審核。
狀態(tài)更改完畢后,點(diǎn)擊“開始設(shè)置稅務(wù)、銀行業(yè)務(wù)和聯(lián)系信息”。
(1)添加銀行賬戶,按照要求填寫相關(guān)內(nèi)容即可。
(2)選擇報(bào)稅表,并填寫。所有與 Apple 有商業(yè)合作者必選都是美國(guó),若有其他需求,可以多選。
繼續(xù)填寫,首先認(rèn)證公司基本信息,選擇所有人類型,確認(rèn)無誤后認(rèn)證條款處打?qū)?/p>
Part I 部分,繼續(xù)核對(duì)公司相關(guān)信息,選填內(nèi)容可不填。
Part III 部分,簽署稅務(wù)條約,設(shè)置利益限制條款的種類,選填內(nèi)容可不填。此部分如果需要可勾選上下圖勾選框,不需要可不勾選,我們這個(gè)項(xiàng)目沒有用到part III 部分,所以沒有勾選。
Part XXX 部分,確認(rèn)之前填寫的信息,勾選完畢后,提交
(3)填寫聯(lián)系信息,共5個(gè)。高級(jí)管理、財(cái)務(wù)、技術(shù)、法務(wù)、營(yíng)銷。只需要提供5個(gè)人的基本信息即可。
只可使用一次的產(chǎn)品,使用之后即失效,必須再次購(gòu)買。
示例: 釣魚 App 中的魚食。
只需購(gòu)買一次,不會(huì)過期或隨著使用而減少的產(chǎn)品。
示例: 游戲 App 的賽道。
允許用戶在固定時(shí)間段內(nèi)購(gòu)買動(dòng)態(tài)內(nèi)容的產(chǎn)品。除非用戶選擇取消,否則此類訂閱會(huì)自動(dòng)續(xù)期。
示例: 每月訂閱提供流媒體服務(wù)的 App。
允許用戶購(gòu)買有時(shí)限性服務(wù)的產(chǎn)品。此 App 內(nèi)購(gòu)買項(xiàng)目的內(nèi)容可以是靜態(tài)的。此類訂閱不會(huì)自動(dòng)續(xù)期。
示例: 為期一年的已歸檔文章目錄訂閱。
App 內(nèi)購(gòu)買項(xiàng)目的截屏,即所售項(xiàng)目的示意圖。例如,如果 App 內(nèi)購(gòu)買項(xiàng)目是一本圖書,您可以提交圖書的截屏。您也可以提交購(gòu)買頁(yè)的截屏。該截屏僅用于 Apple 審核,不會(huì)在 App Store 中顯示。
截屏要求如下:
iOS 至少需要 640 x 920 像素
Apple tvOS 需要 1920 x 1080 像素
macOS 需要 1280 x 800 像素
App 審核圖像上傳后,可以替換,但無法移除。當(dāng)您的 App 內(nèi)購(gòu)買項(xiàng)目處于審核中時(shí),您無法更新截屏。
沙箱賬號(hào)是不能直接在App Store進(jìn)行登錄的,只能在點(diǎn)擊了購(gòu)買商品之后,在彈出的登錄框進(jìn)行登錄 。
驗(yàn)證是否已登錄沙箱測(cè)試賬號(hào):
設(shè)置--iTunes Store與App Store,頁(yè)面拉到最底部,會(huì)看到沙箱賬戶項(xiàng)會(huì)列出你已登錄的沙箱測(cè)試賬號(hào)!
操作方法一:打開App Store應(yīng)用首頁(yè)滑到最下方--選中AppleID--注銷
操作方法二:設(shè)置--iTunes Store與App Store--選中AppleID--注銷
checks if the client can make payments(檢測(cè)App是否能支付)
getAvailablePurchases
Get all non-consumed purchases 獲取未消費(fèi)的商品
打印信息查詢;
原因:
沒有先執(zhí)行g(shù)etProducts,直接執(zhí)行requestPurchase方法,要先拉取商品列表,再執(zhí)行購(gòu)買操作.
問題描述;
1.漏單必須要處理,玩家花RMB購(gòu)買的東西卻丟失了,是絕對(duì)不能容忍的。所謂的漏單就是玩家已經(jīng)正常付費(fèi),卻沒有拿到該拿的道具。
解決:只要購(gòu)買成功,便將購(gòu)買記錄(receipt等賬單信息)保存下來,然后將賬單信息傳送給我們游戲服務(wù)器,游戲服務(wù)器獲得賬單后,和蘋果服務(wù)器驗(yàn)證,賬單有效的話,回饋給游戲服務(wù)器處理,游戲服務(wù)器處理后,返回給游戲客戶端處理,處理完畢,將本地保存的購(gòu)買記錄刪除。
官方文檔:向蘋果校驗(yàn)支付憑證
21000 App Store無法讀取你提供的JSON數(shù)據(jù)
21002 收據(jù)數(shù)據(jù)不符合格式
21003 收據(jù)無法被驗(yàn)證
21004 你提供的共享密鑰和賬戶的共享密鑰不一致
21005 收據(jù)服務(wù)器當(dāng)前不可用
21006 收據(jù)是有效的,但訂閱服務(wù)已經(jīng)過期。當(dāng)收到這個(gè)信息時(shí),解碼后的收據(jù)信息也包含在返回內(nèi)容中
21007 收據(jù)信息是測(cè)試用(sandbox),但卻被發(fā)送到產(chǎn)品環(huán)境中驗(yàn)證 【請(qǐng)求sandbox校驗(yàn)支付憑證】
21008 收據(jù)信息是產(chǎn)品環(huán)境中使用,但卻被發(fā)送到測(cè)試環(huán)境中驗(yàn)證
消耗類型: 例如:金幣、道具等。
非續(xù)訂訂閱: non-renewable subscription 例如:VIP
您的首個(gè) App 內(nèi)購(gòu)買項(xiàng)目必須以新的 App 版本提交。請(qǐng)創(chuàng)建您的 App 內(nèi)購(gòu)買項(xiàng)目,然后前往 App 的“App Store”頁(yè),從“App 內(nèi)購(gòu)買項(xiàng)目”中進(jìn)行選擇,點(diǎn)按“提交”。 了解更多
在上傳二進(jìn)制文件并提交首個(gè) App 內(nèi)購(gòu)買項(xiàng)目以供審核后,您可以使用下表提交其他 App 內(nèi)購(gòu)買項(xiàng)目。
唐巧-iOS應(yīng)用內(nèi)付費(fèi)(IAP)開發(fā)步驟列表
未完~待續(xù)
當(dāng)使用內(nèi)購(gòu)購(gòu)買過商品之后沒有把這個(gè)交易關(guān)閉,所以再次去購(gòu)買商品后就會(huì)調(diào)用以前已經(jīng)購(gòu)買成功的交易去購(gòu)買因?yàn)橐呀?jīng)購(gòu)買過,才會(huì)有這個(gè)提示
原因:添加內(nèi)購(gòu)項(xiàng)目時(shí),信息填寫不完整,app審核圖像未上傳
處理方法:上傳app審核圖片( 合適的尺寸 ),點(diǎn)擊提交,狀態(tài)改為正在準(zhǔn)備審核中。
這個(gè)是內(nèi)購(gòu)選擇類型不匹配原因?qū)е隆?/p>
購(gòu)買成功之后,Apple會(huì)返回以下四個(gè)數(shù)據(jù)給應(yīng)用
Reference
Review the updated Paid Applications Schedule.
游客身份解決方案:即不登錄也要能購(gòu)買
1)服務(wù)器端做一個(gè)蘋果審核機(jī)制,審核期間游客身份可以進(jìn)行一切行為,一旦審核通過,修改服務(wù)端即可達(dá)到強(qiáng)制用戶登錄進(jìn)行內(nèi)購(gòu)買的目的(這個(gè)有點(diǎn)。。。)
2)游客可以進(jìn)行內(nèi)購(gòu)買,購(gòu)買時(shí)以設(shè)備UUID為準(zhǔn),生成一個(gè)游客賬號(hào),將購(gòu)買信息保存在服務(wù)器和本地,當(dāng)用戶登錄正式賬戶后判斷此設(shè)備是否進(jìn)行過內(nèi)購(gòu),有的話提示用戶將游客身份購(gòu)買的權(quán)益與現(xiàn)有賬號(hào)綁定,如果綁定,游客權(quán)益則遷移到正式賬戶,如果不遷移,則游客身份和正是賬戶是兩個(gè)獨(dú)立賬戶,正式賬戶不享有游客身份的權(quán)益(我用的這個(gè))
內(nèi)購(gòu)游客模式解決方案
iOS內(nèi)購(gòu)規(guī)則
?首先:我只是個(gè)iOS開發(fā)的菜鳥,語文不及格的學(xué)渣。寫的東西都只是一點(diǎn)自己的淺顯的理解。如有不對(duì),歡迎大神們指點(diǎn),小弟虛心學(xué)習(xí)~我只是個(gè)夢(mèng)想成為大神的菜鳥。
? ? 閑話少說。這篇文章是關(guān)于蘋果IAP的一個(gè)可能導(dǎo)致項(xiàng)目丟單的bug.(可能是bug,也可能是我沒有透徹的領(lǐng)悟蘋果的用意,拋出來供大家參考)
? ? 問題的根本出現(xiàn)在內(nèi)購(gòu)SKMutablePayment 類的?applicationUsername對(duì)象在部分情況下會(huì)被蘋果丟掉,成為null。
applicationUsername ?是蘋果在iOS7.0及以后為內(nèi)購(gòu)增加的一個(gè)自定義字段,開發(fā)者可以在該字段中記錄一些自定義的數(shù)據(jù)。但是在使用過程中發(fā)現(xiàn),部分(注意強(qiáng)調(diào)下,是部分)用戶第一次使用蘋果內(nèi)購(gòu)時(shí),手機(jī)會(huì)提示用戶去綁定銀行卡。這時(shí)用戶點(diǎn)確定過去綁定銀行卡后繼續(xù)點(diǎn)確定支付,蘋果內(nèi)購(gòu)回調(diào):
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions;
方法接收到的付款成功的?SKPaymentTransaction交易中的SKMutablePayment對(duì)象的applicationUsername會(huì)被蘋果置為null.再次強(qiáng)調(diào),這個(gè)問題只會(huì)部分用戶發(fā)生。目前還沒有找到規(guī)律,也沒辦法復(fù)現(xiàn)。
基于以上問題。如果大家的項(xiàng)目將例如內(nèi)部訂單號(hào)等信息存入applicationUsername中,就有可能導(dǎo)致存入的信息丟失的問題。不同的設(shè)計(jì)可能會(huì)引發(fā)不同的bug。由于我的項(xiàng)目將內(nèi)部訂單號(hào)存入applicationUsername,丟失后,無法提交服務(wù)器校驗(yàn)小票。所以就丟單了。
? ? 另外在分享個(gè)需要注意的:就是前面提到當(dāng)用戶點(diǎn)擊確認(rèn)綁定手機(jī)卡跳走后,蘋果會(huì)首先返回一個(gè)支付取消的通知。如果用戶很乖的綁卡并且確認(rèn)支付,蘋果又會(huì)返回一個(gè)支付成功的通知。所以這里也需要大家注意,不要因此引發(fā)什么問題。
可能這個(gè)問題對(duì)大家來說并不會(huì)導(dǎo)致丟單或其他問題。只是在這里給大家分享下這樣的一個(gè)坑,萬一有人跟我一樣的做法呢~防止大家入坑,希望能幫到大家~ Ps.馬上過年了,祝大家新年愉快。
iOS蘋果內(nèi)購(gòu)(詳細(xì)步驟)
iOS 內(nèi)付費(fèi)(in-app purchase)--非消耗品的購(gòu)買與恢復(fù)
恢復(fù)購(gòu)買官方地址
蘋果內(nèi)購(gòu)商品信息獲取
Unity蘋果(iOS)內(nèi)購(gòu)接入(Unity內(nèi)置IAP)
# Unity3d發(fā)布IOS(包含u3d自帶IAP內(nèi)購(gòu))的流程-小白篇(三)-u3d配置ios內(nèi)購(gòu)部分
每次支付行為或每筆交易被認(rèn)為是一個(gè)SKPaymentTransation,只有當(dāng)SKPaymentTransation被finishTransaction:,這次支付(交易)行為才算是正常結(jié)束了。即使這次支付途中被中斷,其實(shí)也并沒有丟失。假設(shè)支付沒有完成 App 就退出了(比如崩潰),那么當(dāng)下次 App 重啟之后,只要設(shè)置了監(jiān)聽addTransactionObserver:,之前被中斷的支付就會(huì)接著進(jìn)行。
第1步,這個(gè)過程中 App 進(jìn)程因?yàn)槟撤N原因被 kill 了,其實(shí)支付行為還在系統(tǒng)后臺(tái)進(jìn)行著,蘋果自己做的,很有可能扣款成功。但是這時(shí)候沒法為用戶充值虛擬貨幣。
第2步,App 端與自己服務(wù)器端通信失敗;自己服務(wù)器端與 AppStore 服務(wù)器之間的通信失敗。
針對(duì)第一種情況,可以在 App 一啟動(dòng)就設(shè)置監(jiān)聽,如果有未完成的支付,則會(huì)回調(diào)- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions;這個(gè)方法,在這個(gè)方法里調(diào)用接口充值。
至于第二種情況,App 端需要做接口重試,設(shè)置一個(gè)重試的邏輯。
在發(fā)起支付請(qǐng)求之后,蘋果返回商品列表,先請(qǐng)求服務(wù)器下單接口,成功之后,將訂單信息保存在鑰匙串,然后發(fā)起支付,在支付狀態(tài)的回調(diào)當(dāng)中, 成功了就去做服務(wù)器的驗(yàn)簽操作,驗(yàn)證成功,關(guān)閉事物,并將訂單信息刪除,支付完成
app啟動(dòng)時(shí)監(jiān)聽掉單情況, 如果有掉單情況,回走事物更新的回調(diào),然后再回調(diào)里,通過鑰匙串拿出訂單相關(guān)信息,然后獲取支付憑證,重新向服務(wù)器發(fā)起驗(yàn)單的流程。
鑰匙串保存訂單信息作用:為了拿到訂單的相關(guān)信息作為參數(shù)來請(qǐng)求服務(wù)器驗(yàn)簽接口。
iOS內(nèi)購(gòu)這塊的開發(fā)一直比較麻煩,除了各種購(gòu)買選項(xiàng)的問題,最惡心的問題就是丟單問題。
丟單就是iOS內(nèi)購(gòu)過程中付了錢,但是App沒有發(fā)貨的問題。要解決丟單問題,先要梳理一下整個(gè)購(gòu)買的過程:
以上就是整個(gè)購(gòu)買的過程,現(xiàn)在我們根據(jù)每一步分析下可能出問題的點(diǎn)
這一步的操作就是讓服務(wù)器創(chuàng)建當(dāng)前購(gòu)買商品的訂單,返回結(jié)果失敗或者成功,這里基本不會(huì)出問題,成功就繼續(xù)接下來的流程,失敗的話,客戶端返回失敗的提醒就行。
絕大多數(shù)的問題都出在這里,在這里說一下我遇見的坑
對(duì)于第一個(gè)問題,內(nèi)購(gòu)的api有一個(gè)監(jiān)聽機(jī)制,在每次app剛啟動(dòng)的時(shí)候調(diào)用 [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 方法, - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions ,會(huì)回調(diào)所有未執(zhí)行 [[SKPaymentQueue defaultQueue] finishTransaction:tran]; 的transaction,這個(gè)時(shí)候再去和服務(wù)器進(jìn)行訂單的驗(yàn)證。這里還有一個(gè)很麻煩的問題,在上個(gè)流程中,調(diào)用服務(wù)器創(chuàng)建了訂單,會(huì)返回一個(gè)訂單號(hào),驗(yàn)證的時(shí)候一般都是把訂單號(hào),以及receipt,transactionid一起發(fā)送給服務(wù)器,但是這里是拿不到訂單號(hào)的。針對(duì)這個(gè)問題,網(wǎng)上有人用 applicationUsername 這個(gè)字段去存入訂單號(hào),但是也有一些人在使用這個(gè)字段的時(shí)候出現(xiàn)了Bug(App殺死后,獲取這個(gè)字段的值為空,參見下面的引用),為了保險(xiǎn),這里還是不用字段。我的解決方案是在用戶創(chuàng)建完訂單之后,存儲(chǔ)當(dāng)前的訂單信息,用戶token等等,當(dāng)購(gòu)買完之后,再去取這個(gè)訂單信息,完成驗(yàn)證,刪除訂單,這個(gè)方案的核心是永遠(yuǎn)只存儲(chǔ)一個(gè)訂單,若在購(gòu)買的時(shí)候有未完成的訂單,必須先驗(yàn)證之前的訂單,驗(yàn)證完之后,再去發(fā)起新的購(gòu)買,這樣就能規(guī)避多個(gè)transaction不能匹配訂單號(hào)的問題;
對(duì)于第二個(gè)問題,這個(gè)問題好解決,不用這個(gè)第三方就行,自己造個(gè)輪子,基本的購(gòu)買邏輯很簡(jiǎn)單,沒必要用這個(gè)插件。當(dāng) - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions 返回的transaction的state為failure時(shí)候,finish這個(gè)transaction,state為purchsed的時(shí)候,去驗(yàn)證。
這里還有一個(gè)問題,finishTransaction:的調(diào)用時(shí)機(jī),一定要在與服務(wù)器完成驗(yàn)證之后,再去調(diào)用這個(gè)方法,因?yàn)樵谂c服務(wù)器的驗(yàn)證的過程中,也是會(huì)出現(xiàn)錯(cuò)誤的,如果再購(gòu)買成功回調(diào)之后就調(diào)用這個(gè)方法,驗(yàn)證錯(cuò)誤的訂單也被finish了,下次去取transaction的時(shí)候,就取不到了,這樣就造成了丟單問題。
這里的邏輯基本就是自己的了,跟蘋果內(nèi)購(gòu)關(guān)系不大,把訂單、receipt等信息發(fā)給服務(wù)器就行,唯一需要注意的問題就是網(wǎng)絡(luò)錯(cuò)誤,這個(gè)時(shí)候我會(huì)做一個(gè)輪循,在發(fā)生錯(cuò)誤的時(shí)候,輪循幾次,超過這個(gè)次數(shù),認(rèn)為驗(yàn)證失敗,等到用戶購(gòu)買下一個(gè)商品、或者app重新啟動(dòng),會(huì)重新驗(yàn)證這個(gè)訂單(當(dāng)然,這個(gè)情況是極少的!為了嚴(yán)謹(jǐn),做了以上處理)
終于到最后一步了,這里有一個(gè)地方需要注意一下,就是本地服務(wù)器與蘋果服務(wù)器驗(yàn)證的方式,之前我們公司出了個(gè)問題,在調(diào)用 /verifyReceip 這個(gè)接口去驗(yàn)證,蘋果會(huì)返回一個(gè)數(shù)據(jù)status,它們認(rèn)為status等于0就是完成購(gòu)買了,但是這個(gè)字段的含義并非如此
它只是反映這個(gè)receipt是不是完整的,并不能證明這次購(gòu)買完成。正確的做法應(yīng)該是服務(wù)器拿到此次的transaction和receipt之后,解析receipt,拿當(dāng)前的transaction和receipt里的transaction數(shù)組去比對(duì),若數(shù)組中有這個(gè)transaction對(duì)應(yīng)的transactionid,則認(rèn)為購(gòu)買成功。
蘋果服務(wù)器返回的錯(cuò)誤碼中,我們只需留意21005即可,它代表驗(yàn)證服務(wù)器當(dāng)前不可用(當(dāng)然這種情況是級(jí)級(jí)級(jí)小的!為了嚴(yán)謹(jǐn)),處理的方式和網(wǎng)絡(luò)錯(cuò)誤的處理方式是一樣的。
網(wǎng)站欄目:ios開發(fā)內(nèi)購(gòu),iosapp內(nèi)購(gòu)
鏈接分享:http://chinadenli.net/article46/dsegdeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、自適應(yīng)網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)、軟件開發(fā)、網(wǎng)站收錄、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)