3.4.13
0.60.5
iOS
getAvailablePurchasesã«ã¯å¯äœçšã¯ãããŸãã
iOSã§getAvailablePurchases
ãåŒã³åºããšããiTunesStoreã«ãµã€ã³ã€ã³ããã€ã¢ãã°ã衚瀺ãããŸãã
ããã¯Androidã§ã¯çºçããŸããã
賌å
¥ããã¢ã€ãã ã埩å
ããããã«ãã¢ããªã®èµ·åäžã«getAvailablePurchases
åŒã³åºããŠããŸãã ããã¥ã¡ã³ãã«ãããšããããäžè¬çãªæ¹æ³ã§ããããšãããããŸããã
賌å
¥ããã¢ã€ãã ã埩å
ããããã«ã AppStateã®å€æŽã«åºã¥ããŠgetAvailablePurchases
ãšåŒãã§ããŸãã æ®å¿µãªãããAppStateã¯ã¢ããªã®èµ·åæã ãã§ãªããp.exã§ãããªã¬ãŒãããŸãã ãã€ã¢ãã°ããã¢ããªã«æ»ã£ãåŸïŒã¢ããªã«ãã£ãŠåŒãèµ·ããããŸãïŒp.exã iTunesã«ãµã€ã³ã€ã³... :(
ãŠãŒã¶ãŒã«ãšã£ãŠãããã¯é¢åã§ãã ç¹ã«ããŠãŒã¶ãŒãäœããè³Œå ¥ããã€ããããªãå Žåããã®ãã€ã¢ãã°ãåãé€ãããã«è³æ Œæ å ±ãå ¥åããããªãã§ãããã
å®éã®ããã€ã¹
getAvailablePurchasesãåŒã³åºã
éçºäžã¯ããµã³ãããã¯ã¹ã¢ã«ãŠã³ãã§ãã°ã€ã³ã§ããããã«è¡šç€ºãããŸãã ããã¥ã¡ã³ããããã«ã€ããŠéåžžã«æ確ã§ãããšã¯æããªãã
æ¬çªç°å¢ã§ã¯ããã®é¢æ°ãåŒã³åºããã³ã«ããã³ãââãã衚瀺ãããããšããããšæããŸãããïŒ ç§ããããå®è£ ããæ¹æ³ã¯ããŠãŒã¶ãŒããè³Œå ¥ã®åŸ©å ããæŒãããšããããã³purchaseUpdatedListenerãåŒã³åºãããåŸã«ãããåŒã³åºãããšã§ãã ãŠãŒã¶ãŒãå°æ¥ãµãã¹ã¯ãªãã·ã§ã³ãæã£ãŠãããã©ãããç¥ãããã«ããããããã¯ãšã³ãã«ä¿åããŠã¢ããªã«æ瀺ããŸãã
ãã@ voxspox @ alexpchinã¯æ£ããã§ãã @alexpchinç§ãã¡ã¯æ©ã«åãçµãã§ããã®ã§ã人ã
ã¯ãã€ãã£ãã§IAP
ã«ã€ããŠå°ãç¥ã£ãŠãããããããªããšæããŸãã åãã©ãããã©ãŒã ã«ãã§ã«ååšãããã¹ãŠã®ãã®ã眮ãããšã¯ãã¡ã³ããã«ãšã£ãŠããªãã®è² æ
ã§ãã ããã¥ã¡ã³ãã«åœ¹ç«ã€ãšæãããäœåãããã€ãããå Žåã¯ãèªç±ã«äœããè¿œå ããŠPR
ãããã·ã¥ããŠãã ããã
@mifi ãè³Œå ¥ã埩å ããã¿ã³ã®ããã¢ããªãèŠãããšããããŸããã UXã®èŠ³ç¹ããã¯ããã®ãããªãã¿ã³ã¯è² æ ã§ãããã¢ããªã¯ç§ãè³Œå ¥ãããã®ãèªèããŠããå¿ èŠããããããäžèŠã§ã;ïŒ
@hyochan TestFlightçµç±ã§ã¢ããªãé åžããåŸãããã³ããã衚瀺ãããŸãïŒããã¯æ¬çªã¢ãŒãã ãšæããŸããïŒïŒïŒ
ãã®æ©èœãåããã¢ããªãããã€ãèŠãŸããã ä»ã¯ããèŠããŠããŸããããå¿
èŠãªå ŽåïŒãŸãã¯ã¢ããã«ãå¿
èŠãšããå ŽåïŒããããšæããŸãã ãŸããAppleã®ã¢ããªã¹ãã¢ã¬ã€ãã©ã€ã³ã®äŸã§ã¯ã次ã®ãã¿ã³ããããŸãã
https://developer.apple.com/app-store/subscriptions/
ãŸãããŠãŒã¶ãŒãç§ã®ã¢ããªãéããšãã«Apple IDãå ¥åããªããã°ãªããªãå ŽåãUXãæªããšæããŸãããããã¯ãæ··ä¹±ãæããšæããŸãã ïŒããã¯ãã»ãã·ã§ã³ãæéåãã«ãªã£ãå ŽåããŸãã¯SSL MITMã§äœããçºçããå Žåã«çºçããã®ãèŠãããšããããŸããããã¯ããããªãã¯Wi-Fiã©ã³ãã£ã³ã°ããŒãžã§ããããããšã§ãïŒ
ç·šéïŒå®éã«ã¯ã¢ããã«ããããå¿ èŠãšããŠããããã§ã
getAvailablePurchases
ãåŒã³åºãåã«ãããã³ããã衚瀺ãããããšãç¥ãæ¹æ³ã¯ãããŸããïŒ ã€ãŸãããŠãŒã¶ãŒãiTunesã«æ¥ç¶ããŠãããã©ãããã©ã®ããã«æ€åºã§ããŸããïŒ
1+åã
ããã«ã¡ã¯ã¿ããªãããã«ã€ããŠäœãçãã¯ãããŸããïŒ ããã¯ãããã°æ©èœã§ãããšç解ããŠããŸãããtestflightã§ãã¹ãããŠããŠããããçºçããªãããã«ãããã®ã§ãããã©ãããããããµã³ãããã¯ã¹ã¢ãŒããçµäºããããšã¯ã§ããŸããïŒ
ãã®éãç§ã¯ç§ã®ããã®è§£æ±ºçãèŠã€ããŸããã ã¢ããªã«ãã£ãŠæ°žç¶çã«ä¿åãããæ°ããå€æ°isRestorePurchasesEnabled
ãå°å
¥ããŸããã
åæåïŒ
isRestorePurchasesEnabled = false
ã¢ããªã®èµ·åæïŒ
if (Android || isRestorePurchasesEnabled) {
call getAvailablePurchases
on error.code === 'E_USER_CANCELLED' -> isRestorePurchasesEnabled= false
}
è³Œå ¥æïŒ
isRestorePurchasesEnabled = true
requestSubscription ...
èšå®ïŒ
Button "restore purchases" -> isRestorePurchasesEnabled = true
ãŠãŒã¶ãŒã«ã¯ãæ¥ç¶-iTunes-ããã³ããã衚瀺ãããããšã¯ãããŸããã 埩å
ã¯è³Œå
¥ãè¡ãããåŸã«ã®ã¿è¡ããããããè³æ Œæ
å ±ã¯ãã§ã«å
¥åãããŠãããä¿åãããŠãããããã³ããã¯è¡šç€ºãããŸããã
ããã³ããã衚瀺ãããå¯äžã®ã±ãŒã¹ã¯ããŠãŒã¶ãŒã[èšå®] / [iTunes] / [ãµã³ãããã¯ã¹ã¢ã«ãŠã³ã]ã§ãã°ã¢ãŠãããå Žåã§ãã ãããæ¬çªã¢ãŒãã«ãããã©ããã¯ããããŸããã
ãããæè¿ãã®åé¡ã«é¢ãã掻åã¯ãªãã£ãããã§ãã åé¡ã¯ä¿®æ£ãããŸãããããããšãã³ãã¥ããã£ã®æ³šæãå¿ èŠã§ããïŒ ãã以äžã®ã¢ã¯ãã£ããã£ãçºçããªãå Žåããã®åé¡ã¯è§£æ±ºãããå¯èœæ§ããããŸãã ãã®åé¡ã«ããã£ã¹ã«ãã·ã§ã³çšããŸãã¯ãè¯ãæåã®åé¡ããšããã©ãã«ãä»ããããšãã§ããŸããéãããŸãŸã«ããŠãããŸãã è²¢ç®ããŠããã ãããããšãããããŸãã
ããã«ã¡ã¯ã
ç§ã¯1ã€ã®ãããã¯ã«ã€ããŠæ¬åœã«æ··ä¹±ããŠããŸãã誰ããç§ãå©ããããšãã§ããŸããïŒ
ãŠãŒã¶ãŒããŸã 補åãææããŠãããã©ããããã§ãã¯ããã³ã³ãããŒã©ãŒãæ§ç¯ãããã§ããïŒ
AppleãšGooglePlayã¹ãã¢ã®äž¡æ¹ã§ãã®ã©ã€ãã©ãªã䜿çšããŠãŠãŒã¶ãŒã®ãã£ã³ã»ã«ãæ€åºããã«ã¯ã©ãããã°ããã§ããïŒ
ãã®getAvailablePurchaseã¡ãœããã«é¢é£ããŠãããã©ããããããããŸããã
ããããšãã
ãããTestFlightã ãã§ãªããæ¬çªç°å¢ã§ãçºçãããã©ããã調ã¹ãããšæããŸãã
çŸåšããã¿ã³ãæŒãã®ã§ã¯ãªããã¢ããªã®èªã¿èŸŒã¿æã«ãã®é¢æ°ã䜿çšããŠããŸãã
Appleã¯ãã¢ããªã§ãã®é¢æ°ãèªåçã«åŒã³åºããªãããã«ããŸãã¯èµ·åãããŸãã
ç¹ã«ã¢ããªã®èµ·åæã«ãè³Œå ¥ãèªåçã«åŸ©å ããªãã§ãã ããã è³Œå ¥ã埩å ãããšããŠãŒã¶ãŒã®App Storeè³æ Œæ å ±ã®å ¥åãæ±ããããã¢ããªã®ãããŒãäžæãããŸãã
https://developer.apple.com/documentation/storekit/in-app_purchase/restoring_purchased_products#ïŒãïŒtext = RestoreïŒ 20CompletedïŒ 20TransactionsãofïŒ 20yourïŒ 20app'sïŒ 20completedïŒ 20transactionsã
ç§ãå®è£ ããæ¹æ³ã¯ããŠãŒã¶ãŒãè³Œå ¥ãŸãã¯è³Œå ¥ã®åŸ©å ãæŒãããšãã«ã¬ã·ãŒããããã¯ãšã³ãã«éä¿¡ããããšã§ãã ãã®åŸãããã¯ãšã³ãã¯ã¢ããªã«å°æ¥ã®ãµãã¹ã¯ãªãã·ã§ã³ã¹ããŒã¿ã¹ãæäŸã§ããŸãã
Appleã¯ãã¢ããªã§ãã®é¢æ°ãèªåçã«åŒã³åºããããèµ·åãããããªãããã«ã¢ããã€ã¹ããŠããŸãã
ç¹ã«ã¢ããªã®èµ·åæã«ãè³Œå ¥ãèªåçã«åŸ©å ããªãã§ãã ããã è³Œå ¥ã埩å ãããšããŠãŒã¶ãŒã®App Storeè³æ Œæ å ±ã®å ¥åãæ±ããããã¢ããªã®ãããŒãäžæãããŸãã
https://developer.apple.com/documentation/storekit/in-app_purchase/restoring_purchased_products#ïŒãïŒtext = RestoreïŒ 20CompletedïŒ 20TransactionsãofïŒ 20yourïŒ 20app'sïŒ 20completedïŒ 20transactionsã
ç§ãå®è£ ããæ¹æ³ã¯ããŠãŒã¶ãŒãè³Œå ¥ãŸãã¯è³Œå ¥ã®åŸ©å ãæŒãããšãã«ã¬ã·ãŒããããã¯ãšã³ãã«éä¿¡ããããšã§ãã ãã®åŸãããã¯ãšã³ãã¯ã¢ããªã«å°æ¥ã®ãµãã¹ã¯ãªãã·ã§ã³ã¹ããŒã¿ã¹ãæäŸã§ããŸãã
èªåæŽæ°ãµãã¹ã¯ãªãã·ã§ã³ã®å Žåãã¯ã©ã€ã¢ã³ãããã¢ããããŒãããã«ææ°ã®ã¬ã·ãŒããååŸããã«ã¯ã©ãããã°ããã§ããïŒ
ãã®ããã«ãã¹ãŠã®è³Œå ¥ãå®æçã«æ€èšŒããããã¯ãšã³ãã§å®æçãªããŒãªã³ã°ãå®è¡ããããšã«ãããæ€èšŒããææ°ã®ã¬ã·ãŒãïŒgoogle / appleãµãŒããŒããååŸïŒãååŸããããŒã¿ããŒã¹ã«ä¿åããŸãã
ãã®ããã«ãã¹ãŠã®è³Œå ¥ãå®æçã«æ€èšŒããããã¯ãšã³ãã§å®æçãªããŒãªã³ã°ãå®è¡ããããšã«ãããæ€èšŒããææ°ã®ã¬ã·ãŒãïŒgoogle / appleãµãŒããŒããååŸïŒãååŸããããŒã¿ããŒã¹ã«ä¿åããŸãã
ããã«ã¡ã¯@mifiè¿
éãªå¯Ÿå¿ãããããšãïŒ å
ã®ãã©ã³ã¶ã¯ã·ã§ã³ã®åŸã§ã latestReceipt
ããµãŒããŒã«ä¿åããŸããã ã§ã¯ãå
ã®latestReceipt
ããŒãªã³ã°ãããšãæ°ããlatestReceipt
å€ãè¿ãããŸããïŒ
ã¯ããããã¯ãšã³ãã®iap.validate
é¢æ°ã¯ãææ°ã®ã¬ã·ãŒããè¿ãapple / googleapisãåŒã³åºããŸãã ããã¯ãéçºééïŒãµãã¹ã¯ãªãã·ã§ã³æéããã5åïŒã§æŽæ°å¯èœãªãµãã¹ã¯ãªãã·ã§ã³ããã¹ããããšãã«ç°¡åã«ç¢ºèªã§ããŸãã
ããããšã@mifiããã¯ç§ã®ç解ãæ¬åœã«å©ããŠãããŸããïŒ ãlatestReceiptããéä¿¡ããŠãlatestReceiptããåä¿¡ããã®ã¯å¥åŠã«æããŸãã
ãããæè¿ãã®åé¡ã«é¢ãã掻åã¯ãªãã£ãããã§ãã åé¡ã¯ä¿®æ£ãããŸãããããããšãã³ãã¥ããã£ã®æ³šæãå¿ èŠã§ããïŒ ãã以äžã®ã¢ã¯ãã£ããã£ãçºçããªãå Žåããã®åé¡ã¯è§£æ±ºãããå¯èœæ§ããããŸãã ãã®åé¡ã«ããã£ã¹ã«ãã·ã§ã³çšããŸãã¯ãè¯ãæåã®åé¡ããšããã©ãã«ãä»ããããšãã§ããŸããéãããŸãŸã«ããŠãããŸãã è²¢ç®ããŠããã ãããããšãããããŸãã
é·æé䜿çšãããªãã£ãåŸããã®åé¡ã解決ããŸãã ãã®åé¡ãææ°ãªãªãŒã¹ã§ãåŒãç¶ãçºçããå Žåã¯ãææ°ã®æ å ±ã䜿çšããŠæ°ããåé¡ãäœæããŠãã ããã
æãåèã«ãªãã³ã¡ã³ã
getAvailablePurchases
ãåŒã³åºãåã«ãããã³ããã衚瀺ãããããšãç¥ãæ¹æ³ã¯ãããŸããïŒ ã€ãŸãããŠãŒã¶ãŒãiTunesã«æ¥ç¶ããŠãããã©ãããã©ã®ããã«æ€åºã§ããŸããïŒ