2017-02-05 8 views
5

मैं एक आयनिक आईओएस आवेदन जहां मेरी वेबसाइट कुकीज़ और स्पष्ट कैश और स्पष्ट सत्र कैश बचत नहीं कर रहा है में एक मुद्दा का सामना करना पड़ रहा नहीं कर रहे हैं काम कर रहे। मैं कॉर्डोवा इनएप्पब्रोसर प्लगइन का उपयोग कर रहा हूं।कैशिंग कुकीज़ आईओएस 10 (clearcache = नहीं;) काम नहीं कर रहा है जब ऐप पुन: प्रारंभ - Cordova/आयोनिक

एंड्रॉयड में, यह पूरी तरह से काम कर रहा है।

var ref = window.open(url, '_blank','location=no,toolbar=yes,clearcache=no,clearsessioncache=no'); 

लेकिन, आईओएस में, यह काम नहीं कर रहा है। जब, मैं पहले अपने प्रमाण पत्र प्रदान करता हूं, और ऐप में जाता हूं और फिर मैं ऐप से बाहर निकलता हूं और इसे दोबारा खोलता हूं, यह फिर से मेरे क्रेडेंशियल (जो एंड्रॉइड में पूरी तरह से काम करता है) के लिए पूछता है

आगे खोदने पर, मैंने पाया कि कुकी बचाया जा चिह्नित कर रहे हैं के रूप में isSessionOnly = सच और समाप्त हो रहा है = शून्य था।

इस प्रकार, मैं सत्र के अंदर कुकी देख सकते हैं, लेकिन जब कोई ऐप

बंद कर दिया है मैं CDVinAppbrowser.m वर्ग में निम्न कोड लिख कर मेरी परिणाम नहीं मिला मंजूरी दे दी हो जाता है:

- (void)openInInAppBrowser:(NSURL*)url withOptions:(NSString*)options 
    {  
     NSHTTPCookie *cookie; 
     NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
    for (cookie in [cookieJar cookies]) { 
     NSLog(@"%@", cookie); 
    } 

तो, कैसे कुकीज़ को बचाने या विकल्पों के साथ clearcache = कोई और clearsessioncache काम कर के साथ inappbrowser बनाने के लिए = नहीं आईओएस में।

नोट: मैं पूरी तरह से आईओएस/स्विफ्ट के लिए नया हूँ। इसलिए, मुझे यह जानने की जरूरत है कि स्विफ्ट कक्षाओं में कोड कहां रखा जाए। बाउंटी के लिए

संपादित करें (AndroidMechanic द्वारा)

मैं ठीक उसी समस्या जहां यह एंड्रॉयड दोषरहित के लिए काम करता है, लेकिन iOS पर यह क्रेडेंशियल के लिए ऐप पुन: प्रारंभ हर बार पूछता है। मैं एक समाधान के लिए एक बक्षीस की पेशकश कर रहा हूं जहां देशी कोड से बचा जा सकता है।

+0

आप इस समस्या को हल किया? –

+0

क्या आपको इसके लिए कोई समाधान मिला? मुझे एक ही समस्या का सामना करना पड़ रहा है – AndroidMechanic

+0

@AndroidMechanic एक बग की तरह दिखता है, क्या आप एक उदाहरण प्रदान कर सकते हैं जहां इसे आसानी से पुन: उत्पन्न किया जा सकता है? – jcesarmobile

उत्तर

0

@AndroidMechanic, मैं प्रश्न पोस्ट और यह कैसे हम इसे हल है।

हमने पाया कि आईओएस इनएपब्रोसर वेबव्यू कुकीज़ को ठीक से संभाल नहीं पाता है लेकिन एंड्रॉइड का वेबव्यू करता है। हमारी ऐप की आरंभिक लॉगिन प्रक्रिया हमारी पहचान प्रदाता (जो हमारे मामले में एडीएफएस थी) के माध्यम से थी। पहचान प्रदाता SAML के माध्यम से कॉन्फ़िगर किया गया था (कुकीज़ के माध्यम से कौन सा काम करता है)।

समाधान 1: (सुनिश्चित करें कि कुकी जब तक वे मान्य हैं काम करवाएं)

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

लेकिन, हम इस समस्या को जो समाधान 2. है के लिए एक बेहतर समाधान की जरूरत

समाधान 2: (कुकीज़, उपयोग पहुंच टोकन का प्रयोग न करें)

हम करने के लिए SAML से हमारे प्रमाणीकरण बदल OAuth2.0 प्रमाणीकरण कोड फ़्लो प्रोटोकॉल जहां हमने उपयोगकर्ता की पहचान सत्यापित करने के लिए एक्सेस टोकन और रीफ्रेश टोकन का उपयोग किया था।

तो, जब भी लॉग इन नियंत्रक निकाल दिया जाता है, यह निम्नलिखित की जाँच करता है यूआरएल कॉल करने से पहले:

A) Check if any access token is present 
B) If present, whether it is expired or not. 
C) If expired, use the refresh token to get the new access token. 

तो उपरोक्त शर्तों के किसी भी असफल, हम URL जहाँ उपयोगकर्ता में लॉग इन करने के लिए फिर से अन्यथा उपयोगकर्ता कर सकते हैं फोन कुकीज़ के बारे में चिंता किए बिना आईओएस और एंड्रॉइड दोनों में एसएसओ क्षमताओं का उपयोग करें।

धन्यवाद

सौरव

0

@AndroidMechanic, आईओएस के लिए निर्दिष्ट समस्या एक ज्ञात समस्या है और हमें इसका सामना करना पड़ा ताकि हम सत्र या कुकीज़ में विवरण सहेजने के बजाय निम्नलिखित समाधान के साथ आए, हम KeyChain में सहेजना पसंद करते हैं संदर्भ लिंक है जो Ionic Native का समर्थन करता है।

Cordova और आयोनिक मूल निवासी प्लगइन्स 1.Install:

$ ionic cordova plugin add cordova-plugin-ios-keychain 
$ npm install --save @ionic-native/keychain 

2.Add को अपने ऐप्लिकेशन के मॉड्यूल को यह प्लगइन ...

import { Keychain } from '@ionic-native/Keychain'; 

... 

@NgModule({ 
    ... 

    providers: [ 
    ... 
    Keychain 
    ... 
    ] 
    ... 
}) 
export class AppModule { } 

3. प्रयोग

import { Keychain } from '@ionic-native/keychain'; 

constructor(private keychain: Keychain) { } 

... 

this.keychain.set(key, value).then(() => { 
    this.keychain.get(key) 
    .then(value => console.log('Got value', value)) 
    .catch(err => console.error('Error getting', err)); 
}) 
.catch(err => console.error('Error setting', err)); 
संबंधित मुद्दे