StoreKit क्या है और इसकी ज़रूरत क्यों है?
StoreKit Apple का एक बिल्ट-इन फ्रेमवर्क है, जो iOS, macOS, watchOS और tvOS ऐप्स में In-App Purchases (ऐप के अंदर खरीदारी) और सब्सक्रिप्शन को लागू करने के लिए डिज़ाइन किया गया है। यह डेवलपर्स को App Store के साथ इंटरैक्ट करने का एक यूनिफाइड इंटरफ़ेस प्रदान करता है: प्रोडक्ट्स को रिक्वेस्ट करना, ट्रांज़ैक्शन प्रोसेस करना, एक्सेस राइट्स चेक करना और सब्सक्रिप्शन मैनेज करना।
StoreKit की मुख्य जिम्मेदारियाँ:
- मोनेटाइज़ेशन — डिजिटल प्रोडक्ट्स बेचना (प्रीमियम एक्सेस, वर्चुअल करेंसी, कंटेंट)।
- सब्सक्रिप्शन मैनेजमेंट — ऑटोमैटिक रिन्यूअल, स्टेटस, ट्रायल पीरियड।
- सुरक्षा — App Store के ज़रिए पेमेंट प्रोसेसिंग, डेवलपर को बैंक कार्ड डेटा ट्रांसफर किए बिना।
- खरीदारी रीस्टोर करना — यूज़र अपनी खरीदारी दूसरे डिवाइस पर ट्रांसफर कर सकता है।
यह समझना ज़रूरी है: StoreKit कोई थर्ड-पार्टी लाइब्रेरी नहीं है, बल्कि Xcode SDK का हिस्सा है। इसे अलग से इंस्टॉल करने की ज़रूरत नहीं है, लेकिन App Store Connect में कॉन्फ़िगर करना और प्रोजेक्ट में जोड़ना ज़रूरी है।
इंस्टॉलेशन और सेटअप
चूँकि StoreKit एक सिस्टम फ्रेमवर्क है, इसकी इंस्टॉलेशन Xcode प्रोजेक्ट में इसे जोड़ने तक सीमित है:
- Xcode में अपना प्रोजेक्ट खोलें।
- टार्गेट (आपका ऐप) चुनें → "General" टैब।
- "Frameworks, Libraries, and Embedded Content" सेक्शन तक स्क्रॉल करें।
- "+" बटन दबाएँ और StoreKit.framework चुनें।
- सुनिश्चित करें कि "Embed" का स्टेटस "Do Not Embed" पर सेट है।
इसके बाद, ज़रूरी फ़ाइलों में फ्रेमवर्क इम्पोर्ट करें:
import StoreKit
साथ ही, App Store Connect में प्रोडक्ट्स सेटअप करना न भूलें:
- प्रोडक्ट आइडेंटिफ़ायर बनाएँ (जैसे,
com.example.premium)। - कीमत, लोकलाइज़ेशन, टाइप (कंज़्यूमेबल/नॉन-कंज़्यूमेबल/सब्सक्रिप्शन) सेट करें।
- सब्सक्रिप्शन के लिए ग्रुप और ट्रायल पीरियड कॉन्फ़िगर करें।
कोड उदाहरण के साथ त्वरित शुरुआत
प्रोडक्ट रिक्वेस्ट और खरीदारी के लिए न्यूनतम कार्यशील उदाहरण:
import StoreKit
class StoreManager: NSObject, SKProductsRequestDelegate, SKPaymentTransactionObserver {
static let shared = StoreManager()
private var products: [SKProduct] = []
override private init() {
super.init()
SKPaymentQueue.default().add(self)
}
// 1. प्रोडक्ट्स रिक्वेस्ट करें
func fetchProducts(productIDs: Set<String>) {
let request = SKProductsRequest(productIdentifiers: productIDs)
request.delegate = self
request.start()
}
// 2. प्रोडक्ट्स प्राप्त करने का डेलिगेट
func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
self.products = response.products
for product in products {
print("प्रोडक्ट मिला: \(product.localizedTitle) — \(product.price)")
}
}
// 3. खरीदारी
func purchase(product: SKProduct) {
let payment = SKPayment(product: product)
SKPaymentQueue.default().add(payment)
}
// 4. ट्रांज़ैक्शन प्रोसेस करें
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
switch transaction.transactionState {
case .purchased:
// कंटेंट अनलॉक करें
print("खरीदारी सफल: \(transaction.payment.productIdentifier)")
SKPaymentQueue.default().finishTransaction(transaction)
case .failed:
if let error = transaction.error {
print("खरीदारी में त्रुटि: \(error.localizedDescription)")
}
SKPaymentQueue.default().finishTransaction(transaction)
case .restored:
print("खरीदारी रीस्टोर की गई")
SKPaymentQueue.default().finishTransaction(transaction)