2011-06-24 7 views
5

मैं इस विज्ञापन nauseum चर्चा की गई है, लेकिन मैं अपने मामले प्रस्तुत करना चाहते हैं ....विंडोज फोन 7, लॉगिन स्क्रीन रीडायरेक्ट और .exit के लिए एक मामला?

  1. मेरे एप्लिकेशन में मेरे आरम्भ पृष्ठ login.xaml है। उपयोगकर्ता लॉग इन करता है, उपयोगकर्ता नाम और पासवर्ड मेरी डब्ल्यूसीएफ सेवा के माध्यम से प्रमाणित होते हैं, उपयोगकर्ता नाम अलग भंडारण में सहेजा जाता है, और फिर उपयोगकर्ता को mainpage.xaml पर रीडायरेक्ट किया जाता है।

  2. यदि कोई उपयोगकर्ता मेरी एप्लिकेशन शुरू होता है, और वे पहले से ही अलग भंडारण में किसी सहेजे गए उपयोगकर्ता नाम है, वे

  3. mainpage.xaml उपयोगकर्ता mainpage.xaml से कठिन बटन दबाता है "वापस", इस पर पुनः निर्देशित कर रहे हैं लॉगिन स्क्रीन पर रीडायरेक्ट करता है, जो बदले में उन्हें मुख्य पृष्ठ.xaml पर रीडायरेक्ट करता है क्योंकि उनके पास पहले से ही एक सहेजा गया स्थानीय उपयोगकर्ता नाम है। यह मेरे ऐप को वर्तमान में प्रमाणीकरण में विफल होने का कारण बन रहा है क्योंकि उपयोगकर्ता mainpage.xaml से ऐप से बाहर निकलने के लिए "बैक" बटन नहीं दबा सकता है।

मेरा वृत्ति यहां mainpage.xaml में BackKeyPress को ओवरराइड करना है और किसी भी तरह से ऐप से बाहर निकलना है। अन्य पोस्ट पढ़कर, मैं देख सकता हूं कि यह विधि उपलब्ध नहीं है। मेरा दूसरा विचार किसी भी तरह app.xaml.cs पृष्ठ में एक संपत्ति को स्टोर करना था जो ऐप को लॉग इन पेज लोड होने पर बाहर निकलने के लिए बताएगा और वह संपत्ति सत्य पर सेट की गई है, लेकिन यह थोड़ा सा हैकी भी लगता है ....

कोई विचार यहाँ है?

अद्यतन समाधान उपयोग किया गया:

क्या काम कर समाप्त हो गया प्रवेश पृष्ठ mainpage.xaml अंदर एक धुरी आइटम बनाने के लिए किया गया था। जब कोई उपयोगकर्ता लॉग इन किए बिना ऐप खोला जाता है, तो वर्तमान में चयनित पिवट आइटम लॉगिन पिवट आइटम में बदल जाएगा। यदि उपयोगकर्ता ने ऐप खोला और WAS लॉग इन किया है, तो सामान्य पिवट आइटम का चयन किया जाएगा।

+0

आप अनुप्रयोग से बाहर के लिए एक अपवाद फेंकने की कोशिश की? – softwaredeveloper

+0

हाँ, बस वास्तव में उस समाधान को पसंद नहीं है। कुछ और अधिक सुरुचिपूर्ण के लिए उम्मीद कर रहा था। – Jarrette

+0

@Jarette तो अब आपको यह निर्धारित करने के लिए कुछ झंडे का उपयोग करना होगा कि आप लॉगिन पेज पर कैसे पहुंचे हैं और फिर बाहर निकलने के लिए आगे बढ़ें। – softwaredeveloper

उत्तर

2

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

एक उपयुक्त कनवर्टर और दृश्यता गुणों के उपयुक्त बाइंडिंग के साथ मैं शायद स्पष्ट कोड के बिना पूरा शो चला सकता हूं, लेकिन यह चालाक और स्मार्ट के बीच अंतर का एक अच्छा उदाहरण होगा - यह इतना अच्छा काम करता है कि जल्दी या बाद में मैं ' डी भूलें कि यह कैसे काम करता है (ठीक है, मैं स्वीकार करता हूं, मैंने यह किया और यह भूल गया कि यह कैसे काम करता है)।

+0

अन्य समाधान विफल होने के बाद से यह कोशिश कर रहा है ... स्टैंडबाय! :) भ्रमित करने वाला हिस्सा यह है कि मेरा mainpage.xaml एक पिवट पेज है .... – Jarrette

+0

यह सही समाधान नहीं था, लेकिन यह निकटतम था :) इस चिपचिपा मुद्दे को हल करने के लिए ऊपर देखें! – Jarrette

0

तो आपकी समस्या (मैं यह समझ के रूप में) है:

  • LOGIN.XAML -> LoggedInUser.XAML
  • ----> पलटवार बटन < ----
  • -> कौन सा तो आप रिटर्न वापस LOGIN.XAML
  • करने के लिए -> कौन तो आप रिटर्न सही LoggedInUser.XAML वापस करने के लिए ...

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

बस मेरे 2 सेंट।

2

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

+0

मैंने इस समाधान की कोशिश की और माइक्रोसॉफ्ट के माध्यम से अनुमोदन में विफल रहा। यही कारण है कि आप लॉगिन स्क्रीन से "वापस" नहीं दबा सकते हैं और ऐप से बाहर निकल सकते हैं .... चूंकि लॉगिन स्क्रीन पहली स्क्रीन है जिसे आपने ऐप खोलने के बाद मारा है अगर आप लॉग इन नहीं हैं .... – Jarrette

+0

वाह, यह picky है। –

0

यदि आप आम का उपयोग कर रहे हैं, mainpage.xaml पर आप यह कर सकते हैं। यह ढेर के login.xaml पॉप होगा। उम्मीद है की वो मदद करदे।

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
     { 
      PhoneApplicationFrame RootFrame = Application.Current.RootVisual as PhoneApplicationFrame; 

      if (RootFrame != null) 
      { 
       if (RootFrame.BackStack.Count() > 0) 
       { 
        RootFrame.RemoveBackEntry(); 
       } 
      } 

     } 
0

खैर मुझे लगता है कि समस्या यहाँ, जिसे प्रवेश स्क्रीन, वास्तव में एक पृष्ठ (मैं PhoneApplicationPage या किसी भी वर्ग है कि यह फैली मतलब) नहीं होना चाहिए है। मेरी राय में लॉगिन स्क्रीन किसी भी पेज की सिर्फ एक बाल खिड़कियां होनी चाहिए, जिसके लिए उपयोगकर्ता को कुछ लॉग इन करने की आवश्यकता होती है।

तो दृष्टिकोण यहाँ, एक उपयोगकर्ता नियंत्रण के रूप में एक लॉगिन स्क्रीन बनाने के लिए और एक पेज में लॉग इन करने की आवश्यकता है कि उपयोगकर्ता पर नियंत्रण पॉप-अप पर इसे जोड़ने के लिए किया जाएगा। इसके बाद किसी भी कार्रवाई पेज के या उससे पहले लोडेड घटना पर प्रमाणीकरण की आवश्यकता है कि , आप बस जांचें कि क्या उपयोगकर्ता लॉग इन है, यदि वह नहीं है, तो आप केवल दृश्य स्थिति बदलते हैं (लॉग इन के साथ पॉपअप खोलें, पाठ्यक्रम के ubercool एनीमेशन के साथ :)) और यह है। पॉपअप में उपयोगकर्ता लॉग बंद हो जाते हैं और आप पृष्ठ पर वापस आते हैं, रीडायरेक्ट या किसी अन्य हैक्स की आवश्यकता नहीं होती है।

पुनश्च: मैं तुम्हें और इस पोस्ट को पढ़ने के स्थानों की अवधारणा पर पतरस Torr की पोस्ट को पढ़ने के लिए सभी लोग यहां प्रोत्साहित करते हैं, >>http://blogs.msdn.com/b/ptorr/archive/2010/08/28/introducing-the-concept-of-places.aspx

0

मैं अभी तक अनुमोदन के लिए मेरे एप्लिकेशन सबमिट नहीं की है, लेकिन मेरा मानना ​​है कि करने के लिए कोई कारण नहीं है यह अब तक नेविगेशन नियमों और ऐप सबमिशन के साथ अनुभव की मेरी समझ के आधार पर पारित नहीं होगा।

मैं एक दृष्टिकोण पीटर Torr के समान के साथ चला गया: http://blogs.msdn.com/b/ptorr/archive/2010/08/28/redirecting-an-initial-navigation.aspx?wa=wsignin1.0

समस्या मैं था शुरू में किया गया है कि mainpage लिए लॉग इन पृष्ठ से काम नहीं कर रहा पुनर्निर्देशन किया गया था। यह आवश्यक है (ए) लॉगिन के बाद फिर से UriMapper को अद्यतन करना और (बी) लॉगिन से आने पर मेनपेज.एक्सएमएल की क्वेरी स्ट्रिंग में जोड़ना, ताकि उरी को बदलने के लिए ओएस ने इसे नेविगेट करने के लिए एक अलग पृष्ठ माना।

http://www.geoffhudik.com/tech/2012/2/19/windows-phone-login-navigation.html पर अधिक। मैं अपडेट करूंगा अगर किसी कारण से इसे अनुमोदित नहीं किया जाता है या कुछ और बेहतर दिखाई देता है।

0

मैंने इसे अपने प्रश्न here में हल किया।

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

सफलता पर, GoBack उस पृष्ठ पर आप से आए थे। यदि लॉगिन स्क्रीन पर बैक बटन दबाया जाता है, तो इसे BackKeyPressed हैंडलर में सुनें, बैक स्टैक साफ़ करें (वैकल्पिक: जब तक आप उस पृष्ठ को हिट न करें जिसे प्रमाणीकरण की आवश्यकता नहीं है) और ईवेंट को पारित करने दें। इसे आपके ऐप से बाहर निकलना चाहिए या कम से कम आपको वापस भेजना चाहिए जहां आपने शुरू किया था।

वास्तव में मोडल नहीं है, लेकिन यूएक्स के बारे में अपारदर्शी है।

+0

क्या क्रैश रिपोर्ट उत्पन्न नहीं करेगा? यह काफी शो होगा, अगर आपको हर बार एक रिपोर्ट मिल जाएगी, तो उपयोगकर्ता बैक बटन का उपयोग करके आपके ऐप से बाहर निकलता है। – Olter

+0

मुझे यकीन नहीं है ... कम से कम दस्तावेज़ किसी क्रैश रिपोर्ट के बारे में कुछ नहीं कहते हैं (http://msdn.microsoft.com/en-us/library/system.windows.application.unhandledexception(v=vs .95) .aspx)। मैं मानता हूं कि 'अनहैंडेड एक्सेप्शन' हैंडलर सिर्फ वैश्विक 'पकड़' ब्लॉक है। और अगर मैं अपना लॉगआउट बटन दबाता हूं, जो सीधे अपवाद फेंकता है, तो मुझे बिना किसी देरी के लॉगिन स्क्रीन पर रीडायरेक्ट किया जाता है। तो कम से कम UX-wise यह ठीक लगता है। –

+0

ठीक है, दस्तावेज़ यह कहते हैं: "ऐप प्रक्रिया में कोई भी अनचाहे अपवाद एक क्रैश डंप ट्रिगर करेगा।" [यहां] (http://msdn.microsoft.com/en-us/library/windowsphone/help/jj206725 (v = vs.105) .aspx)। आपके डेवलपर डैशबोर्ड पर तीन अनुभाग हैं: ऐप डाउनलोड, इन-ऐप खरीदारी और क्रैश गिनती। आपके द्वारा सुझाए गए समाधान में एक अनचाहे अपवाद उत्पन्न होगा, यही कारण है कि क्रैश गणना क्या है। समस्या यह है कि आप इसे निश्चित रूप से नहीं जानते, जब तक आप अपना ऐप सबमिट नहीं करेंगे। – Olter

0

आमेर गिल का जवाब देने के लिए एक और अधिक तार्किक विकल्प OnNavigatedFrom अपने लॉग इन पेज में ओवरराइड और मुख्य पृष्ठ पर जाकर पर backstack स्पष्ट करने के लिए होगा:

protected override void OnNavigatedFrom(NavigationEventArgs e) 
{ 
    while (NavigationService.BackStack.Any()) 
    { 
     NavigationService.RemoveBackEntry(); 
    } 
} 
0

खैर भले ही आप एक काम कर समाधान बनाया है, मुझे आपको एक और सुझाव दें :) मुझे मिला सबसे अच्छा तरीका UriMapper के साथ काम कर रहा था!

नहीं पहिया बदलने की, वहाँ एक अच्छा उदाहरण यहाँ Stackoverflow को प्रस्तुत है: How to Show a Page if Application is Launched for the First Time

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