iOSæ(yÄ«ng)ç¨å §(nèi)購買ï¼In-App Purchaseï¼ç°¡ç¨±IAPï¼æ¯èæçæ (tà i)ä¸å¯¦(shÃ)ç¾(xià n)忥(yè)è®ç¾(xià n)çæ ¸å¿åè½ä¹ä¸ãå ¶éç¼(fÄ)æµç¨å´(yán)謹(jÇn)ï¼æ¶åèæéç¼(fÄ)è åèºé ç½®ã代碼實(shÃ)ç¾(xià n)ãå¯©æ ¸èåææ¶æ¬¾çå¤å(gè)ç°(huán)ç¯(jié)ãæ¬æå°å¾è¨(jì)ç®æ©(jÄ«)è»ä»¶éç¼(fÄ)èç¶è·(hù)çè§åº¦ï¼ç³»çµ±(tÇng)梳çiOSå §(nèi)è³¼ç宿´éç¼(fÄ)éç¨ã
第ä¸é¨åï¼éç¼(fÄ)åä¿¡æ¯æ³¨åèé ç½®
éæ¯å §(nèi)è³¼åè½å¯¦(shÃ)ç¾(xià n)çåºç¤(chÇ)ï¼å¿ é å¨ä»£ç¢¼éç¼(fÄ)å宿ã
- éç¼(fÄ)è 賬èèå(xié)è°ï¼
- ç¢ºä¿ææææçApple Developer Programæ(huì)å¡è³æ ¼ï¼å¹´è²»(fèi)99ç¾å ï¼ã
- å¨ãå(xié)è°ãç¨ å(wù)åéè¡æ¥(yè)å(wù)ãæ¨¡å¡ä¸ï¼ç°½ç½²å¹¶å®æãä»è²»(fèi)æ(yÄ«ng)ç¨ç¨åºå(xié)è°ããéæ¯æ¶æ¬¾çåæã
- æº(zhÇn)ç¢ºå¡«å¯«ç¨ å(wù)ä¿¡æ¯ï¼å¦W-8BEN表çï¼æ ¹æ(jù)éç¼(fÄ)è æå¨åå®¶/å°å(qÅ«)èå®ï¼åéè¡è³¬æ¶ä¿¡æ¯ï¼ä»¥ä¾¿èæå°é·å®æ¶å ¥çµ(jié)ç®è³æ¨ç賬æ¶ã
- æ(yÄ«ng)ç¨èå §(nèi)è³¼ååé ç½®ï¼
- å¨App Store Connectä¸åµ(chuà ng)建æ¨çæ(yÄ«ng)ç¨ï¼Appï¼ï¼å¡«å¯«å®æ´çå æ¸(shù)æ(jù)ã
- 卿(yÄ«ng)ç¨çåè½æ¨¡å¡ä¸ï¼åµ(chuà ng)建ãAppå §(nèi)購買é (xià ng)ç®ããååé¡ååçºåé¡ï¼
- æ¶èåï¼å¦æ¸¸æ²éå¹£ã䏿¬¡æ§éå ·ï¼å¯å¤æ¬¡è³¼è²·ã
- éæ¶èåï¼å¦è§£éæ°¸ä¹ åè½ï¼ä¸æ¬¡è³¼è²·æ°¸ä¹ ææï¼éééAppleæä¾çæ©(jÄ«)å¶å¨ç¨æ¶è¨(shè)å鿢復(fù)ã
- èªå(dòng)çº(xù)æè¨é±ï¼å¦æåº¦æ(huì)å¡ï¼éèç復(fù)éçè¨é±çæ (tà i)管çåçº(xù)æé輯ã
- éçº(xù)æè¨é±ï¼å¨åºå®æ(shÃ)éæ®µå §(nèi)ææçè¨é±ï¼å°æåéæå(dòng)çº(xù)è¨ã
- çºæ¯å(gè)å §(nèi)è³¼åå填寫åèå稱ãç¢(chÇn)åIDï¼å¯ä¸æ¨(biÄo)è符ï¼å»ºè°éç¨ååååæ ¼å¼ï¼å¦com.company.app.item1ï¼ãå®å¹(jià )åæè¿°ãååçæ (tà i)éæäº¤çµ¦èæå¯©æ ¸ï¼å¯©æ ¸ééåæ¹å¯å¨çç¢(chÇn)ç°(huán)å¢ä½¿ç¨ã
- æ¬å°åèæ²çæ¸¬è©¦è³¬èï¼
- çºååä¿¡æ¯é ç½®æ¬å°åæè¿°ï¼æ¯æå¤èªè¨å¸å ´ã
- å¨ãç¨æ¶å訪åãä¸åµ(chuà ng)建æ²ç測試å¡è³¬èï¼ç¨äºå¨éç¼(fÄ)æ¸¬è©¦éæ®µæ¨¡æ¬è³¼è²·ï¼ä¸æ(huì)ç¢(chÇn)çç實(shÃ)æ£æ¬¾ã
第äºé¨åï¼ä»£ç¢¼éç¼(fÄ)éç¨
代碼實(shÃ)ç¾(xià n)éµå¾ªèæçStoreKitæ¡æ¶ã以StoreKit 2ï¼æ¨è¦ï¼æ´ç°¡æ½ï¼çºä¾ï¼æ ¸å¿æµç¨å¦ä¸ï¼
- ç°(huán)å¢èæ¡æ¶éæï¼
- å¨Xcodeé (xià ng)ç®ä¸ï¼ç¢ºä¿Bundle IdentifierèApp Store Connectä¸åµ(chuà ng)建çApp IDå®å ¨ä¸è´ã
- å°(dÇo)å
¥
StoreKitæ¡æ¶ã
- ååä¿¡æ¯è«æ±èå±ç¤ºï¼
- 使ç¨
Product.products(for:)æ¹æ³ï¼å³å ¥æ¨å¨åèºé ç½®çç¢(chÇn)åIDæ¸(shù)çµï¼åApp Storeç¼(fÄ)èµ·è«æ±ï¼ç²åååçæ¬å°åå¹(jià )æ ¼ãå稱ç詳細(xì)ä¿¡æ¯ã
- 妥åèçç¶²(wÇng)絡(luò)é¯(cuò)誤åååä¸åå¨çæ æ³ã
- å°ç²åçååä¿¡æ¯å±ç¤ºå¨æ(yÄ«ng)ç¨çUIçé¢ä¸ã
- ç¼(fÄ)èµ·è³¼è²·è«æ±ï¼
- ç¶(dÄng)ç¨æ¶é»(diÇn)æè³¼è²·æ(shÃ)ï¼èª¿(dià o)ç¨å°æ(yÄ«ng)
Product實(shÃ)ä¾çpurchase()æ¹æ³ã
- 系統(tÇng)æ(huì)å½åºåççApp Store確èª(rèn)æ¡ï¼å¼å°(dÇo)ç¨æ¶é²(jìn)è¡é¢å®¹ID/觸æ§IDæå¯ç¢¼é©(yà n)èã
- 交æé©(yà n)èèèçï¼
- é(guÄn)鵿¥é©ï¼å(wù)å¿ å¨æå(wù)å¨ç«¯é©(yà n)èäº¤ææ¶æ(jù)ã鿝鲿¢æ¬ºè©ã確ä¿äº¤ææææ§çæéè¦ç°(huán)ç¯(jié)ã客æ¶ç«¯ä»£ç¢¼ä¸æ(yÄ«ng)ä¿¡ä»»æ¬å°è¿åç交æçæ (tà i)ã
- ç£(jiÄn)è½äº¤ææ´æ°ãå¨StoreKit 2ä¸ï¼å¯ä»¥éé
Transaction.updatesåºåç£(jiÄn)è½å¯¦(shÃ)æ(shÃ)交æçæ (tà i)è®åã
- ç¶(dÄng)ä¸ç交æå®æåï¼çæ
(tà i)çº
.purchasedæ.restoredï¼ï¼æ¨éè¦ï¼
- 忍çæå(wù)å¨ç¼(fÄ)éäº¤ææ¶æ(jù)ï¼å¯å¾
Transaction.jsonRepresentationæTransaction.signedDateç²åé©(yà n)èæéæ¸(shù)æ(jù)ï¼ã
- æ¨çæå(wù)å¨ç«¯ä½¿ç¨è©²æ¶æ(jù)æ¸(shù)æ(jù)ï¼åèæçé©(yà n)èæå(wù)å¨ï¼æ²çæçç¢(chÇn)ç°(huán)å¢ï¼ç¼(fÄ)èµ·äºæ¬¡é©(yà n)èï¼ç¢ºèª(rèn)交æçç實(shÃ)æ§åçæ (tà i)ã
- æ¶å°èææå(wù)å¨çæåé©(yà n)èé¿æ(yÄ«ng)åï¼æ¨çæå(wù)å¨åéç¥å®¢æ¶ç«¯ï¼å®¢æ¶ç«¯æ¹å¯è§£éå §(nèi)容ææä¾èæ¬ååï¼å¦ç¼(fÄ)æ¾æ¸¸æ²è²¨å¹£ï¼ã
- å¨ç¢ºèª(rèn)æ¥(yè)å(wù)é輯èçç¡èª¤åï¼èª¿(dià o)ç¨
Transaction.finish()便çµå®æäº¤æãå¦åï¼äº¤æå¯è½æ(huì)被系統(tÇng)èªå(dòng)鿬¾ã
- èçæ¢å¾©(fù)購買ï¼
- å°äºéæ¶èååååè¨é±ï¼å¿ é æä¾âæ¢å¾©(fù)購買âæéã
- 調(dià o)ç¨
StoreKit.Transaction.all()å¹¶éæ¿¾åºè©²ç¨æ¶çæ(yÄ«ng)ç¨è³¬æ¶ç¸é(guÄn)交æï¼ç¨äºæ¢å¾©(fù)ç¨æ¶å·²è³¼è²·çå §(nèi)容ã
- æ²ç測試ï¼
- å¨éç¼(fÄ)éæ®µï¼ä½¿ç¨æ²ç測試å¡è³¬èå¨çæ©(jÄ«)ææ¨¡æ¬å¨ä¸é²(jìn)è¡å®æ´ç購買æµç¨æ¸¬è©¦ï¼ç¢ºä¿å¾ç¼(fÄ)起購買å°å §(nèi)容交ä»çéè·¯æ¢éã
第ä¸é¨åï¼æ¶æ¬¾èåæç¶è·(hù)
- æ¶æ¬¾æµç¨ï¼
- èææ(huì)卿¯å(gè)財(cái)å(wù)卿ï¼éå¸¸æ¯æåº¦ï¼çµ(jié)æåï¼åæ¨æä¾è²¡(cái)å(wù)å ±(bà o)åãæ¨å¯ä»¥å¨App Store Connectçã仿¬¾å財(cái)å(wù)å ±(bà o)åã䏿¥çã
- èææ(huì)æ£é¤å¹³èºåæï¼é常çºé·å®é¡ç30%ï¼å°äºç¬¦åæ¢ä»¶çè¨é±ï¼ç¬¬äºå¹´å以åéè³15%ï¼åï¼å°åæ¶å ¥çµ(jié)ç®è³æ¨é (yù)ççéè¡è³¬æ¶ãçµ(jié)ç®ææä½éé¡ï¼ä¸å°è³¬æ(shÃ)éå å°å(qÅ«)åéè¡èç°ã
- è¨(jì)ç®æ©(jÄ«)è»ä»¶éç¼(fÄ)èç¶ä¿®ï¼ç¶è·(hù)ï¼ï¼
- çæ (tà i)忥èæå(wù)å¨é輯ï¼ç¶è·(hù)ä¸å(gè)å¥å£¯çåèºæå(wù)å¨ï¼ç¨äºé©(yà n)èæ¶æ(jù)ã管çç¨æ¶æ¬(quán)çãèçè¨é±çæ (tà i)è®æ´ï¼å¦å°æãçº(xù)è²»(fèi)ãç¨æ¶éç´ï¼æ¯è³é(guÄn)éè¦çãé屬äºè»ä»¶éç¼(fÄ)ä¸çæå(wù)端éç¼(fÄ)èçã
- 代碼ç¶è·(hù)èæ´æ°ï¼é¨èStoreKitæ¡æ¶çæ´æ°ï¼å¦å¾StoreKit 1é·ç§»å°StoreKit 2ï¼ï¼éè¦é©æ(shÃ)æ´æ°å®¢æ¶ç«¯ä»£ç¢¼ãç¶(dÄng)æ(yÄ«ng)ç¨æ°å¢å §(nèi)è³¼ååæèª¿(dià o)æ´å®å¹(jià )æ(shÃ)ï¼éåæ¥æ´æ°åèºé ç½®å代碼ä¸çç¢(chÇn)åIDå表ã
- é¯(cuò)誤ç£(jiÄn)æ§èèçï¼å¯¦(shÃ)ç¾(xià n)å®åçæ¥å¿è¨éåé¯(cuò)誤ç£(jiÄn)æ§æ©(jÄ«)å¶ï¼åæ(shÃ)ç¼(fÄ)ç¾(xià n)å¹¶èç購買失æãæ¶æ(jù)é©(yà n)è失æãç¶²(wÇng)絡(luò)ç°å¸¸çåé¡ãé屬äºè»ä»¶é(yùn)ç¶åç¶ä¿®çèçã
- åè¦(guÄ«)æ§èå¯©æ ¸ï¼å´(yán)æ ¼éµå®èæçãApp Storeå¯©æ ¸æåãä¸é(guÄn)äºå §(nèi)è³¼çè¦(guÄ«)å®ï¼å¦ä¸å¾ä½¿ç¨ç¬¬ä¸æ¹æ¯ä»è³¼è²·æ¸(shù)åå §(nèi)容ï¼ãæ¯æ¬¡æ´æ°æ¶åå §(nèi)è³¼ç代碼æååï¼é½å¯è½è§¸ç¼(fÄ)èæçå¯©æ ¸ã
- æ¸(shù)æ(jù)å®å ¨ï¼ç¢ºä¿å³è¼¸ååå²äº¤æä¿¡æ¯ãç¨æ¶æ¸(shù)æ(jù)çéç¨æ¯å®å ¨çï¼é²æ¢æ¸(shù)æ(jù)æ³é²å篡æ¹ã
****ï¼iOSå §(nèi)è³¼éç¼(fÄ)æ¯ä¸æ¢å¾åå(wù)é ç½®ãå°å®¢æ¶ç«¯/æå(wù)å¨ç«¯ç·¨ç¢¼ãåå°è²¡(cái)å(wù)è系統(tÇng)ç¶è·(hù)ç宿´éè·¯ãæåç實(shÃ)æ½ä¸å ä¾è³´äºæ£ç¢ºçä»£ç¢¼ï¼æ´ä¾è³´äºåæçæº(zhÇn)確é ç½®ãå´(yán)謹(jÇn)?shù)å§î¡?wù)å¨ç«¯é©(yà n)è以åæçº(xù)çé(yùn)çç¶è·(hù)ãéç¼(fÄ)è éå ¨é¢çè§£åç°(huán)ç¯(jié)ï¼æè½æ§(gòu)建åºå®å ¨ãå¯é ãç¨æ¶é«é©(yà n)è¯å¥½çå §(nèi)購系統(tÇng)ã