6

Najnowsze FB logowanie API ma trzy parametryXamarin: Problem z najnowszym API FB

public unsafe virtual void LogInWithReadPermissions (string[] permissions, UIViewController fromViewController, [BlockProxy (typeof(Trampolines.NIDLoginManagerRequestTokenHandler))] LoginManagerRequestTokenHandler handler) 

używam MVVMCross. Na fb logowania Próbowałem stworzył instancję widzenia jestem w, i przekazać go jako parametr dla LogInWithReadPermissions()

ViewModel:

private async void DoFacebookSignIn() 
     { 
      try 
      {    
       await facebookService. Login(); 
       DoAutoLogin(); 
      } 
} 

SERVICE:

private readonly string[] permitions = new string[] { "email", "public_profile" };  
public async System.Threading.Tasks.Task LogIn() 
      { 
    LoginManager.LogInWithReadPermissionsAsync (permitions); 

       LoginManagerLoginResult result = await LogInWithReadPermissionsAsync(); 

       if (result.IsCancelled) 
       { 
        ServiceFactory.UserMessageService.ShowToast("Facebook login is canceled"); 
       } 
      } 

     private Task<LoginManagerLoginResult> LogInWithReadPermissionsAsync() 
      { 
       var tcs = new TaskCompletionSource<LoginManagerLoginResult>(); 
       LoginManager.LogInWithReadPermissions (permitions,null, (LoginManagerLoginResult result, NSError error) => 
       { 
        if(error.IsNotNull()) 
        { 
         tcs.SetException (new IosErrorException(error)); 
        } else 
        { 
         tcs.SetResult (result); 
        } 
       }); 

       return tcs.Task; 
      } 

Ale jego błąd, Czy muszę przekazywać informacje o widoku z Viewmodel, kiedy nazywam to func? Jak przekazać instancję widoku z modelu widoku? Czy ktoś może pomóc?

UPDATE

To braku w służbie:

func LogInWithReadPermissionsAsync() line3: (LoginManager.LogInWithReadPermissions...)

bez podania żadnego błędu. To po prostu upaść. Facebook API version: "Xamarin.Facebook.iOS" version = "4.13.1"

UPDATE Usunięto nieużywany kod.

+0

Powinieneś bardzo uważać na 'async void', jeśli nie są one używane do obsługi zdarzeń. Po drugie, powinieneś przesłać to, co dokładnie "zawiedzie" tutaj. Czy otrzymujesz wyjątek? Czy to po cichu zawiedzie? itd. Prosimy również o podanie dokładnego API FB, którego używasz, niezależnie od tego, czy jest to NuGet/Komponent/itd. –

+0

Zaktualizowałem moje pytanie z niezbędnymi informacjami. – TheDeveloper

+0

Załaduj 'mcve', aby pokazać, co się dzieje: http://stackoverflow.com/help/mcve Po drugie, czy sprawdziłeś logi urządzeń, aby uzyskać więcej danych wyjściowych? https://kb.xamarin.com/customer/portal/articles/1675684-where-can-i-find-my-version-information-and-logs#debug-logs-for-xamarin-apps –

Odpowiedz

1

Mam rozwiązanie.

Kod było w porządku, po prostu potrzebne do „Biała Facebooku serwery dla żądania sieciowe” dodając

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

If you're recompiling with iOS SDK 9.0, add the following to your application's plist if you're using a version of the SDK v4.5 or older: 

<key>LSApplicationQueriesSchemes</key> 
<array> 
    <string>fbapi</string> 
    <string>fbapi20130214</string> 
    <string>fbapi20130410</string> 
    <string>fbapi20130702</string> 
    <string>fbapi20131010</string> 
    <string>fbapi20131219</string>  
    <string>fbapi20140410</string> 
    <string>fbapi20140116</string> 
    <string>fbapi20150313</string> 
    <string>fbapi20150629</string> 
    <string>fbauth</string> 
    <string>fbauth2</string> 
    <string>fb-messenger-api20140430</string> 
</array> 
If you're using Facebook.MessengerShareKit from versions older than the v4.6 release, also add: 

<string>fb-messenger-platform-20150128</string> 
<string>fb-messenger-platform-20150218</string> 
<string>fb-messenger-platform-20150305</string> 
If you're using v4.6.0 of the SDK, you only need to add: 

<key>LSApplicationQueriesSchemes</key> 
<array> 
     <string>fbapi</string> 
     <string>fb-messenger-api</string> 
     <string>fbauth2</string> 
     <string>fbshareextension</string> 
</array> 

Jak wspomniano w Xamarin Facebooku iOS SDK here.

+0

Czy możesz mi powiedzieć, co robi FBSign w oryginalnym poście? Jak to uzyskać kontroler widoku :) – LamonteCristo

+0

@LamonteCristo, To był losowy kontroler viewcontroller, dzięki czemu mogłem przekazać w funkcji LogInWithReadPermissions(). Nie jest konieczne, zaktualizowałem kod. Możesz sprawdzić najnowszy kod. – TheDeveloper

Powiązane problemy