3.3.9 (ํ์ง๋ง 3.0.0 ์ด์ ๋ฒ์ ์์๋ ๊ฒฝํ ํจ)
0.59.9
iOS (Android์์ ํ ์คํธ๋์ง ์์)
getAvailablePurchases
ํธ์ถ ํ ๋๋ง๋ค ๋์ผํ ๋ฐฐ์ด
๋งค๋ฒ ๋์ผํ ์ด๋ ์ด ๊ธธ์ด
getAvailablePurchases
ํธ์ถ ํ ๋๋ง๋ค ๋ค๋ฅธ ๋ฐฐ์ด
getAvailablePurchases
ํธ์ถ ํ ๋๋ง๋ค ๋ค๋ฅธ ๋ฐฐ์ด ๊ธธ์ด
์ค์ ์ฅ์น
๋ง์ ๊ฑฐ๋์์๋ง ๋ณผ ์ ์๋ค๊ณ ์๊ฐํ์ง๋ง ํ์ธํ ์ ์์ต๋๋ค. ๋ด Sandbox ๊ณ์ ์๋ 50 ๊ฐ ์ด์์ ๊ฑฐ๋๊ฐ ์์ต๋๋ค.
handleOnPressRestore = async () => {
return this.setState({ isLoadingRestorePurchases: true }, async () => {
try {
// Get the previous purchases of the current user
const purchases = await RNIap.getAvailablePurchases();
// Get the latest receipt from the purchases to validate
const { transactionReceipt, productId, transactionDate } = this.getLatestPurchase(purchases);
console.log(purchases.length, productId, transactionDate);
// Validate the receipt on our server
await this.props.validateSubscriptionReceipt(productId, transactionReceipt);
// The validation result is handled in componentDidUpdate
} catch (err) {
throw err;
} finally {
this.setState({ isLoadingRestorePurchases: false });
}
});
}
getLatestPurchase = (purchases: RNIap.ProductPurchase[]): RNIap.ProductPurchase => {
// First, sort the array, so the latest purchase is on top
// https://github.com/dooboolab/react-native-iap/issues/532#issuecomment-503174711
const sortedPurchases = purchases.sort((a, b) => b.transactionDate - a.transactionDate);
const purchase = sortedPurchases[0];
return purchase;
}
์์ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ "๊ตฌ๋งค ๋ณต์"์ ๋๋ฅด๋ฉด ๋งค๋ฒ ๋ค๋ฅธ ๋ก๊ทธ๊ฐ ํ์๋ฉ๋๋ค.
๊ฒฐ๊ณผ๊ฐ ๋์ฌ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ฉด์ '๊ตฌ๋งค ๋ณต์'์ 6 ๋ฒ ๋๋ฅด์ธ์.
// purchases.length, productId, transactionDate
9 "com.app.sub" 1565182529000
21 "com.app.sub" 1565181329000
22 "com.app.sub" 1565183001000
42 "com.app.sub" 1565183001000
53 "com.app.sub" 1565182529000
55 "com.app.sub" 1565183001000
15 "com.app.sub" 1565182529000
๋ฐฐ์ด์ด ํญ์ ๋์ผ ํ ๊ฒ์ผ๋ก ๊ธฐ๋ํฉ๋๋ค. ๋ง์ฃ ? ์ฌ๊ธฐ์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์์ต๋๊น?
getAvailablePurchases()
์ ๊ฒฐ๊ณผ๋ ์คํํ ๋๋ง๋ค ๋ค๋ฆ
๋๋ค.
๋๋ ๋ํ ์ด๊ฒ์๋ณด๊ณ ์๋ค. ์ ๋ง ์ํํ ์ ์ ๊ฐ์ฅ ์ต๊ทผ์ ์ ํจํ ์์์ฆ์ด ๊ฒฐ๊ณผ์ ์์ ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ ๊ฒ์ ๋๋ค.
์ด ๋ชจ๋ ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด ์์งํ์ด ๋ชจ๋์ restoreCompletedTransactions()
๊ฐ ๋ฐํํ๋ ๋ชจ๋ ๊ฒ์ ํต๊ณผํ๊ธฐ ๋๋ฌธ์ Apple ์ธก์ ๋ฌธ์ ์ฒ๋ผ ๋ณด์
๋๋ค.
getPurchaseHistory()
์ด ๊ตฌ๋
์ ์ฌ์ฉํ๊ธฐ์ ์ข์ ๋์์ธ์ง ๊ถ๊ธํฉ๋๋ค. ์ ๋ขฐํ ์์๋ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ํ์ฌ์ด๋ฅผ ๋์์ผ๋ก ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๋ด ์ฑ์ ๋ค๋ฅธ ๊ตฌ๋งค ํญ๋ชฉ์ด์๊ณ ๊ตฌ๋
๋ง ์์ต๋๋ค.
์ด ํจํค์ง์ iap ๋ฌธ์์์ ์ธ๊ธํ๋ฏ์ด getAvailablePurchases()
๋ ์๋ชจํ์ ๋ํด ์ด์ผ๊ธฐํฉ๋๋ค. ๊ตฌ๋
์ "์๋ชจํ"๋๋ "๋น ์๋ชจํ"์ ํ์ด ์๋๋๋ค. "์๋ ๊ฐฑ์ ๊ตฌ๋
"์
๋๋ค. getPurchaseHistory()
์ด (๊ฐ)ํด์ผํฉ๋๊น?
getPurchaseHistory ()๊ฐ ๋ค์ํ ๋ฐฐ์ด ๊ธธ์ด๋ฅผ ์ ๊ณตํ๋ค๋ ๊ฒ์ ์์์ต๋๋ค. ์์ฒญ ๋น๋๊ฐ ์ํฅ์ ๋ฏธ์น๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ฑฐ๋ ์์์ฆ์ ๋ชจ๋ ์์์ฆ์ ์ ํ์ ์ํด ๋ฐํ ๋ ๊ฒ์ฆ์ ์ํด ์ ์ก ๋ ํ ๊ฒฐ๊ตญ ๊ทธ๊ฒ์ ์ฐ๋ฆฌ๋ฅผ ์ํด ์ ๋ง ์๊ด์ดํ์ง ์์๋ค ๋ฐํ์ก๋ค latest_receipt_info
์ฐ๋ฆฌ๋ฅผ ์ํด ์ค์ ๋ชจ๋ ๊ฒ์
๋๋ค ๋ฐฐ์ด ์ด์จ๋ .
๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค (์๋ ๋ฐ์ค ๋ชจ๋ ์ค๋ฅ์ธ์ง ๋ชจ๋ฅด๊ฒ ์). ๋ํ ์ค์ ๊ธฐ๊ธฐ์์ Apple ID๋ฅผ ์ ํํ๋ฉด ๋ค๋ฅธ ๊ณ์ ์ผ๋ก ๊ตฌ๋งค ํ ํญ๋ชฉ์ด ๋ฐํ๋ฉ๋๋ค.
์ ์:
[email protected] ๊ณ์ ์ผ๋ก ๊ตฌ๋งคํ์ต๋๋ค.
2-Apple ID๋ฅผ [email protected]์ผ๋ก ์ ํ
3-getAvailablePurchases๋ [email protected] ๊ณ์ ์ผ๋ก ์ด๋ฃจ์ด์ง ๊ตฌ๋งค์ transactionId๋ฅผ ๋ฐํํฉ๋๋ค.
๋ด๊ฐ ์ฐพ์ ๋ ๋ค๋ฅธ ๋ฌธ์ ๋ ์ฅ์น๋ฅผ ๋ณต์ํ๋ฉด (์ด๊ธฐํ) getPurchaseHistory()
๋ฐ getAvailablePurchases
๋ ๋ฐฉ๋ฒ ๋ชจ๋ ์์์ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ๋ค๋ ๊ฒ์
๋๋ค.
๊ตฌ๋งค ๋ณต์์ ๋ํ Apple์ ์๋ต์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
"Users restore transactions to maintain access to content they've already purchased. For example, when they upgrade to a new phone, they don't lose all of the items they purchased on the old phone. Include some mechanism in your app to let the user restore their purchases, such as a Restore Purchases button."
์์ @ ssg-luke๊ฐ ๋งํ๋๋ก restoreCompletedTransactions
์ ๋ค์ํ ๊ฒฐ๊ณผ์ ๋ํ Apple ๊ฐ๋ฐ์ ํฌ๋ผ ์ฃผ์ ๋ฅผ ์ฐพ์์ต๋๋ค.
https://forums.developer.apple.com/thread/115242
์๋ง๋ ์ด๊ฒ์ ๊ด๋ จ์ด ์์ต๋๋ค.
์ฑ์ด ์์ง finishTransaction์ ํธ์ถํ์ง ์์ ํธ๋์ญ์ ์ด ๋ง์ ํ ์ฌ์ฉ์๋ฅผ ์ธ๊ธํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
https://forums.developer.apple.com/thread/115242#thread -post-355444
๋์ผํ ์ฅ์น์ ๋ค๋ฅธ ์๋ ๋ฐ์ค ๊ณ์ ์ด ์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๋์ผํ ์ฅ์น์์ ์๋ก ๋ค๋ฅธ ๊ณ์ ์ ๊ฑฐ๋๊ฐ ์๋ง์ด๊ณ ์ ํ "์๋ฃ"๋์ง ์์ ๊ฒ์ผ ์ ์์ต๋๊น?
๊ทธ๋ฌ๋ ๋ชจ๋ ํธ๋์ญ์
์ ๋ํด ๋ฃจํ๋ฅผ ์คํํ๊ณ ๋ชจ๋ ํธ๋์ญ์
์์ finishTransactionIOS
๋ฅผ ํธ์ถํ์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ๊ทธ๊ฒ๋ค์ ์ฌ๋ผ์ง๊ฒ ๋ง๋ค์ง ์์๊ฑฐ๋ getAvailablePurchases()
์ ์ ๋ขฐํ ์์๋ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ ์ค์ง ๋ชปํ์ต๋๋ค. ์๋ง๋ ์ ๊ฐ ์ด๋ฏธ ์๋ก์ด ์๋ ๋ฐ์ค ๊ณ์ ์ ์ฌ์ฉํ๊ณ ์๊ณ ํธ๋์ญ์
์ด ์ด์ ์๋ ๋ฐ์ค ๊ณ์ ์์ ์จ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ผ๊น์?
@fcandiani๊ฐ ๊ฒฝํ ํ ๊ฒ์ ์ค๋ช ํ ์๋ ์์ต๋๋ค.
getPurchaseHistory ()๊ฐ ๋ค์ํ ๋ฐฐ์ด ๊ธธ์ด๋ฅผ ์ ๊ณตํ๋ค๋ ๊ฒ์ ์์์ต๋๋ค. ์์ฒญ ๋น๋๊ฐ ์ํฅ์ ๋ฏธ์น๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ฒฐ๊ตญ ์ด๊ฒ์ ์ฐ๋ฆฌ์๊ฒ ์ค์ ๋ก ์ค์ํ์ง ์์ ๊ฒ์ผ๋ก ๋ฐํ์ก์ต๋๋ค. ์ผ๋จ ๊ฑฐ๋ ์์์ฆ ์ค ํ๋๊ฐ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ํด ๋ณด๋ด์ง๋ฉด ๋ชจ๋ ์์์ฆ์ ์ด์จ๋ latest_receipt_info ๋ฐฐ์ด๋ก Apple์ ์ํด ๋ฐํ๋์์ต๋๋ค.
์ ๋ณด @ ssg-luke ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค, ๋๋ ๋๊ฐ์ด ํ ๊ฒ์ ๋๋ค.
๋ํ ๋ชจ๋ ํธ๋์ญ์ ์ ๋ํด ๋ฃจํ๋ฅผ ์คํํ์ง๋ง finishTransactionIOS๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ฑฐ ํ ์ ์์์ต๋๋ค. ๋ด ๊ฑฐ๋๋ ์๋ ๊ฐฑ์ ๊ตฌ๋ ์ ๋๋ค.
๊ฑฐ์ ๋๊ฐ์ต๋๋ค. ๋๋ ๋ฌธ์ ๋ฅผ ๋ง๋ค๊ณ ์์์ง๋ง ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋ฌธ์ ์ ํด๊ฒฐ์ฑ ์ ์ฐพ์ ์ ์๋๋ก ๋ชจ๋ ์ ๋ณด๋ฅผ ์ฌ๊ธฐ์ ์ ๋ ฅํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
3.5.9
0.60.5
iOS
์ฌ์ฉ์๊ฐ ํ ๋ฒ ๊ตฌ๋
ํ๋ฉด getAvailablePurchases
ํ ๋ฒ์ ๊ตฌ๋งค ๋ง ๋ฐํํด์ผํฉ๋๋ค.
getAvailablePurchases
๋ ์ด์์ ๊ตฌ๋งค๋ฅผ ๋ฐํํฉ๋๋ค.
์ ์๋ ๋ฐ์ค ๊ณ์ ์ด์๋ ์ค์ ์ฅ์น.
getAvailablePurchases
(๋ฅผ) ํธ์ถํ๋ฉด ๊ตฌ๋งค ๋ด์ญ์ด ๋ฐํ๋์ง ์์ต๋๋ค (์์๋๋ก).purchaseUpdatedListener
๊ฐ ํธ์ถ๋๊ณ undefined
๋ง ๋ฐํ๋๋ RNIap.finishTransactionIOS(subscription.transactionId);
๋ฅผ ํธ์ถํฉ๋๋ค (์์๋๋ก).getAvailablePurchases
ํธ์ถํ๊ณ 1 ํ ๊ตฌ๋งค ๋ฐํ (์์๋๋ก)getAvailablePurchases
ํธ์ถํ๋ฉด ๊ฐ๊ฐ ๋ค๋ฅธ transactionId
๊ฐ์๋ ๋ ๊ฐ์ ๊ตฌ๋งค๊ฐ ๋ฐํ๋ฉ๋๋ค.{
originalTransactionDateIOS: 1571144840000
originalTransactionIdentifierIOS: "1000000579413333"
productId: "io.appmasters.lowcarb.development"
transactionDate: 1571145019000
transactionId: "1000000579415509"
transactionReceipt: "MIIVnQYJKoZIhvcN..."
},
{
originalTransactionDateIOS: 1571144840000
originalTransactionIdentifierIOS: "1000000579413333"
productId: "io.appmasters.lowcarb.development"
transactionDate: 1571144839000
transactionId: "1000000579416705"
transactionReceipt: "MIIVnQYJKoZIhvcN...."
}
getAvailablePurchases
ํธ์ถํ๋ฉด ๊ฐ๊ฐ ๋ค๋ฅธ transactionId
๊ฐ์๋ 3 ๊ฐ์ ๊ตฌ๋งค๊ฐ ๋ฐํ๋ฉ๋๋ค (์ด์ ๊ฒฐ๊ณผ์ ๋์ผํ์ง ์์).{
originalTransactionDateIOS: 1571144840000
originalTransactionIdentifierIOS: "1000000579413333"
productId: "io.appmasters.lowcarb.development"
transactionDate: 1571145739000
transactionId: "1000000579423546"
transactionReceipt: "MIIb1AYJKoZIhvcN..."
},{
originalTransactionDateIOS: 1571144840000
originalTransactionIdentifierIOS: "1000000579413333"
productId: "io.appmasters.lowcarb.development"
transactionDate: 1571145019000
transactionId: "1000000579426352"
transactionReceipt: "MIIb1AYJKoZI..."
},{
originalTransactionDateIOS: 1571144840000
originalTransactionIdentifierIOS: "1000000579413333"
productId: "io.appmasters.lowcarb.development"
transactionDate: 1571144839000
transactionId: "1000000579426353"
transactionReceipt: "MIIb1AYJKoZIhvcN..."
}
getAvailablePurchases
ํธ์ถํ๊ณ ๊ฐ๊ฐ ๋ค๋ฅธ transactionId
๊ฐ์๋ 4 ๊ฐ์ ๊ตฌ๋งค๋ฅผ ๋ฐํํฉ๋๋ค (์ด์ ๊ฒฐ๊ณผ์ ๋์ผํ์ง ์์) ...์ด๊ฒ์ ๋ด๊ฐ ๋ฌธ์์์ ์ฝ์ ๊ฒ๊ณผ Android์์ ์ผ์ด๋๋ ์ผ์์ ์ฌ๋ฐ๋ฅธ ํ๋์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋์์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
getAvaialblePurchases ()๊ฐ ์๋ ๋ฐ์ค ํ
์คํธ ๊ณ์ ์ 150 ๊ฐ ์ด์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค. getAvailablePurchases ()๋ฅผ ์ ํ ์ฌ์ฉํ์ง ์๊ณ ๋ง์ง๋ง ๊ตฌ๋งค๋ฅผ ์ฅ์น์ ์๋ฒ์ ์ ์ฅํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ์ฑ์ด ์ญ์ ๋๊ฑฐ๋ ์ฌ์ฉ์๊ฐ ์ ํด๋ํฐ์ผ๋ก ์ด๋ ํ ๊ฒฝ์ฐ์๋ ํ์ฌ ์ฌ์ฉ์ ID ๋ฐ ํ๋ซํผ (iOS ๋๋ Android)๊ณผ ์ฐ๊ฒฐ๋ ์๋ฒ์์ ๋ง์ง๋ง ๊ตฌ๋งค๊ฐ ์ ์ง๋ฉ๋๋ค. getAvailablePurchases () ํธ์ถ์ 1 ๋ถ ๊ฐ๊น์ด ๊ฑธ๋ฆฌ๋ฉฐ ๋๋๋ก์ด ํธ๋ฆฌ๊ฑฐ ๊ตฌ๋งค ์
๋ฐ์ดํธ ๋ฆฌ์ค๋๋ฅผ ํธ์ถํ์ฌ ์ฌ๋ฌ ๊ตฌ๋งค๋ฅผ ๋ณต์ํ๋ ค๊ณ ํฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ํ๋ฆ์ ์์ ํ์ต๋๋ค.
1) ์ฌ์ฉ์๊ฐ ์ฅ์น์ ๋ก๊ทธ์ธ ํ ๋ :
a) ์ฌ์ฉ์ ๋ฐ ํ๋ซํผ์ ๋ํด ์๋ฒ์์ ์ ํจํ ๋ง์ง๋ง ๊ตฌ๋งค๊ฐ ์๋์ง ํ์ธํ์ญ์์ค.
b) ์๋ฒ์ ๊ธฐ๋ก์ด์๋ ๊ฒฝ์ฐ DB์ ๋ก์ปฌ ์ ์ฅ ๊ตฌ๋งค๊ฐ ์๋์ง ํ์ธ
c) ๋ง๋ฃ ๋ ํญ๋ชฉ์ด ์๊ฑฐ๋ ๋ง๋ฃ ๋ ๊ฒฝ์ฐ ๊ตฌ๋
๋ณด๊ธฐ๋ฅผ ํ์ํฉ๋๋ค.
์ฒ์์๋ getAvailablePurchases ()๋ฅผ ํธ์ถํ๊ณ ๋ง์ง๋ง ๊ตฌ๋งค๊ฐ ์ฌ์ ํ ์ ํจํ์ง ํ์ธํ๋ ค๊ณ ํ์ต๋๋ค. ์ด๊ฒ์ด ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ ๋์์ด๋๋์ง ํ์คํ์ง ์์ง๋ง ๋ ์ด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ฐ์ 59์ ์๊ณ ๊ทธ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์ฒ๋ฆฌํด์ผ ํ ๋ ๋ค๋ฅธ ๊ณ ํต์
๋๋ค.
@ramakula ๋ฐ ์ฌ์ฉ์๊ฐ ๊ตฌ๋ ์ ์ทจ์ํ๋ฉด ์ด๋ป๊ฒ ๋๋์?
๋ง์ํ์ ๋๋ก ๊ตฌ๋ ์ ์ข ๋ฃ์ผ๊น์ง ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ง๋๋ฉฐ ๋ ์ด์ ๊ตฌ๋งคํ ์์๋ ํญ๋ชฉ์ด "๋ณด์ฌ์ง๋๋ค".
์๋ ํ์ธ์. ์ต๊ทผ์ด ๋ฌธ์ ์ ๋ํ ํ๋์ด์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฌธ์ ๊ฐ ํด๊ฒฐ ๋์์ต๋๊น? ์๋๋ฉด ์ฌ์ ํ ์ปค๋ฎค๋ํฐ์์ฃผ์๊ฐ ํ์ํฉ๋๊น? ์ด ๋ฌธ์ ๋ ๋ ์ด์ ํ๋์ด ๋ฐ์ํ์ง ์์ผ๋ฉด ์ข ๊ฒฐ ๋ ์ ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ "ํ ๋ก ์ฉ"๋๋ "์ข์ ์ฒซ ๋ฒ์งธ ๋ฌธ์ "๋ก ํ์ ํ ์๋ ์์ผ๋ฉฐ ์ด์ด ๋๊ฒ ์ต๋๋ค. ๊ทํ์ ๊ธฐ์ฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์ฅ๊ธฐ๊ฐ ์ฌ์ฉํ์ง ์์ผ๋ฉด์ด ๋ฌธ์ ๋ฅผ ์ข ๋ฃํฉ๋๋ค. ์ด ๋ฌธ์ ๊ฐ ์ต์ ๋ฆด๋ฆฌ์ค์ ์ฌ์ ํ ์กด์ฌํ๋ ๊ฒฝ์ฐ ์ต์ ์ ๋ณด๋ก ์ ๋ฌธ์ ๋ฅผ ์์ ๋กญ๊ฒ ์์ฑํ์ญ์์ค.
getAvaialblePurchases ()๊ฐ ์๋ ๋ฐ์ค ํ ์คํธ ๊ณ์ ์ 150 ๊ฐ ์ด์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค. getAvailablePurchases ()๋ฅผ ์ ํ ์ฌ์ฉํ์ง ์๊ณ ๋ง์ง๋ง ๊ตฌ๋งค๋ฅผ ์ฅ์น์ ์๋ฒ์ ์ ์ฅํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ์ฑ์ด ์ญ์ ๋๊ฑฐ๋ ์ฌ์ฉ์๊ฐ ์ ํด๋ํฐ์ผ๋ก ์ด๋ ํ ๊ฒฝ์ฐ์๋ ํ์ฌ ์ฌ์ฉ์ ID ๋ฐ ํ๋ซํผ (iOS ๋๋ Android)๊ณผ ์ฐ๊ฒฐ๋ ์๋ฒ์์ ๋ง์ง๋ง ๊ตฌ๋งค๊ฐ ์ ์ง๋ฉ๋๋ค. getAvailablePurchases () ํธ์ถ์ 1 ๋ถ ๊ฐ๊น์ด ๊ฑธ๋ฆฌ๋ฉฐ ๋๋๋ก์ด ํธ๋ฆฌ๊ฑฐ ๊ตฌ๋งค ์ ๋ฐ์ดํธ ๋ฆฌ์ค๋๋ฅผ ํธ์ถํ์ฌ ์ฌ๋ฌ ๊ตฌ๋งค๋ฅผ ๋ณต์ํ๋ ค๊ณ ํฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ํ๋ฆ์ ์์ ํ์ต๋๋ค.
- ์ฌ์ฉ์๊ฐ ์ฅ์น์ ๋ก๊ทธ์ธ ํ ๋ :
a) ์ฌ์ฉ์ ๋ฐ ํ๋ซํผ์ ๋ํด ์๋ฒ์์ ์ ํจํ ๋ง์ง๋ง ๊ตฌ๋งค๊ฐ ์๋์ง ํ์ธํ์ญ์์ค.
b) ์๋ฒ์ ๊ธฐ๋ก์ด์๋ ๊ฒฝ์ฐ DB์ ๋ก์ปฌ ์ ์ฅ ๊ตฌ๋งค๊ฐ ์๋์ง ํ์ธ
c) ๋ง๋ฃ ๋ ํญ๋ชฉ์ด ์๊ฑฐ๋ ๋ง๋ฃ ๋ ๊ฒฝ์ฐ ๊ตฌ๋ ๋ณด๊ธฐ๋ฅผ ํ์ํฉ๋๋ค.
์ฒ์์๋ getAvailablePurchases ()๋ฅผ ํธ์ถํ๊ณ ๋ง์ง๋ง ๊ตฌ๋งค๊ฐ ์ฌ์ ํ ์ ํจํ์ง ํ์ธํ๋ ค๊ณ ํ์ต๋๋ค. ์ด๊ฒ์ด ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ ๋์์ด๋๋์ง ํ์คํ์ง ์์ง๋ง ๋ ์ด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ฐ์ 59์ ์๊ณ ๊ทธ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์ฒ๋ฆฌํด์ผ ํ ๋ ๋ค๋ฅธ ๊ณ ํต์ ๋๋ค.
์์์ฆ์์ ์ต์ ๊ตฌ๋งค๋ฅผ ์ป์ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. exclude-old-transactions : true๋ก ์ฌ์ฉ์์ ์์ ์ ํ์ธํ๋ฉด ์ต์ ๊ตฌ๋ ์ ๋ณด๋ฅผ ์ป์ ์ ์์ต๋๋ค (์๋ ๊ฐฑ์ ์ ํ์๋ง ํด๋น). ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ์๋ ๊ฐฑ์ ๊ตฌ๋ ๊ตฌ๋งค๋ฅผ ๋ณต์ ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๊ฒ์ด ์ด์์ ์ธ ๋ฐฉ๋ฒ์ธ์ง ํ์คํ์ง ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ํ ๋ชจ๋ ํธ๋์ญ์ ์ ๋ํด ๋ฃจํ๋ฅผ ์คํํ์ง๋ง finishTransactionIOS๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ฑฐ ํ ์ ์์์ต๋๋ค. ๋ด ๊ฑฐ๋๋ ์๋ ๊ฐฑ์ ๊ตฌ๋ ์ ๋๋ค.