2009-02-10 3 views

उत्तर

12
वास्तव में जवाब अपने प्रश्न के लिए

:

सं

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

+0

हाय मार्को, धन्यवाद आदमी। मेरे लिए भी जोर से और स्पष्ट स्पष्ट है :)। आप कहते हैं कि प्रत्येक एसडीके ऐप को अपना वेबकिट कैश दिया जाता है, मुझे लगता है कि इन्हें एचएसएचटीटीपीकी स्टोरेज क्लास का उपयोग करके एक्सेस किया जा सकता है। या मैं अभी भी रास्ता बंद कर रहा हूँ? – TonyNeallon

+0

मुझे यकीन नहीं है - मैंने कभी कोशिश नहीं की है। इसे आज़माएं। UIWebView को एम्बेड करने के लिए यह केवल कुछ ही मिनटों का काम है, क्या यह उस साइट के लिए एक यूआरएल लोड करता है जो इसे एक कुकी देगा, फिर कुकीज़ को पढ़ने का प्रयास करें। यदि वेबव्यू अभी भी सुलभ था तो मैं शायद जावास्क्रिप्ट के साथ ऐसा करूंगा। (stringByEvaluating जावास्क्रिप्टस्ट्रिंग :) – Marco

4

आईफोन पर सैंडबॉक्सिंग के कारण आपको सफारी की कुकीज़ तक पहुंच नहीं है। आप केवल अपने आवेदन के भीतर बनाई गई कुकीज़ तक पहुंच सकते हैं - उदाहरण के लिए UIWebView द्वारा।

+0

हाय mfazekas आपकी प्रतिक्रिया के लिए धन्यवाद फिर से,। कुकीज़ को मेरे ऐप की दस्तावेज़ निर्देशिका से लोड किए गए पृष्ठ के जावास्क्रिप्ट के माध्यम से सेट किया जाता है जो मेरे एप्लिकेशन के UIWebView नियंत्रण में होता है। क्या यह सुनिश्चित करेगा कि कुकीज मेरे ऐप सैंडबॉक्स में संग्रहीत हों? आपकी मदद आदमी के लिए धन्यवाद। – TonyNeallon

3

हालांकि आप एक ही सवाल twicebefore कहा है, यहाँ एक दृष्टिकोण अभी तक का उल्लेख नहीं किया ...

यह एक छोटे से जटिल हो सकता है, लेकिन आप एक UIWebView साथ Greasemonkey-esque बातें कर सकते हैं। कुछ इस तरह:

  • लोड आपके लक्षित पृष्ठ
  • शिल्प कुछ जावास्क्रिप्ट जो document.cookie पढ़ सकते हैं और डेटा आप
  • जरूरत webViewDidFinishLoad प्रतिनिधि में वापस आ जाएगी, stringByEvaluatingJavaScriptFromString साथ UIWebView में इस जावास्क्रिप्ट इंजेक्षन संदेश

मैंने आईफोन ऐप में तीसरे पक्ष के पृष्ठों को बढ़ाने के लिए इस तकनीक का उपयोग किया है, लेकिन मुझे यकीन नहीं है कि यह सफारी मोबाइल के समान स्थान से कुकीज़ पढ़ेगा या नहीं।

हालांकि एक शॉट के लायक है?

+0

हाय पॉल, सुझाव के लिए धन्यवाद।Document.cookies पढ़ने के लिए जावास्क्रिप्ट इंजेक्शन अभी भी कुछ भी डर नहीं है। लेकिन यह कोशिश करने लायक था। सोचा था कि यह था :) – TonyNeallon

0

आप

if ([[NSHTTPCookieStorage sharedHTTPCookieStorage] cookieAcceptPolicy] != NSHTTPCookieAcceptPolicyAlways) { 
    [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];  
} 

जांच करना चाह सकते लेकिन जाहिरा तौर पर NSHTTPCookieStorage भी iOS पर वर्तमान आवेदन में अंतिम अनुरोध से कुकीज़ नहीं रखता है (rdar: // 8,190,706)

2

यहाँ मेरी utils मिल रहा है/कुकी विधि सेट करें।



+(void)setCookie:(NSString *)key withValue:(NSString *)value { 
    NSArray *keys = [NSArray arrayWithObjects: 
        NSHTTPCookieDomain, 
        NSHTTPCookieExpires, 
        NSHTTPCookieName, 
        NSHTTPCookiePath, 
        NSHTTPCookieValue, nil]; 
    NSArray *objects = [NSArray arrayWithObjects: 
         @"YOURDOMAIN", 
         [NSDate distantFuture], 
         key, 
         @"/", 
         value, nil];  
    NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys]; 
    NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:dict]; 
    NSHTTPCookieStorage *sharedHTTPCookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
    [sharedHTTPCookieStorage setCookie:cookie]; 
} 

+(NSString *)getCookie:(NSString *)key { 
    NSHTTPCookieStorage *sharedHTTPCookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
    NSArray *cookies = [sharedHTTPCookieStorage cookiesForURL:[NSURL URLWithString:@"YOURDOMAIN"]]; 
    NSEnumerator *enumerator = [cookies objectEnumerator]; 
    NSHTTPCookie *cookie; 
    while (cookie = [enumerator nextObject]) 
    { 
     if ([[cookie name] isEqualToString:key]) 
     { 
      return [cookie value]; 
     } 
    } 
    return nil; 
} 
+0

इस विधि से सहेजी गई कुकी कभी समाप्त नहीं होती है? –

10

यदि आपके पास सर्वर यूआरएल तक पहुंच है तो वास्तव में एक दिलचस्प तरीका है।

  1. अपने ऐप में मोबाइल सफारी के साथ सर्वर यूआरएल लॉन्च करें।
  2. लक्ष्य सर्वर यूआरएल कुकी को पढ़ता है और किसी ऐप विशिष्ट यूआरएल के लिए वापस रीडायरेक्ट (MyApp: // कुकी = 123)
  3. एप्लिकेशन फिर वापस बंद कर रहा है और आप URL हैंडलर से है कि मूल्य पढ़ सकते हैं

यह थोड़ा हैकी है क्योंकि ऐप मोबाइल सफारी स्विच करेगा और फिर तुरंत ऐप पर वापस स्विच करेगा। लेकिन, यह संभव है।

+0

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

6

ध्यान दें कि आईओएस 8 पर, आप शायद इस समस्या को जन्म देने वाले कुछ उपयोग मामलों को हल करने के लिए Safari Password Sharing का उपयोग कर बेहतर हैं।

यह सीधे संभव नहीं है, लेकिन वेब साइट के सहयोग से यह संभव है।

स्पष्टीकरण के लिए, उपयोगकर्ता का मामला यह है कि एक उद्देश्य सी अनुप्रयोग मोबाइल सफारी में किसी वेबसाइट द्वारा सेट की गई कुकी के मूल्य को पढ़ना चाहता है। (। यानी विशेष रूप से, एक UIWebView कुकी सेट में शामिल नहीं किया गया था)

आपके ऐप ने इस करना चाहिए:

  1. लॉन्च मोबाइल सफारी, का उपयोग करते हुए [[UIApplication sharedApplication] openURL: यूआरएल];
  2. यूआरएल एक विशेष होना चाहिए, उदाहरण के लिए। http://yourwebsite.com/give-ios-app-the-cookie
  3. अपनी वेबसाइट पर, जब कि यूआरएल शुरू की है, इस मुद्दे को अपने-ऐप्लिकेशन का url-योजना के लिए एक पुन: निर्देश: cookievalue = (जैसे AngryBirds:। Cookievalue = hh4523523sapdfa)
  4. अपने ऐप के प्रतिनिधि प्राप्त करता है - (bool) आवेदन : (UIApplication *) आवेदन openURL: (NSURL *) यूआरएल sourceApplication: (NSString *) sourceApplication एनोटेशन: (आईडी) एनोटेशन प्रक्रिया यूआरएल कुकी मूल्य प्राप्त करने के

ध्यान दें कि आप इस स्वचालित रूप से ऐसा नहीं करना चाहिए एप्लिकेशन शुरू होता है - उपयोगकर्ता मोबाइल सफारी और बैक में स्थानांतरण देखेगा, जो एक अच्छा उपयोगकर्ता अनुभव नहीं है और ऐप्पल आपके ऐप को अस्वीकार कर देगा (ऐप्पल यह भी मानता है कि "उपयोगकर्ता का व्यक्तिगत डेटा अपलोड करना उनकी पूर्व सहमति के बिना सर्वर ")। उपयोगकर्ता के जवाब में यह करना बेहतर होगा, उपयोगकर्ता अनुभव पर ध्यान देना - उदाहरण के लिए। उपयोगकर्ता को "लॉगिन" बटन हिट करने का इंतजार करें, फिर इसे करें, और यदि उपयोगकर्ता आपकी वेबसाइट में लॉग इन नहीं है, तो http://yourwebsite.com/give-ios-app-the-cookie उपयोगकर्ता को सफारी के भीतर लॉगिन स्क्रीन दिखाना चाहिए। यदि उपयोगकर्ता लॉग इन है तो उपयोगकर्ता को रीडायरेक्ट करने से पहले सफारी में दूसरे या दो के लिए आपको "स्वचालित रूप से लॉग इन कर रहा है ..." स्क्रीन दिखा सकता है।

पाठ्यक्रम के हॉटमेल/जीमेल/आदि के साथ काम करने का कोई तरीका नहीं है - इसे अपनी वेबसाइट होना चाहिए।

क्रेडिट इस तरह के दृष्टिकोण का सुझाव देने के लिए Unique Identifier for both mobile safari and in app in iOS पर जाता है।

+1

"सफारी पासवर्ड साझाकरण" के लिए प्रलेखन का सबसे अच्छा स्रोत डब्ल्यूडब्ल्यूडीसी2014 सत्र 506 है: "आपकी ऐप, आपकी वेबसाइट और सफारी" –

11

आईओएस 9 के रूप में यह संभव है!

sfSafariViewController का उपयोग करें।

सेट करने के लिए की आवश्यकता होगी:

  • कुकी डेटा प्राप्त करने के लिए अपने अनुप्रयोग में एक custom URL scheme
  • जिस वेबसाइट से आप कुकीज़ प्राप्त कर रहे हैं, उसे आपके ऐप पर रीडायरेक्ट करने के लिए आपके ऐप की कस्टम यूआरएल योजना विशिष्ट एपीआई लागू करने की आवश्यकता होगी।

आप इस repo को क्लोन कर सकते हैं जिसमें इसका एक पूरी तरह से काम कर रहा डेमो है।

आशा इस मदद करता है,

लियाम

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