संपादित करें: नमूना परियोजना दर्शाता है कि दुर्घटना यहां पाया जा सकता: https://github.com/rringham/brokenazurexamforms - आप में अपने स्वयं के Azure अनुप्रयोग सेवा URL निर्धारित करने की आवश्यकता:Azure MobileServiceClient LoginAsync() के बाद Navigation.PushAsync क्रैश क्यों होता है?
- src/BrokenAzureForms/Droid/सेवा/उपयोगकर्ता/DroidUserService .cs
- src/BrokenAzureForms/iOS/सेवा/उपयोगकर्ता/IosUserService.cs
मैं Xamarin फार्म के एंड्रॉयड पर Navigation.PushAsync()
दुर्घटना दिखाई दे रही है जब मैं के बाद यह उपयोग करने के लिए Azure MobileServiceClient
को प्रमाणित करने का प्रयास। यह क्रैश एंड्रॉइड के लिए अलग है - यह आईओएस पर नहीं होता है।
यहाँ सेटअप है - मैं अपने मुख्य अनुप्रयोग पृष्ठ के रूप में एक बुनियादी NavigationPage
मिल गया है:
MainPage = new NavigationPage(new LoginPage());
पर मेरी LoginPage
, मैं एक DependencyService
-injected वर्ग कि मेरे Android परियोजना में प्रमाणीकरण प्रदर्शन का उपयोग करके प्रमाणित:
private async void OnMicrosoftAccountTapped(object sender, EventArgs args)
{
IUserService userService = DependencyService.Get<IUserService>();
bool authenticated = await userService.LoginWithAzureAD();
if (authenticated)
{
await Navigation.PushAsync(new HomePage(), false);
}
}
IUserService
की मेरे Android कार्यान्वयन में, मैं यह कर (काफी वास्तव में क्या Azure/Xamarin फॉर्म्स ट्यूटोरियल दिखाने):
public async Task<bool> LoginWithAzureAD()
{
try
{
_user = await _client.LoginAsync(Xamarin.Forms.Forms.Context, MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory);
}
catch (Exception)
{
return false;
}
return true;
}
यहां चीजें अलग-अलग होती हैं। जब LoginWithAzureAD()
किया जाता है, तो नियंत्रण OnMicrosoftAccountTapped()
में फिर से शुरू होता है; हम तो Navigation.PushAsync()
, और उछाल कॉल करने के लिए जाना - पर जाने के लिए ऐप्लिकेशन क्रैश, बहुत कम विस्तार के साथ:
कि Azure MobileServiceClient
कुछ सुंदर Xamarin.Forms.Forms.Context
साथ फंकी कर रही है आंतरिक रूप से, क्योंकि अगर है मैं await userService.LoginWithAzureAD()
पर कॉल को हटाता हूं, Navigation.PushAsync()
पर कॉल कोई समस्या नहीं है। MobileServiceClient में कुछ तो टूटा हुआ है, या Xamarin फॉर्म में कुछ तोड़ रहा है।
कोई भी इस तरह कुछ देखता है?
MainActivity.cs में:
Context _context;
public void Initialize(Context context)
{
this._context = context;
}
public async Task LoginAsync(MobileServiceClient client)
{
await client.LoginAsync(this._context, MobileServiceAuthenticationProvider.whatever);
}
मैं:
// Initialize for Azure Mobile Apps
Microsoft.WindowsAzure.MobileServices.CurrentPlatform.Init();
// Initialize for Xamarin Forms
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
// Initialize for Login Provider
var lp = (DroidLoginProvider)DependencyService.Get<ILoginProvider>();
lp.Initialize(this);
फिर, मेरी DroidLoginProvider कक्षा में, मैं तो निम्न कार्य करें
हाय @Rob Ringham, तो आप इस में सॉर्ट करने के लिए प्रबंधन किया समाप्त? यह वही समस्या है जिसे मैं इस समय सामना कर रहा हूं और इसे उसी कॉल पर दबा दिया था जैसा आपने किया था। धन्यवाद। –