2011-10-16 8 views
7

मेरे ऐप में, उपयोगकर्ता उपभोग्य सामग्रियों को खरीदते हैं, चलिए कोर डेटा में संग्रहीत सूटकेस कहते हैं। जब उपयोगकर्ता पहले ऐप इंस्टॉल करता है, तो मैं उन्हें शुरू करने के लिए एक फ्रीबी देता हूं। ऐप कम से कम एक सूटकेस सेट अप किए बिना काम नहीं कर सकता है।iCloud उपयोगकर्ताओं को इन-ऐप उपभोग्य "चोरी" करने के लिए संभव बनाता है

लेकिन यदि उपयोगकर्ता अपने आईफोन पर ऐप इंस्टॉल करता है और फिर उनके आईपैड को इंस्टॉल करता है और दोनों को सिंक करता है, तो अब उनके पास 2 सूटकेस हैं। और यदि वे किसी भी डिवाइस पर ऐप को अनइंस्टॉल करते हैं, तो उसे पुनः इंस्टॉल और सिंक करें, उन्होंने अभी एक अतिरिक्त प्राप्त किया है और वे अनिश्चित काल तक ऐसा कर सकते हैं।

मैं दो समाधान देख सकते हैं, लेकिन उनमें से कोई गलत होने पर:

  1. iCloud से उपयोगकर्ता द्वारा पहली बार समन्वयित हो जाता है NSUbiquityKeyValueStore को मान जोड़ें। पहले लॉन्च पर इस मान को देखें। यदि यह शून्य है, तो फ्रीबी बनाएं, अगर ऐसा नहीं है, तो डेटा सिंक करें। लेकिन यह एक समस्या पैदा करता है। क्या होगा यदि उपयोगकर्ता iCloud को अक्षम करता है या पहले लॉन्च पर कोई इंटरनेट कनेक्शन नहीं है। ऐप फ्रीबी बना देगा, फिर जब iCloud उपलब्ध होगा, डुप्लिकेट सिंक करें, और वे इसे जितनी बार चाहें उतनी बार कर सकते हैं।

  2. किसी भी तरह से प्रत्येक ऐप पर डिफ़ॉल्ट आइटम से मेल खाता है। मुझे ऑब्जेक्ट आईडी या टाइमस्टैम्प से मिलान करने का विचार था, लेकिन ये अलग-अलग होंगे और मुझे यकीन नहीं है कि इसे कैसे संभालना है।

क्या किसी को कुछ भी पता है जो मैं इसके बारे में कर सकता हूं?

संपादित करें:

एक पूर्व-पैकेज डेटाबेस प्लस migratePersistentStore का उपयोग करना: toURL: विकल्प: withType: त्रुटि: जाने का रास्ता हो रहा है। अगर यह मेरे लिए काम करता है तो कोड के साथ उत्तर पोस्ट करेगा।

+0

हो सकता है कि अपने उदाहरण सिर्फ भ्रामक है, लेकिन क्यों न सिर्फ उन्हें एक मुक्त सूटकेस देना यदि उनके पास पहले से कभी नहीं? आप कहते हैं कि ऐप सूटकेस के बिना काम नहीं करेगा। क्या आपका मतलब है कि अगर यह पहले सूटकेस था और इसे खाया जाता है तो यह काम करेगा? –

+0

@chrispix उदाहरण को इतना सार बनाने के लिए खेद है। असल में, आप सूटकेस "उपभोग" नहीं करते हैं, आप जितना चाहें उतना खरीदते हैं और आप उन्हें जमा करते हैं। यह एक "उपभोग योग्य" मॉडल है क्योंकि यह असीमित है, लेकिन आइटम वास्तव में खरीद पर "खपत" नहीं है, जो मुझे लगता है कि महत्वपूर्ण अंतर है। – ntesler

+0

मुझे लगता है कि मैं देखता हूं। तो उपयोगकर्ता पुनः स्थापित करता है, इसमें कोई सूटकेस नहीं है, आप उन्हें एक देते हैं। फिर वे कुछ प्रमाण-पत्र दर्ज करते हैं जो उन्हें अपने पिछले सूटकेस को आपके सर्वर से खींचने की अनुमति देते हैं? –

उत्तर

0

मेरी राय में, इसका सबसे अच्छा समाधान, iCloud UbiquitousKeyValueStore में एक सरणी में UDID को स्टोर करना है।

//Store UDID in iCloud 
if ([[[UIDevice currentDevice] systemVersion] doubleValue] >= 5.0) { 
    if ([[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil]) { 
     NSUbiquitousKeyValueStore *store = [NSUbiquitousKeyValueStore defaultStore]; 

     //Get array 
     NSMutableArray *devices = [NSMutableArray arrayWithArray:[store arrayForKey:@"UDID"]]; 
     [devices addObject:[[UIDevice currentDevice] uniqueIdentifier]]; 

     //Create new array, set to kvstore 
     NSArray *newDevices = [NSArray arrayWithArray:devices]; 
     [store setArray:newDevices forKey:@"UDID"]; 
     [store synchronize]; 
    } 
} 

...

//Check if app already installed on device 
    NSArray *devices = [[NSUbiquitousKeyValueStore defaultStore] arrayForKey:@"UDID"]; 

    for (NSString *UDID in devices) { 
     if ([UDID isEqualToString:[[UIDevice currentDevice] uniqueIdentifier]]) { 
       //stop the giveaway 
     } 
    } 
+2

... लेकिन आप अब यूडीआईडी ​​स्टोर नहीं कर सकते हैं, है ना? – 3zzy

1

iCloud का उपयोग नेटवर्क कनेक्टिविटी का तात्पर्य है। जैसे ही कोई डिवाइस नेटवर्क से कनेक्ट होता है, आप रसीदों को प्रमाणित कर सकते हैं और अपने स्वयं के सर्वर पर उपभोग योग्य उपभोग कर सकते हैं।

+0

मेरे पास इसे स्थापित करने के लिए आवश्यक कौशल नहीं हैं, लेकिन मुझे विश्वास है कि iCloud के UbiquitousKeyValueStore का उपयोग कुछ भी नहीं होना चाहिए। – ntesler

3

यदि आप प्राप्तियां मान्य नहीं कर रहे हैं और अपने स्वयं के सर्वर पर उपभोक्ताओं के उपभोग करने वाले उपभोक्ताओं का ट्रैक रखते हैं तो आप इसे गलत कर रहे हैं। आप मूल रूप से उपयोगकर्ता को सभ्य और ईमानदार होने पर भरोसा कर रहे हैं, जो आम तौर पर हमेशा एक बुरा विचार है।

जब आप इन-ऐप उपभोग्य सामग्रियों का उपयोग करते हैं तो आपको अपने उपयोगकर्ताओं द्वारा खरीदे गए किसी भी स्थान पर एक सेवर पर लॉग रखना चाहिए। इस तरह, हर बार जब आपका ऐप शुरू होता है तो यह सर्वर के साथ सत्यापित कर सकता है कि उपभोग योग्य वस्तुओं की अपेक्षित संख्या मौजूद है।

+1

आमतौर पर अपने ग्राहकों पर भरोसा करना ठीक है। जो लोग चोरी करते हैं वे पहले स्थान पर कभी भुगतान नहीं करेंगे। इसके अलावा यदि आपके पास एक अच्छा ऐप है तो वे गैर-तकनीकी रूप से समझदार लोगों को इसे खरीदने के लिए कहेंगे, और फिर आपको अधिक बिक्री मिल जाएगी। यह चाल यह स्पष्ट नहीं है कि आप सामान खरीदने के आसपास कैसे होंगे। –

+0

समस्या इन-ऐप खरीदारी नहीं है क्योंकि, जैसा कि आप कहते हैं, आप रसीदों को प्रमाणित कर सकते हैं। मुश्किल बिट फ्रीबीज है और आप कैसे सुनिश्चित करते हैं कि प्रत्येक उपयोगकर्ता को केवल एक बार फ्रीबी मिल जाए। – Nestor

संबंधित मुद्दे