2013-09-03 10 views
11

कुछ हद तक When is didRegisterForRemoteNotificationsWithDeviceToken called? के समान।didRegisterForRemoteNotificationsWithDeviceToken दो बार बुलाया?

उपयोगकर्ता पहले एप्लिकेशन इंस्टॉल और यह अधिसूचना स्वीकार करने के लिए, यदि उपयोगकर्ता उसे स्वीकार कर लेगा कहा जा didRegisterForRemoteNotificationsWithDeviceToken करेंगे कि क्या संकेत देता है जब?

उपयोगकर्ता वर्तमान में साइन इन या खाता बनाता है के बाद मैं registerForRemoteNotificationTypes पर कॉल कर रहा हूं।

बाद में लॉन्च होने पर, didRegisterForRemoteNotificationsWithDeviceToken प्रतिनिधि को एपडिलेगेट में registerForRemoteNotificationTypes पर कॉल किए बिना भी कॉल किया जाता है।

अगर मैं डॉक्स और उदाहरण कोड का पालन करें:

डिवाइस टोकन का अनुरोध करने और प्रदाता के लिए यह हर बार गुजर आपके आवेदन की शुरूआत करके, आप प्रदाता डिवाइस के लिए वर्तमान टोकन है कि सुनिश्चित करने के लिए मदद ।

- (void)applicationDidFinishLaunching:(UIApplication *)app { 

    // other setup tasks here.... 
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:... 
} 

लेकिन जब एप्लिकेशन लॉन्च होने, प्रतिनिधि दो बार बुलाया जाएगा टोकन अनुरोध करना होगा।

सवाल और स्पष्टता के एक जोड़े की जरूरत:

  1. प्रारंभिक शीघ्र होने के लिए, शीघ्र प्रकट करने के लिए के लिए registerForRemoteNotificationTypes के लिए एक कॉल किया जाना चाहिए? लेकिन, अगर मैं इसे मैन्युअल रूप से ऐपडिलेगेट में कॉल करता हूं तो प्रतिनिधि को दो बार बुलाया जाएगा। क्या ऐसा लगता है कि इस तरह से?

  2. यदि उपयोगकर्ता प्रारंभिक संकेत स्वीकार करता है, तो didRegisterForRemoteNotificationsWithDeviceToken स्वचालित रूप से कॉल किया जाएगा? या क्या हमें AppDelegate में registerForRemoteNotificationTypes का आह्वान करना चाहिए? लेकिन फिर भविष्य में लॉन्च के लिए प्रतिनिधि को दो बार बुलाया जाएगा?

  3. यदि उपयोगकर्ता इनकार करते हैं और बाद में इसे सेटिंग के माध्यम से स्वीकार करते हैं, तो क्या होता है?

अद्यतन

0. प्रारंभिक शीघ्र होने के लिए, शीघ्र प्रकट करने के लिए के लिए registerForRemoteNotificationTypes के लिए एक कॉल किया जाना चाहिए? लेकिन, अगर मैं इसे मैन्युअल रूप से ऐपडिलेगेट में कॉल करता हूं तो प्रतिनिधि को दो बार बुलाया जाएगा। क्या ऐसा लगता है कि इस तरह से?यह सच नहीं है। पता चला कि वास्तव में 2 registerForRemoteNotiicationTypes AppDelegate में किए जा रहे थे।

उत्तर

6

यदि उपयोगकर्ता प्रारंभिक संकेत स्वीकार करता है, तो क्या किया जाएगा रजिस्ट्रारफॉररोटोटोटेशनविथडिवाइस टोकन स्वचालित रूप से कॉल किया जाएगा? नहीं, आपकी रिमोट अधिसूचना पंजीकरण प्रक्रिया तब शुरू होती है जब 'एक्सेस की अनुमति' पर क्लिक किया जाता है, लेकिन किया गया रजिस्ट्रारफोरोटोटोटेशनविथडिवाइस टोकन विधि केवल सफल एपीएनएस पंजीकरण पर ही बुलाया जाता है।

यदि आपका आवेदन पहले से पंजीकृत किया गया है, registerForRemoteNotificationTypes बुला: तुरंत किये बिना ऑपरेटिंग सिस्टम प्रतिनिधि के लिए डिवाइस टोकन पारित करने में परिणाम अतिरिक्त भूमि के ऊपर

आप निर्धारित कर सकते एक आवेदन के रूप में शुरू किया गया है या का परिणाम उपयोगकर्ता बटन को टैप कर रहा है या अधिसूचना एप्लिकेशन स्थिति की जांच करके पहले से चल रहे एप्लिकेशन को डिलीवर किया गया था। आवेदन के प्रतिनिधि के कार्यान्वयन में: didReceiveRemoteNotification: या एप्लिकेशन: didReceiveLocalNotification: विधि, एप्लिकेशनस्टेट गुण का मूल्य प्राप्त करें और इसका मूल्यांकन करें। यदि मान UIApplicationStateInactive है, तो उपयोगकर्ता ने एक्शन बटन टैप किया है; यदि मान UIAplplicationStateActive है, तो अनुप्रयोग सबसे महत्वपूर्ण था जब को अधिसूचना मिली।

+0

ठीक है। इसे केवल तभी बुलाया जाएगा जब उपयोगकर्ता शीघ्र और सफल पंजीकरण स्वीकार करता है? अन्यथा विफलता विधि कहा जाएगा? यदि उपयोगकर्ता प्रॉम्प्ट को अस्वीकार करता है तो क्या होता है, क्या त्रुटि विधि को बुलाया जाएगा? –

+0

यदि उपयोगकर्ता प्रॉम्प्ट को अस्वीकार करता है, तो उसने एपीएनएस पंजीकरण प्रक्रिया शुरू नहीं की है और त्रुटि विधि कभी नहीं बुलाई जाएगी। didFailToRegisterForRemoteNotificationsWithError विधि केवल पंजीकरण विफलता पर ही बुलाया जाता है। – thatzprem

1

नहीं। इस विधि को केवल ऐप लॉन्च होने पर ही बुलाया जाता है। यदि इसे दो बार कहा जाता है तो इसे आपके कोड से बुलाया जाएगा। देखने के लिए कि आप

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings 

को

[application registerUserNotificationSettings:mySettings]; 
[application registerForRemoteNotifications]; 

की तरह कोड डाल अगर कर रहे हैं didFinishLaunchingWithOptions

में बार में तो प्रयास करें कि आप कॉल किया जा सकता है [application registerForRemoteNotifications];

इसलिए इस कोड को निकालने है।

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