2017-03-28 5 views
18

मैंने आईओएस 10.3 में उपलब्ध इस नई सुविधा के बारे में पढ़ा है और सोचा कि यह अधिक लचीला और बाहर होगा डिब्बा। लेकिन जब मैंने docs पढ़ा तो मुझे पता चला कि आपको इसे दिखाने के लिए समय और दृश्य नियंत्रक इसे कॉल करने का समय तय करने की आवश्यकता है। क्या कोई तरीका है कि मैं इसे किसी भी दृश्य में यादृच्छिक अवधि के बाद ट्रिगर कर सकता हूं नियंत्रक उस पल में दिखा रहा है?वर्तमान दृश्य में समीक्षा पॉपअप दिखाने के लिए requestReview (SKStore समीक्षा नियंत्रक) का उपयोग कैसे करें यादृच्छिक अवधि के बाद नियंत्रक

+0

इसे देखें। https://stackoverflow.com/a/46358053/1514066 –

उत्तर

22

अपने AppDelegate में:

स्विफ्ट:

import StoreKit 

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    let shortestTime: UInt32 = 50 
    let longestTime: UInt32 = 500 
    guard let timeInterval = TimeInterval(exactly: arc4random_uniform(longestTime - shortestTime) + shortestTime) else { return true } 

    Timer.scheduledTimer(timeInterval: timeInterval, target: self, selector: #selector(AppDelegate.requestReview), userInfo: nil, repeats: false) 

} 

func requestReview() { 
    SKStoreReviewController.requestReview() 
} 

ऑब्जेक्टिव-सी:

#import <StoreKit/StoreKit.h> 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    int shortestTime = 50; 
    int longestTime = 500; 
    int timeInterval = arc4random_uniform(longestTime - shortestTime) + shortestTime; 

    [NSTimer scheduledTimerWithTimeInterval:timeInterval target:self selector:@selector(requestReview) userInfo:nil repeats:NO]; 
} 

- (void)requestReview { 
    [SKStoreReviewController requestReview]; 
} 

कोड ऊपर उपयोगकर्ता संकेत करने के लिए एप्पल पूछना एक यादृच्छिक समय में एप्लिकेशन को रेट करने के लिए होगा ऐप लॉन्च होने के 50 से 500 सेकंड के बीच। याद रखें कि ऐप्पल के दस्तावेज़ों के अनुसार, इस बात की कोई गारंटी नहीं है कि जब अनुरोध रिव्यू कहा जाता है तो रेटिंग प्रॉम्प्ट प्रस्तुत किया जाएगा।

+0

क्या ऐप्पल यह नहीं पूछता कि वर्तमान उपयोगकर्ता ने वर्तमान संस्करण पर समीक्षा सबमिट की है या नहीं? –

+0

@MichaelReilly हाँ वे –

13

के लिए उद्देश्य - सी:

जोड़े StoreKit.framework

अपने viewController.h

#import <StoreKit/StoreKit.h> 
फिर अपने समारोह कॉल में

में फिर

:

  [SKStoreReviewController requestReview]; 

स्विफ्ट

लिए

अपने ViewController.swift

import StoreKit 

तब में जोड़े StoreKit.framework

अपने समारोह कॉल में:

SKStoreReviewController.requestReview() 

यह है कि! जब ऐप्पल रेटिंग दिखाएगा (यादृच्छिक रूप से) ऐप्पल का ख्याल रखेगा। विकास में जब भी आप इसे कॉल करते हैं तो इसे कॉल किया जाएगा।

संपादित: ओएस संस्करण की जांच करने की कोई आवश्यकता नहीं है, ओएस 10.3 से कम होने पर स्टोरकिट पॉपअप नहीं करेगा, धन्यवाद ज़कारिया।

+0

और (दूसरों के लिए जो त्रुटियों का निर्माण करते हैं) ... बाइनरी "StoreKit.framework" को लिंक करना सुनिश्चित करें। – lifjoy

+0

यह सवाल का जवाब नहीं देता है क्योंकि यह रेटिंग पॉपअप को यादृच्छिक दृश्य नियंत्रक में लोड नहीं करता है। – Zakaria

+0

असल में, आपको यह जांचने की आवश्यकता नहीं है कि सिस्टम वर्जन है = = 10.3, क्योंकि यदि ऐसा नहीं है, तो "requestReview" कुछ भी नहीं करेगा .. – Zakaria

4

यादृच्छिक समय पर उठना उस दिनचर्या का उपयोग करने का एक अच्छा तरीका नहीं है, और न केवल ऐप्पल की सलाह के उल्लंघन में है, बल्कि आपको कम से कम परिणाम देगा।

एक यादृच्छिक समय पर पॉप अप के साथ उपयोगकर्ता को परेशान करना कभी भी उचित समय पर उन्हें प्रेरित करने के रूप में सफल नहीं होगा- जैसे कि जब उन्होंने अभी एक स्तर पूरा किया है या एक दस्तावेज़ बनाया है, और उस उपलब्धि की गर्म अस्पष्ट भावना है ।

0

मैं अभी तक टिप्पणी नहीं जोड़ सकता लेकिन यदि आप एपिरेटर का उपयोग कर रहे हैं तो आप यह देखने के लिए संस्करण देखना चाहेंगे कि यह 10.3 से कम है या नहीं, अन्य एपिरेटर समीक्षा संदेश बॉक्स पॉप अप हो गया है।

3

पीटर जॉन्सन की सलाह लेते हुए, मैंने एक साधारण वर्ग बनाया जहां आप बस अपने कोड में वांछित स्थान पर विधि को चिपका सकते हैं और यह उस स्थान पर खुल जाएगा जहां उपयोगकर्ता की सफलता थी।

struct DefaultKeys { 
    static let uses = "uses" 
} 


class ReviewUtility { 

    // Default Keys stored in Structs.swift 

    static let sharedInstance = ReviewUtility() 

    private init() {} 

    func recordLaunch() { 
    let defaults = UserDefaults.standard 

    // if there's no value set when the app launches, create one 
    guard defaults.value(forKey: DefaultKeys.uses) != nil else { defaults.set(1, forKey: DefaultKeys.uses); return } 
    // read the value 
    var totalLaunches: Int = defaults.value(forKey: DefaultKeys.uses) as! Int 
    // increment it 
    totalLaunches += 1 
    // write the new value 
    UserDefaults.standard.set(totalLaunches, forKey: DefaultKeys.uses) 

    // pick whatever interval you want 
    if totalLaunches % 20 == 0 { 
     // not sure if necessary, but being neurotic 
     if #available(iOS 10.3, *) { 
     // do storekit review here 
     SKStoreReviewController.requestReview() 
     } 
    } 
    } 
} 

इसका उपयोग करने के लिए, जहां आप इसे कॉल करना चाहते हैं उसे चिपकाएं और उम्मीद है कि आप उपयोगकर्ताओं को यादृच्छिकता से दूर नहीं करेंगे।

ReviewUtility.sharedInstance.recordLaunch() 
संबंधित मुद्दे