{"id":37320,"date":"2023-06-18T07:15:18","date_gmt":"2023-06-17T22:15:18","guid":{"rendered":"https:\/\/m9js.shop\/blog\/?p=37320"},"modified":"2023-06-18T07:15:18","modified_gmt":"2023-06-17T22:15:18","slug":"implementing-in-app-purchases-in-ios-apps-with-swift-utilizing-in-app-purchase","status":"publish","type":"post","link":"https:\/\/m9js.shop\/blog\/development\/implementing-in-app-purchases-in-ios-apps-with-swift-utilizing-in-app-purchase","title":{"rendered":"Swift\ub85c iOS \uc571\uc5d0\uc11c \uc571 \ub0b4 \uacb0\uc81c \uad6c\ud604\ud558\uae30: In-App Purchase \ud65c\uc6a9"},"content":{"rendered":"

Swift\ub85c iOS \uc571\uc5d0\uc11c \uc571 \ub0b4 \uacb0\uc81c \uad6c\ud604\ud558\uae30: In-App Purchase \ud65c\uc6a9<\/h1>\n

\"In-App<\/p>\n

\ubaa8\ubc14\uc77c \uc571\uc5d0\uc11c\ub294 \ub9ce\uc740 \uacbd\uc6b0 \uc720\uc800\ub294 \uc571 \ub0b4\uc5d0\uc11c \ucd94\uac00 \uae30\ub2a5\uc774\ub098 \uc778\uc571 \uc544\uc774\ud15c\uc744 \uad6c\ub9e4\ud558\ub294 \uacbd\uc6b0\uac00 \ub9ce\uc2b5\ub2c8\ub2e4. \uc774\ub7ec\ud55c \uacb0\uc81c \uc2dc\uc2a4\ud15c\uc740 \uc571\uc758 \uc218\uc775 \ucc3d\ucd9c\uc5d0 \ud070 \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uc774\ub7ec\ud55c \uacb0\uc81c \uc2dc\uc2a4\ud15c\uc744 \uad6c\ud604\ud558\uae30 \uc704\ud574\uc11c\ub294 \ub9ce\uc740 \uac83\uc744 \uace0\ub824\ud574\uc57c \ud569\ub2c8\ub2e4. \uc774\ubc88\uc5d0\ub294 Swift\ub97c \uc774\uc6a9\ud558\uc5ec iOS \uc571\uc5d0\uc11c \uc571 \ub0b4 \uacb0\uc81c \uc2dc\uc2a4\ud15c\uc744 \uad6c\ud604\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n

In-App Purchase \ub3c4\uc785\ud558\uae30<\/h2>\n

In-App Purchase\ub294 \uc571 \ub0b4\uc5d0\uc11c \uc720\uc800\uac00 \ucd94\uac00 \uae30\ub2a5\uc774\ub098 \uc778\uc571 \uc544\uc774\ud15c\uc744 \uad6c\ub9e4\ud558\ub294 \uacb0\uc81c \uc2dc\uc2a4\ud15c\uc785\ub2c8\ub2e4. \uc774\ub7ec\ud55c \uacb0\uc81c \uc2dc\uc2a4\ud15c\uc740 \uc571\uc758 \uc218\uc775 \ucc3d\ucd9c\uc5d0 \ud070 \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c In-App Purchase\ub97c \uad6c\ud604\ud558\uace0 \ub3c4\uc785\ud558\ub294 \uac83\uc740 \ub9e4\uc6b0 \uc911\uc694\ud569\ub2c8\ub2e4.<\/p>\n

In-App Purchase\ub97c \ub3c4\uc785\ud558\uae30 \uc704\ud574\uc11c\ub294 \uba3c\uc800 Apple Developer \uacc4\uc815\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 \uc571\uc744 \ub4f1\ub85d\ud558\uace0 In-App Purchase\ub97c \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

In-App Purchase\ub97c \uc124\uc815\ud560 \ub54c\ub294 \uc0c1\ud488 ID\ub97c \ub4f1\ub85d\ud574\uc57c \ud569\ub2c8\ub2e4. \uc0c1\ud488 ID\ub294 \uc571 \ub0b4\uc5d0\uc11c \uad6c\ub9e4\ud560 \uc218 \uc788\ub294 \uc81c\ud488\uc758 \uc2dd\ubcc4\uc790\uc785\ub2c8\ub2e4. \uc774\ub97c \ub4f1\ub85d\ud558\uba74 \uc720\uc800\uac00 \uc571 \ub0b4\uc5d0\uc11c \ud574\ub2f9 \uc0c1\ud488\uc744 \uad6c\ub9e4\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

\uc571 \ub0b4 \uacb0\uc81c \uc2dc\uc2a4\ud15c \uad6c\ud604\ud558\uae30<\/h2>\n

\uc571 \ub0b4 \uacb0\uc81c \uc2dc\uc2a4\ud15c\uc744 \uad6c\ud604\ud558\uae30 \uc704\ud574\uc11c\ub294 \uba3c\uc800 In-App Purchase\ub97c \uc124\uc815\ud574\uc57c \ud569\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \uc571 \ub0b4\uc5d0\uc11c \uc0c1\ud488\uc744 \uad6c\ub9e4\ud558\ub294 \ubc84\ud2bc \ub4f1\uc744 \ub9cc\ub4e4\uc5b4\uc57c \ud569\ub2c8\ub2e4.<\/p>\n

In-App Purchase\ub97c \uad6c\ud604\ud558\uae30 \uc704\ud574\uc11c\ub294 StoreKit \ud504\ub808\uc784\uc6cc\ud06c\ub97c \uc0ac\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4. \uc774\ub97c \uc774\uc6a9\ud558\uba74 \uc571 \ub0b4\uc5d0\uc11c In-App Purchase\ub97c \ucc98\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

StoreKit\uc740 \uc571 \ub0b4\uc5d0\uc11c In-App Purchase\ub97c \ucc98\ub9ac\ud560 \ub54c \ud544\uc694\ud55c \ud074\ub798\uc2a4\uc640 \ud504\ub85c\ud1a0\ucf5c, \uba54\uc11c\ub4dc\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc774\ub97c \uc774\uc6a9\ud558\uc5ec \uc571 \ub0b4\uc5d0\uc11c In-App Purchase\ub97c \uad6c\ud604\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

\uc571 \ub0b4\uc5d0\uc11c In-App Purchase\ub97c \uad6c\ud604\ud560 \ub54c\ub294 \ubcf4\uc548 \ubb38\uc81c\ub97c \uace0\ub824\ud574\uc57c \ud569\ub2c8\ub2e4. \uc720\uc800\uac00 \uacb0\uc81c\ub97c \ud560 \ub54c \ubcf4\uc548\uc801\uc778 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud558\uba74 \ud070 \ubb38\uc81c\uac00 \ub429\ub2c8\ub2e4. \ub530\ub77c\uc11c In-App Purchase\ub97c \uad6c\ud604\ud560 \ub54c\ub294 \ubcf4\uc548\uc801\uc778 \uce21\uba74\uc744 \uace0\ub824\ud558\uc5ec\uc57c \ud569\ub2c8\ub2e4.<\/p>\n

Swift\ub85c In-App Purchase \ud65c\uc6a9\ud558\uae30<\/h2>\n

Swift\ub97c \uc774\uc6a9\ud558\uc5ec In-App Purchase\ub97c \ud65c\uc6a9\ud558\ub294 \ubc29\ubc95\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n

\uc0c1\ud488 \uc694\uccad\ud558\uae30<\/h3>\n

In-App Purchase\ub97c \uc774\uc6a9\ud558\uc5ec \uc0c1\ud488\uc744 \uad6c\ub9e4\ud558\uae30 \uc704\ud574\uc11c\ub294 \uba3c\uc800 \uc0c1\ud488\uc744 \uc694\uccad\ud574\uc57c \ud569\ub2c8\ub2e4. \uc774\ub97c \uc704\ud574\uc11c\ub294 SKProductsRequest \ud074\ub798\uc2a4\ub97c \uc774\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n

let productRequest = SKProductsRequest(productIdentifiers: Set([\"\uc0c1\ud488 ID\"]))\nproductRequest.delegate = self\nproductRequest.start()<\/code><\/pre>\n

\uc704 \ucf54\ub4dc\uc5d0\uc11c\ub294 SKProductsRequest \ud074\ub798\uc2a4\ub97c \uc774\uc6a9\ud558\uc5ec \uc0c1\ud488\uc744 \uc694\uccad\ud569\ub2c8\ub2e4. productIdentifiers\uc5d0\ub294 \uc0c1\ud488 ID\ub97c \uc785\ub825\ud569\ub2c8\ub2e4.<\/p>\n

\uc0c1\ud488 \uc815\ubcf4 \ubc1b\uae30<\/h3>\n

\uc0c1\ud488\uc744 \uc694\uccad\ud55c \ud6c4\uc5d0\ub294 \ud574\ub2f9 \uc0c1\ud488\uc758 \uc815\ubcf4\ub97c \ubc1b\uc544\uc640\uc57c \ud569\ub2c8\ub2e4. \uc774\ub97c \uc704\ud574\uc11c\ub294 SKProductsRequestDelegate \ud504\ub85c\ud1a0\ucf5c\uc744 \uc774\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n

func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {\n    let products = response.products\n}<\/code><\/pre>\n

\uc704 \ucf54\ub4dc\uc5d0\uc11c\ub294 productsRequest(_:didReceive:) \uba54\uc11c\ub4dc\ub97c \uc774\uc6a9\ud558\uc5ec \uc0c1\ud488 \uc815\ubcf4\ub97c \ubc1b\uc544\uc635\ub2c8\ub2e4. products\uc5d0\ub294 \uc0c1\ud488 \uc815\ubcf4\uac00 \ub2f4\uaca8 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

\uacb0\uc81c \uc694\uccad\ud558\uae30<\/h3>\n

\uc0c1\ud488\uc744 \uc694\uccad\ud558\uace0 \uc0c1\ud488 \uc815\ubcf4\ub97c \ubc1b\uc740 \ud6c4\uc5d0\ub294 \uacb0\uc81c\ub97c \uc694\uccad\ud574\uc57c \ud569\ub2c8\ub2e4. \uc774\ub97c \uc704\ud574\uc11c\ub294 SKPaymentQueue \ud074\ub798\uc2a4\ub97c \uc774\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n

let payment = SKPayment(product: product)\nSKPaymentQueue.default().add(payment)<\/code><\/pre>\n

\uc704 \ucf54\ub4dc\uc5d0\uc11c\ub294 SKPayment\ud074\ub798\uc2a4\ub97c \uc774\uc6a9\ud558\uc5ec \uacb0\uc81c\ub97c \uc694\uccad\ud569\ub2c8\ub2e4. add(_:) \uba54\uc11c\ub4dc\ub97c \uc774\uc6a9\ud558\uc5ec \uacb0\uc81c\ub97c \ud050\uc5d0 \ucd94\uac00\ud569\ub2c8\ub2e4.<\/p>\n

\uacb0\uc81c \uc644\ub8cc \ucc98\ub9ac\ud558\uae30<\/h3>\n

\uacb0\uc81c\uac00 \uc644\ub8cc\ub418\uba74 \uc720\uc800\uc5d0\uac8c \ud574\ub2f9 \uc544\uc774\ud15c\uc744 \uc81c\uacf5\ud574\uc57c \ud569\ub2c8\ub2e4. \uc774\ub97c \uc704\ud574\uc11c\ub294 SKPaymentTransactionObserver \ud504\ub85c\ud1a0\ucf5c\uc744 \uc774\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {\n    for transaction in transactions {\n        switch transaction.transactionState {\n        case .purchased:\n            \/\/ \uacb0\uc81c \uc644\ub8cc \ucc98\ub9ac\n        case .failed:\n            \/\/ \uacb0\uc81c \uc2e4\ud328 \ucc98\ub9ac\n        case .restored:\n            \/\/ \ubcf5\uc6d0 \ucc98\ub9ac\n        default:\n            break\n        }\n    }\n}<\/code><\/pre>\n

\uc704 \ucf54\ub4dc\uc5d0\uc11c\ub294 paymentQueue(_:updatedTransactions:) \uba54\uc11c\ub4dc\ub97c \uc774\uc6a9\ud558\uc5ec \uacb0\uc81c \uc644\ub8cc \ucc98\ub9ac\ub97c \ud569\ub2c8\ub2e4. transactionState\ub97c \uc774\uc6a9\ud558\uc5ec \uacb0\uc81c \uc0c1\ud0dc\ub97c \ud655\uc778\ud558\uace0 \ucc98\ub9ac\ud569\ub2c8\ub2e4.<\/p>\n

iOS \uc571\uc5d0\uc11c \uacb0\uc81c \uad6c\ud604 \uc2dc \uace0\ub824\ud560 \uc0ac\ud56d<\/h2>\n

iOS \uc571\uc5d0\uc11c \uacb0\uc81c\ub97c \uad6c\ud604\ud560 \ub54c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uc0ac\ud56d\uc744 \uace0\ub824\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n

\ubcf4\uc548<\/h3>\n

\uacb0\uc81c \uc2dc\uc2a4\ud15c\uc740 \ubcf4\uc548\uc801\uc778 \uce21\uba74\uc5d0\uc11c \ub9e4\uc6b0 \uc911\uc694\ud569\ub2c8\ub2e4. \uc720\uc800\uac00 \uacb0\uc81c\ub97c \ud560 \ub54c \ubcf4\uc548\uc801\uc778 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud558\uba74 \ud070 \ubb38\uc81c\uac00 \ub429\ub2c8\ub2e4. \ub530\ub77c\uc11c \ubcf4\uc548\uc801\uc778 \uce21\uba74\uc744 \uace0\ub824\ud558\uc5ec \uacb0\uc81c \uc2dc\uc2a4\ud15c\uc744 \uad6c\ud604\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n

\uac00\uaca9 \uc815\ucc45<\/h3>\n

\uacb0\uc81c \uc2dc\uc2a4\ud15c\uc744 \uad6c\ud604\ud560 \ub54c\ub294 \uac00\uaca9 \uc815\ucc45\uc744 \uace0\ub824\ud574\uc57c \ud569\ub2c8\ub2e4. \uc720\uc800\uac00 \uacb0\uc81c\ub97c \ud560 \ub54c \uac00\uaca9\uc774 \ub108\ubb34 \ub192\uc73c\uba74 \uacb0\uc81c\ub97c \ud558\uc9c0 \uc54a\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub530\ub77c\uc11c \uac00\uaca9\uc744 \uc801\uc808\ud558\uac8c \uc124\uc815\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n

\ud658\ubd88 \uc815\ucc45<\/h3>\n

\ud658\ubd88 \uc815\ucc45\uc744 \uba85\ud655\ud558\uac8c \uc124\uc815\ud574\uc57c \ud569\ub2c8\ub2e4. \uc720\uc800\uac00 \uacb0\uc81c\ub97c \ucde8\uc18c\ud558\uac70\ub098 \ud658\ubd88\uc744 \uc694\uccad\ud560 \uacbd\uc6b0\uc5d0 \ub300\ud55c \uc815\ucc45\uc744 \uba85\ud655\ud558\uac8c \uc124\uc815\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n

\uacb0\uc81c \uc218\uc218\ub8cc<\/h3>\n

\uacb0\uc81c \uc2dc\uc2a4\ud15c\uc744 \uc774\uc6a9\ud560 \uacbd\uc6b0\uc5d0\ub294 \uacb0\uc81c \uc218\uc218\ub8cc\uac00 \ubc1c\uc0dd\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c \uacb0\uc81c \uc218\uc218\ub8cc\ub97c \uace0\ub824\ud558\uc5ec \uac00\uaca9\uc744 \uc124\uc815\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n

\uacb0\uc81c \ubc29\ubc95<\/h3>\n

\uacb0\uc81c \uc2dc\uc2a4\ud15c\uc744 \uc774\uc6a9\ud560 \ub54c\ub294 \uacb0\uc81c \ubc29\ubc95\uc744 \uace0\ub824\ud574\uc57c \ud569\ub2c8\ub2e4. \uc720\uc800\uac00 \uacb0\uc81c\ub97c \ud560 \ub54c \ub2e4\uc591\ud55c \uacb0\uc81c \ubc29\ubc95\uc744 \uc81c\uacf5\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n

\uacb0\ub860<\/h2>\n

In-App Purchase\ub97c \uc774\uc6a9\ud558\uc5ec iOS \uc571\uc5d0\uc11c \uc571 \ub0b4 \uacb0\uc81c \uc2dc\uc2a4\ud15c\uc744 \uad6c\ud604\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf4\uc558\uc2b5\ub2c8\ub2e4. In-App Purchase\ub97c \uc774\uc6a9\ud558\uba74 \uc571\uc758 \uc218\uc775 \ucc3d\ucd9c\uc5d0 \ud070 \uc5ed\ud560\uc744 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uacb0\uc81c \uc2dc\uc2a4\ud15c\uc744 \uad6c\ud604\ud560 \ub54c\ub294 \ubcf4\uc548\uc801\uc778 \uce21\uba74\uc744 \uace0\ub824\ud558\uc5ec\uc57c \ud569\ub2c8\ub2e4. \ub610\ud55c \uac00\uaca9 \uc815\ucc45, \ud658\ubd88 \uc815\ucc45, \uacb0\uc81c \uc218\uc218\ub8cc, \uacb0\uc81c \ubc29\ubc95 \ub4f1\uc744 \uace0\ub824\ud558\uc5ec \uacb0\uc81c \uc2dc\uc2a4\ud15c\uc744 \uad6c\ud604\ud574\uc57c \ud569\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 \uc720\uc800\ub4e4\uc774 \ubcf4\ub2e4 \ud3b8\ub9ac\ud558\uac8c \uc571 \ub0b4\uc5d0\uc11c \ucd94\uac00 \uae30\ub2a5\uc774\ub098 \uc778\uc571 \uc544\uc774\ud15c\uc744 \uad6c\ub9e4\ud560 \uc218 \uc788\ub3c4\ub85d \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"

iOS \uc571 \uacb0\uc81c \uad6c\ud604\ud558\uae30: In-App Purchase \ud65c\uc6a9<\/p>\n","protected":false},"author":1,"featured_media":33704,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1957],"tags":[154,6040,6041,3291],"class_list":["post-37320","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development","tag-apple","tag-ios","tag-swift","tag-3291"],"acf":[],"_links":{"self":[{"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts\/37320","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/comments?post=37320"}],"version-history":[{"count":1,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts\/37320\/revisions"}],"predecessor-version":[{"id":37321,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts\/37320\/revisions\/37321"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/media\/33704"}],"wp:attachment":[{"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/media?parent=37320"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/categories?post=37320"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/tags?post=37320"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}