2016-08-03 6 views
1

公開済みのXamarin.Formsアプリがあります。このアプリは、いくつかのOAuth認証プロバイダ(Google、Facebook、Microsoft、Yandex、Vkontakte、Mail.Ru、Odnoklassniki)を介して認証するようユーザーに提案します。 Facebook経由の認証は、次のように構築されているWindowsではWindowsストアApp(WebAuthenticationBroker.AuthenticateAsync)のFacebook認証(OAuth2)がデスクトップコンピュータで失敗する

string clientID = "<client ID from facebook app settings>"; 

string startUri = "https://m.facebook.com/dialog/oauth/?" + 
    "client_id=" + clientID + 
    "&scope=" + "email,public_profile" + 
    "&redirect_uri=" + "https://m.facebook.com/connect/login_success.html" + 
    "&state=" + Guid.NewGuid().ToString("N") + 
    "&response_type=" + "token"; 

WebAuthenticationBroker.AuthenticateAsync(
    WebAuthenticationOptions.None, 
    new Uri(startUri), 
    new Uri("https://m.facebook.com/connect/login_success.html")); 

同じ回路図が異なるURIには、他の認証プロバイダを使用して正常に動作しています。 Facebook認証はWindows電話では機能しますが、Windows 10およびWindows Vistaデスクトップコンピュータでは失敗します。障害シナリオ:

  1. WebAuthenticationBrokerウィンドウが表示されます。 The WebAuthenticationBroker windows appears

  2. フェイスブック認証ダイアログのコンテンツが数秒間表示されます。 The facebook authentication dialog content appears for a couple of seconds

  3. Facebookの認証ダイアログの内容が消え、次のテキストが代わりに表示されます:「。私たちは、あなたが今必要とするサービスに接続できないネットワーク接続を確認するか、後でもう一度これを試して」。手順2と私のアプリのコードの3どれもの間We can't connect to the service you need right now. Check your network connection or try this again later.

が実行されています。同じことが多くの異なるコンピュータで発生します。私はUriをm.facebook.comからwww.facebook.comに置き換えようとしましたが効果がありません。

System.AggregateException:1つの以上のエラーが発生し

Task<WebAuthenticationResult>

IsFaulted状態及び内部次の例外を持つWebAuthenticationBroker.AuthenticateAsync終了から返さ。 ---> のSystem.Exception:HRESULTからの例外:0x800C0503

---内部例外スタックトレースの終わり---

--->(内部例外#0)のSystem.Exception:例外からHRESULT:0x800C0503 < ---

詳細はどこですか?

答えて

0

私はFacebook SDKのサポートとMicrosoftのサポートを緊密に取り組んでいます。これは、同じ時間にあなた自身に心地よくしようとすると同時に、両側から同時に打たれるのが好きです。自分自身を台無しにして無駄に感じる、まだ満足している。

長い話の短い私は今だけのFacebook/Windowsデスクトップコンボに使用する回避策を持っている:

//We need to instruct the WebAuthenticationBroker to end the scenario 
//somehow without specifying the callbackUri parameter. This is called 
//`an implicit callback Uri scenario` in which WebAuthenticationBroker 
//is expecting to see this Uri for the end: 
string callbackUri = WebAuthenticationBroker.GetCurrentApplicationCallbackUri().AbsoluteUri; 

//So we need to instruct Facebook authentication to finally redirect to this Uri. 
string startUri = "https://m.facebook.com/dialog/oauth/?" + 
    "client_id=" + clientID + 
    "&scope=" + "email,public_profile" + 
    "&redirect_uri=" + callbackUri + 
    "&state=" + Guid.NewGuid().ToString("N") + 
    "&response_type=" + "token"; 

//The workaround is to go with the WebAuthenticationBroker.AuthenticateAsync 
//overload which does not accept the callbackUri parameter. 
WebAuthenticationBroker.AuthenticateAsync(
    WebAuthenticationOptions.None, 
    new Uri(startUri))); 

のFacebookやマイクロソフトのいずれもが、この周りを得ることに役立つことや任意の論理的な説明を提供することをしましたこのシナリオをWindowsデスクトップで使用する必要がある理由について説明します。 Windows Phone 8.1/10では、明示的なコールバックUriシナリオが完全に機能します。

私はFacebookの認証で受け入れられるために、このような暗黙のコールバックウリためには、あなたのアプリのためのFacebook loginパラメータのURIの設定をリダイレクト有効なのOAuthにこれらのURIを含める必要があることに言及しなければなりません。

  1. https://www.facebook.com/dialog/return/ms
  2. https://m.facebook.com/dialog/return/ms

... Facebookのことで、他のデザインの傑作。アー。

0

あなたのコードは次のようにする必要がありますので、startUri「表示=ポップアップ」にこのパラメータを追加します。

string startUri = "https://m.facebook.com/dialog/oauth/?" + 
"client_id=" + clientID + 
"&display=popup" + 
"&scope=" + "email,public_profile" + 
"&redirect_uri=" + "https://m.facebook.com/connect/login_success.html" + 
"&state=" + Guid.NewGuid().ToString("N") + 
"&response_type=" + "token"; 

表示パラメータのための他の可能な値は次のとおりです。非同期、IFRAME、ページ、ポップアップ、タッチ、WAP。

+0

私は 'display = popup'オプションを試しました。何も変えない –

関連する問題