2017-04-07 8 views
5

मेरा इरादा या तो एसकेस्टोर रिव्यू कंट्रोलर (यदि लागू हो) प्रदर्शित करना है या अपना खुद का फीडबैक कंट्रोलर प्रदर्शित करना है और उपयोगकर्ता को ऐप स्टोर पर रीडायरेक्ट करना है। ऐसा करने से मैं उपयोगकर्ता को एक बार से अधिक प्रतिक्रिया के लिए पूछने से बच सकता हूं।क्या यह संभव है कि एसकेस्टोर रिव्यू कंट्रोलर प्रस्तुत किया गया हो।

एसकेस्टोर रिव्यू कंट्रोलर (https://developer.apple.com/reference/storekit/skstorereviewcontroller) पर ऐप्पल की कमी दस्तावेज पढ़ने के बाद ऐसा लगता है कि एसकेस्टोर रिव्यू कंट्रोलर वर्तमान में प्रस्तुत किया गया है या प्रस्तुत किया गया है या नहीं, यह निर्धारित करने का कोई तरीका नहीं है।

मैं समझता हूं कि मैं संभावित रूप से एनएसयूसर डीफॉल्ट में प्रदर्शन आवृत्ति को स्टोर कर सकता हूं, लेकिन मैं ऐसा करने से बचना पसंद करूंगा।

+0

आप कहते हैं कि आप UserDefaults का उपयोग नहीं करना चाहते हैं, लेकिन भले ही यह निर्धारित करने में SKStore समीक्षा नियंत्रक वर्तमान में प्रस्तुत किया जाता है या पहले से तो कैसे आप मूल्य तो संग्रहीत करेंगे प्रस्तुत किया गया है एक तरीका है? लेकिन मैं [यह] (http://stackoverflow.com/questions/43075515/how-to-use-requestreview-skstorereviewcontroller-to-show-review-popup-in-the) का उत्तर दूंगा। –

+0

[SKStoreReviewController का संभावित डुप्लिकेट उस उपयोगकर्ता को कैसे पता लगाया गया है, इस सेटिंग को रेट किया गया है या सेटिंग में 3 गुना सीमा तक पहुंच गई है?] (Https://stackoverflow.com/questions/42533520/skstorereviewcontroller-how-to-detect -थैट-उपयोगकर्ता-बंद-बंद-दर-यह-ऐप-आरटी) –

उत्तर

-3

असल में यह आपके पदानुक्रम पर निर्भर करता है। यदि आप एक नेविगेशन का उपयोग कर रहे हैं नियंत्रक

for (vc in self.navigationController.viewControllers) { 
if (vc isKindOfClass(SKStore​Review​Controller)){ 

//Means it is present 
    } 
} 
+1

यह काम नहीं करता है। मुझे विश्वास नहीं है कि SKStoreReviewController नेविगेशन स्टैक में कुछ भी जोड़ता है। – Lachlan

0

यहां बताया गया है कि यह प्रस्तुत किया गया है या नहीं।

private static func checkIfShownSKStoreReviewController(_ iteration: Int, originalWindowCount: Int) { 
    let windows = UIApplication.shared.windows 
    if windows.count > originalWindowCount { 
     let window = windows[1] 

     if window.className == "UITextEffectsWindow" || window.className == "UIRemoteKeyboardWindow" { 
      print("Shown SKVC iteration: \(iteration)") 

      //Do logic stuff like saving to your database 
      return 
     } 
    } 

    if iteration > 2000 { 
     print("checkIfShownSKStoreReviewController: timeout, bailing \(iteration)") 
     return 
    } 

    runThisAfterDelay(seconds: 0.02, after: { 
     checkIfShownSKStoreReviewController(iteration + 1, originalWindowCount: originalWindowCount) 
    }) 
} 

private static func runThisAfterDelay(seconds seconds: Double, after:() ->()) { 
    let time = dispatch_time(DISPATCH_TIME_NOW, Int64(seconds * Double(NSEC_PER_SEC))) 
    dispatch_after(time, dispatch_get_main_queue(), after) 
} 

static func showReview() { 
    print("Showing AppStore Review") 
    if #available(iOS 10.3, *) { 
     SKStoreReviewController.requestReview() 
     checkIfShownSKStoreReviewController(0, originalWindowCount: UIApplication.shared.windows.count) 
    } 
} 
+0

उत्तर के लिए धन्यवाद। हालांकि यह सैद्धांतिक रूप से काम करेगा, यह वही नहीं है जो मैं ढूंढ रहा हूं। संभावित रूप से 40 सेकंड प्रतीक्षा करने के लिए आदर्श नहीं है तो वैकल्पिक प्रतिक्रिया/समीक्षा नियंत्रक के साथ यूआई अपडेट करें। हालांकि यह कहकर, यह अब तक की सबसे अच्छी प्रतिक्रिया है और इसे अंततः यह निर्धारित करना चाहिए कि दृश्य प्रदर्शित किया गया है (मान लीजिए कि यह 40 सेकंड के भीतर प्रस्तुत किया जाएगा) – Lachlan

+1

मेरी कोशिशों में यह आमतौर पर 2- 10 वें पुनरावृत्ति। तो 0.2 सेकंड अधिकतम। लेकिन मुझे यकीन है कि यह विभिन्न कारकों से अलग होगा। आप पुनरावृत्ति गणना के साथ खेल सकते हैं और यदि आप चाहें तो 5 सेकंड के बाद एक संदेश भेज सकते हैं। – Esqarrouth

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

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