android - Google कैलेंडर एपीआई(एंड्रॉइड एप्लिकेशन)में "वर्ष 2038 _प्रभल"




calendar milliseconds year2038 (2)

मैं अपने सभी कोड के बिना पूरी तरह से मदद नहीं कर सकता, लेकिन मैंने पहले इसी तरह की समस्या में भाग लिया है। मैं जांच करूँगा कि आप अपनी डेटा पाइपलाइन के साथ किसी भी चीज को कास्ट नहीं कर रहे हैं।

1.) MyEvent getTime () जांचें कोई int वापस नहीं

2.) जांचें कि MyEvent SetTime उसे किसी int के रूप में सेट नहीं करता है

3.) कोई अन्य int casts मौजूद नहीं की जाँच करें

अगर आप किसी इंट, इम्प्लिक्ट या एक्सप्टाट के लिए कास्टिंग कर रहे हैं, तो जावा आपके नंबर की नकारात्मक संख्या में आपकी संख्या को बदल देगा।

मैं एक एंड्रॉइड एप्लिकेशन का निर्माण कर रहा हूं और एप्लिकेशन उपयोगकर्ता को Google कैलेंडर और बाह्य कैलेंडर (जैसे एक्सचेंज खाते) में इवेंट सम्मिलित करने में सक्षम बनाता है।

समस्या यह है कि यदि उपयोगकर्ता 2038 के बाद कोई इवेंट जोड़ना चाहता है, तो वह घटना को अतीत में बनाता है (उदाहरण के लिए - जनवरी 2038 दिसंबर 1 9 01 और 4 जुलाई 2038 मई 28, 1 9 02 हो गया) मैंने कुछ शोध किए और यह सोचा कि समस्या " वर्ष 2038 समस्या " है।

वर्ष 2038 समस्या कंप्यूटिंग और डेटा संग्रहण परिस्थितियों के लिए एक मुद्दा है, जिसमें समय मान संचित या 32-बिट पूर्णांक के रूप में गिना जाता है, और यह संख्या 1 जनवरी 1 9 70 से 00:00:00 UTC के बाद सेकंड की संख्या के रूप में व्याख्या की जाती है। इस तरह के कार्यान्वयन 1 9 जनवरी 2038 को 03:14:07 यूटीसी के बाद के समय सांकेतिक नहीं हो सकते।

यूनिक्स के हस्ताक्षर किए 32-बिट पूर्णांक समय प्रारूप में नवीनतम समय का प्रतिनिधित्व किया जा सकता है मंगलवार, 1 9 जनवरी 2038 (1 जनवरी 1 9 70 के बाद 2,147,483,647 सेकंड) मंगलवार 03:14:07 यूटीसी है। उस समय के बाद से "चारों ओर लपेटें" और आंतरिक रूप से एक ऋणात्मक संख्या के रूप में संग्रहीत किया जाएगा, जो कि इन प्रणालियों की व्याख्या 19 जनवरी 2038 के बजाय 13 दिसंबर 1 9 01 को हुई थी। यह पूर्णांक अतिप्रवाह के कारण होता है।

ऐसा लगता है कि मेरा जावा कोड ठीक काम करता है और मुझे मिले मिलीसेकंड ठीक होते हैं, लेकिन जब मैं Google एपीआई insert समारोह में मान भेजता हूं - मुझे लगता है कि इसके बारे में पता नहीं है कि इसके साथ कैसे निपटना है और फिर यह गलत तारीख को सम्मिलित करता है (1 9 01 और उससे ऊपर) क्या इसे संभालने का कोई तरीका है?

यह मेरा कोड है:

private void InsertEvent(MyEvent myEvent) {
    Uri EVENTS_URI = Uri.parse(getCalendarUriBase() + "events"); 

    ContentValues eventValues = new ContentValues();
    eventValues.put("eventTimezone",  TimeZone.getDefault().getID());
    eventValues.put("calendar_id", myEvent.calId);
    eventValues.put("title",myEvent.title);
    eventValues.put("allDay", 1);

    long dateStart = myEvent.startDate.getTime();   // returns milliseconds - 2160248400000 for date 06/16/2038
    eventValues.put("dtstart", dateStart );   

    long dateEnd = myEvent.endDate.getTime();
    eventValues.put("dtend", dateEnd  );

    // At this point, in debug mode, I can see that the millisecond of dtstart and dtend are OK. 
    Uri u1 = contentResolver.insert(EVENTS_URI, eventValues );  // API's function
}

यह एक घटना डालने के बारे में Google दस्तावेज़ीकरण है: http://developer.android.com/guide/topics/providers/calendar-provider.html#add-event


सारांश : मैं केवल जोखिम लेता हूं और क्लाइंट ऐप में रहस्य रखता हूं।

प्रॉक्सी सर्वर विकल्प :

एकमात्र तरीका जो आप नीचे सूचीबद्ध समस्याओं को कम कर सकते हैं और प्रॉक्सी-इन काम कर सकते हैं, पूरे नौ गज की दूरी पर जाना होगा - अपने प्रॉक्सी सर्वर पर तृतीय पक्ष webservice पर संसाधनों से निपटने के लिए सभी व्यावसायिक तर्कों को स्थानांतरित करना होगा, और अमीर यूआई के साथ क्लाइंट ऐप गूंगा टर्मिनल बनाओ। इस तरह, एकमात्र कार्य दुर्भावनापूर्ण ऐप प्रॉक्सी को अपनी तरफ से करने में सक्षम होगा, केवल वही होगा जो आपके व्यवसाय तर्क को वैध रूप से चाहिए।

लेकिन अब आप विश्वसनीयता और स्केलेबिलिटी से निपटने के लिए कई अन्य समस्याओं के दायरे में आ गए हैं।

लंबी प्रॉक्सी क्यों सरल प्रॉक्सी काम नहीं करेगा :

कुछ लोग, जब किसी समस्या का सामना करते हैं, तो सोचें "मुझे पता है, मैं अपना प्रॉक्सी सर्वर जोड़ूंगा" अब उन्हें दो समस्याएं हैं। (जेमी ज़विंस्की से क्षमा मांगने के साथ)

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

मुझे दोहराने दो - तार पर भेद करने का कोई तरीका नहीं है कि सॉफ्टवेयर का विशेष टुकड़ा चल रहा है। यदि संदेशों में डेटा सही दिखता है, तो कुछ भी साबित नहीं कर सकता कि यह एक और ऐप है जो उस संदेश को भेज रहा है

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

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

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

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

बेशक, यहां कमजोर बिंदु यह है कि पर्याप्त रूप से अच्छा ऐप उपयोगकर्ता को भरोसा करने के लिए उपयोगकर्ता को भरोसा कर सकता है और क्रेडेंशियल्स को रद्द नहीं कर सकता है।

हालांकि, इसे कम करने का एक तरीका मानक 2-पैर वाले की बजाय 3-पैर वाले ओएथ का उपयोग करने का Google दृष्टिकोण है। 3-पैर वाले ओएथ में, कोई पूर्व-निर्दिष्ट रहस्य नहीं है, लेकिन प्रत्येक प्रमाणीकरण पर प्रत्येक एक्सेस टोकन के साथ एक नया एक्सेस टोकन रहस्य जारी किया जाता है। हालांकि आखिरकार यह एक ही कमी से पीड़ित है, क्योंकि एक खराब ऐप अपनी प्रक्रिया से अच्छे ऐप के टोकन रहस्य को पढ़ सकता है, जिसके परिणामस्वरूप उपयोगकर्ता को हर बार ऐप एक्सेस को स्वीकृति देना पड़ता है जब उसे नए एक्सेस टोकन की आवश्यकता होती है।

और निश्चित रूप से, इसका यह भी अर्थ है कि यह उपयोगकर्ता के लिए थोड़ा अधिक असुविधाजनक और परेशान है।





android calendar milliseconds year2038