2013-11-01 9 views
7

जब मैं अपने ऐप से लॉग आउट करता हूं तो मेरी सेवा के उपयोगकर्ताओं के लिए डिवाइस के पुश टोकन को विश्वसनीय रूप से अमान्य (मेरे सर्वर पर उपयोगकर्ता प्रोफ़ाइल से हटाएं) कैसे अक्षम कर सकता हूं?उपयोगकर्ता लॉगआउट पर आईओएस डिवाइस पुश टोकन अमान्य करें

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

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

बुनियादी समाधान लॉग आउट करने पर उपयोगकर्ता प्रोफ़ाइल से एक डिवाइस के टोकन दूर करने के लिए है, लेकिन मैं gotchas के एक समूह के साथ ऊपर आ रहा हूँ के रूप में मुझे लगता है कि के माध्यम से:

  1. लॉगआउट नेटवर्क नहीं जा सकेगा एक्सेस - मैं अपने सर्वर को सूचित करने का प्रयास कर सकता हूं, लेकिन अगर उपयोगकर्ता के पास नेटवर्क एक्सेस नहीं है तो भी अतुल्यकालिक रूप से सफल होने के लिए लॉगआउट की आवश्यकता है (?)
  2. वास्तविक डिवाइस-टोकन अज्ञात हो सकता है - यदि उपयोगकर्ता ने अस्थायी रूप से पुश अनुमति बंद कर दी है वर्तमान टोकन नहीं दिया गया है। और डिवाइस < संग्रहित करना -> मुख्य जानकारी पहचानकर्ता के बाद सबसे अच्छी लगती है क्योंकि प्रति इंस्टॉलर परिवर्तन बदलता है और यूडीआईडी ​​विधियों को बहिष्कृत किया जाता है।
  3. सर्वर पक्ष अनन्य करना (किसी खाते में टोकन जोड़ने पर, सुनिश्चित करें कि एक ही टोकन किसी अन्य खाते के लिए सेट नहीं है) - यह दूसरे उपयोगकर्ता लॉगिंग पर निर्भर करता है, जिसकी गारंटी नहीं है।

वहाँ अधिक बढ़त मामलों मैं याद कर रहा हूँ कर रहे हैं और क्या रणनीति मैं उनके आसपास काम करने के लिए उपयोग कर सकते हैं?

उत्तर

3

आपके गोचा के कुछ कठिन परिस्थितियों को पेश करते हैं जो आप सामना कर सकते हैं। मैं आपको शिफ्ट करने या यह सुनिश्चित करने की सलाह दूंगा कि पुश-प्रेषण तर्क पूरी तरह सर्वर-साइड पर है: अपनी पसंद के उपयोगकर्ता पहचानकर्ता को पुशटोकन लिंक करें (जिसका अर्थ है कि एक पुश टोकन वास्तव में कई उपयोगकर्ताओं से जोड़ा जा सकता है)। यह पहचानकर्ता जिसे आप नियंत्रित करते हैं वह खाता पहचानकर्ता होना है जिसे लक्षित करने पर आपको लक्षित किया जाता है। इस तरह, आप नियंत्रित कर सकते हैं कि कौन सा उपयोगकर्ता अधिसूचना प्राप्त कर रहा है और इस पहचानकर्ता के आधार पर अपने पुशटोकन को पुनर्प्राप्त कर सकता है (ऐप्पल द्वारा प्रदान किए गए किसी भी डिवाइस पहचानकर्ता जो कि 1 डिवाइस = 1 उपयोगकर्ता मानता है)।

यदि आपका उपयोगकर्ता ऑफ़लाइन लॉग आउट करता है, तो आपको इसके बारे में पता नहीं चलेगा। आप उस उपयोगकर्ता को एक अधिसूचना भेज सकते हैं। यदि उपयोगकर्ता इस पर कार्य करने का विकल्प चुनता है, तो आपका ऐप खुल जाएगा और आप उस समय, अपने सर्वर से उपयोगकर्ता पहचानकर्ता की सदस्यता रद्द कर सकते हैं (क्योंकि वह इस बिंदु पर स्पष्ट रूप से ऑनलाइन है)।

+0

सुनिश्चित नहीं हैं कि मैं पहले पैराग्राफ का पालन करें। मेरे पास अनिवार्य रूप से पहला आधा है (एक टोकन एकाधिक उपयोगकर्ताओं से जोड़ा जा सकता है), लेकिन मुझे यकीन नहीं है कि मैं किस उपयोगकर्ता को अलग करता हूं, यह किस उपयोगकर्ता के लिए मान्य है। शायद उस टाइमस्टैम्प की तरह कुछ जब इसे पहली बार उस उपयोगकर्ता प्रोफ़ाइल में सहेजा गया था, तो नवीनतम नवीनतम मान्य होगा? – owenfi

+0

पर प्रतिक्रिया के बारे में बात करने के लिए धन्यवाद ऑफ़लाइन-लॉगआउट पुश अधिसूचना, सबसे अच्छा मामले समाधान एपीआई दिया की तरह प्रतीत होता है कि द्वारा पीछा किया, और चेतावनी एक के बारे में मेरी हिचक दूर। – owenfi

+0

पहले पैराग्राफ के बारे में, जब आप अपने सर्वर पर पुशटोकन स्टोर करते हैं, तो आप एक ही समय में उपयोगकर्ता पहचान भेज सकते हैं। यदि आपका उपयोगकर्ता मान्य है या नहीं, तो आपका सर्वर इस बिंदु पर जान जाएगा, नहीं? हालांकि मुझे यकीन है कि मैं सही ढंग से अपने प्रश्न समझ में आ नहीं कर रहा हूँ ... pushtoken ही, टाइमस्टैम्प, जिस पर वह जेनरेट हुआ था की परवाह किए बिना हो जाएगा; यकीन नहीं है कि मैं आपके विचार का पालन करता हूं। – Nick

0
  1. NSUserDefaults का उपयोग करते समय आपका ऐप्स किसी उपकरण पर पहली बार एक UUID (सार्वभौमिक विशिष्ट आईडी) उत्पन्न करने के लिए चलाता है और डिवाइस पर इस बचाने

    NSString * UUID = [[NSUserDefaults standardUserDefaults] objectForKey: @ " app_uuid "];

    if(uuid == nil){ 
        uuid = [[NSUUID UUID] UUIDString]; 
        [[NSUserDefaults standardUserDefaults] setObject:uuid forKey:@"app_uuid"]; 
        [[NSUserDefaults standardUserDefaults] synchronize]; 
    
    } 
    

    इस UUID अद्वितीय आवेदन उदाहरण पहचान के लिए उपयोगकर्ता उपयोग कर रहा है (यदि आप उपयोगकर्ता एक ही उपयोगकर्ता आईडी के साथ कई उपकरणों के लिए लॉग इन करने के लिए सक्षम होना चाहते हैं) का उपयोग किया जाएगा और में लॉग इन किया।

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

  3. जब, उपयोगकर्ता आईडी के साथ सभी tuples उनसे कोई टोकन और इन टोकन का उपयोग सूचना भेजने के एक विशिष्ट उपयोगकर्ता के लिए सूचना भेजना।

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