2015-09-23 15 views
5

Właśnie zaktualizowałem kod XCode do wersji 7.0 (7A220) i to przenosi moje symulatory do iOS9.Uwierzytelnianie Xamarin.Auth iOS9 SSL ERROR

Od tego momentu nie mogę pomyślnie wykonać żadnego połączenia OAUTH z symulatorów. Próbowałem każdego modelu, od mojej aplikacji do "przykładowej aplikacji Xamarin.Auth".

Odpowiedź jest zawsze taka sama:

„Błąd uwierzytelniania

Błąd SSL wystąpiła i bezpieczne połączenie z serwerem nie można wykonać”

Exception I get

Kodeks jest STANDARDOWE, zmieniłem tylko mój identyfikator AppID. Ten sam kod działa na wersji Androida tej samej aplikacji!

var auth = new OAuth2Authenticator (
      clientId: "my app id", 
      scope: "", 
      authorizeUrl: new Uri ("https://m.facebook.com/dialog/oauth/"), 
      redirectUrl: new Uri ("http://www.facebook.com/connect/login_success.html")); 

     auth.AllowCancel = allowCancel; 

     // If authorization succeeds or is canceled, .Completed will be fired. 
     auth.Completed += (s, e) => 
     { 
      // We presented the UI, so it's up to us to dismiss it. 
      dialog.DismissViewController (true, null); 

      if (!e.IsAuthenticated) { 
       facebookStatus.Caption = "Not authorized"; 
       dialog.ReloadData(); 
       return; 
      } 

      // Now that we're logged in, make a OAuth2 request to get the user's info. 
      var request = new OAuth2Request ("GET", new Uri ("https://graph.facebook.com/me"), null, e.Account); 
      request.GetResponseAsync().ContinueWith (t => { 
       if (t.IsFaulted) 
        facebookStatus.Caption = "Error: " + t.Exception.InnerException.Message; 
       else if (t.IsCanceled) 
        facebookStatus.Caption = "Canceled"; 
       else 
       { 
        var obj = JsonValue.Parse (t.Result.GetResponseText()); 
        facebookStatus.Caption = "Logged in as " + obj["name"]; 
       } 

       dialog.ReloadData(); 
      }, uiScheduler); 
     }; 

     UIViewController vc = auth.GetUI(); 
     dialog.PresentViewController (vc, true, null); 

IOS9 Simulator może surfować po internecie, więc nie jest to "problem łączność". Próbowałem również z Facebook SDK, ten sam błąd. Czy to może być problem z certyfikatem?

Dzięki

Odpowiedz

8

Aby rozwiązać ten problem, wystarczy dodać do pliku Info.plist te linie:

<key>NSAppTransportSecurity</key> 
    <dict> 
<key>NSAllowsArbitraryLoads</key> 
<true/> 
<key>NSExceptionDomains</key> 
<dict> 
    <key>facebook.com</key> 
    <dict> 
    <key>NSIncludesSubdomains</key> 
    <true/> 
    <key>NSExceptionRequiresForwardSecrecy</key> 
    <false/> 
    </dict> 
    <key>fbcdn.net</key> 
    <dict> 
    <key>NSIncludesSubdomains</key> 
    <true/> 
    <key>NSExceptionRequiresForwardSecrecy</key> 
    <false/> 
    </dict> 
    <key>akamaihd.net</key> 
    <dict> 
    <key>NSIncludesSubdomains</key> 
    <true/> 
    <key>NSExceptionRequiresForwardSecrecy</key> 
    <false/> 
    </dict> 
</dict> 

Jeśli nie dbają o dodatkowych reguł dla domen, możesz po prostu dodać:

<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict> 

UWAGA: należy wyczyścić i zrestrukturyzować projekt, aby był gotowy do pracy z nowymi ustawieniami!

+1

Twoje pytanie to dar niebios !. Zajmuję się tym problemem przez cały dzień. W jakim programie edytowałeś swój plik info.plist? – naffie

+0

Użyłem TextWrangler! –

+2

Dziękuję kolego to działa –