質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.78%

  • Xamarin

    254questions

    Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Xamarin Formsで、facebook認証ができない。

受付中

回答 1

投稿 2017/08/02 13:09

  • 評価
  • クリップ 0
  • VIEW 118

AyakoNan

score 0

下記の通りの問題が起きて、Xamarin FormでFacebook認証がうまくいきません。
どなたか対処法をご存知の方、ご教授願います。
よろしくお願い致します。

■やろうとしたこと
Xamarin Formsで、Faccebook認証するアプリを作成しています。
下記MSのチュートリアルに基づいて作成しています。
https://docs.microsoft.com/ja-jp/azure/app-service-mobile/app-service-mobile-xamarin-forms-get-started-users

■問題点
DroidプロジェクトのMainActivityクラス、public async Task<bool> Authenticate()メソッドの下記の部分でエラーが出ます。

・ソース
// Sign in with Facebook login using a server-managed flow.
user = await TodoItemManager.DefaultManager.CurrentClient.LoginAsync(this,
MobileServiceAuthenticationProvider.Facebook);

・エラーメッセージ
エラー一覧をみると、下記のメッセージが出てきました。
エラー CS1503 引数 1: は 'testproject.Droid.MainActivity' から 'Microsoft.WindowsAzure.MobileServices.MobileServiceAuthenticationProvider' へ変換することはできません。 testproject.Droid F:\testproject_Xamarin_Forms (1)\Droid\MainActivity.cs 58 アクティブ
エラー CS1503 引数 2: は 'Microsoft.WindowsAzure.MobileServices.MobileServiceAuthenticationProvider' から 'Newtonsoft.Json.Linq.JObject' へ変換することはできません。 testproject.Droid F:\testproject_Xamarin_Forms (1)\Droid\MainActivity.cs 59 アクティブ

■調査内容
TodoItemManagerクラスのMobileServiceClientがおかしいのだろうと思って、調べてみました。

「using Microsoft.WindowsAzure.MobileServices;」はしていました。
ソースは、下記の通りです。

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.WindowsAzure.MobileServices;

if OFFLINE_SYNC_ENABLED

using Microsoft.WindowsAzure.MobileServices.SQLiteStore;
using Microsoft.WindowsAzure.MobileServices.Sync;

endif

namespace testproject
{
public partial class TodoItemManager
{
static TodoItemManager defaultInstance = new TodoItemManager();
MobileServiceClient client;

if OFFLINE_SYNC_ENABLED

IMobileServiceSyncTable<TodoItem> todoTable;

else

IMobileServiceTable<TodoItem> todoTable;

endif

const string offlineDbPath = @"localstore.db";

private TodoItemManager()
{
this.client = new MobileServiceClient(Constants.ApplicationURL);

if OFFLINE_SYNC_ENABLED

var store = new MobileServiceSQLiteStore(offlineDbPath);
store.DefineTable<TodoItem>();

//Initializes the SyncContext using the default IMobileServiceSyncHandler.
this.client.SyncContext.InitializeAsync(store);

this.todoTable = client.GetSyncTable<TodoItem>();

else

this.todoTable = client.GetTable<TodoItem>();

endif

}

public static TodoItemManager DefaultManager
{
get
{
return defaultInstance;
}
private set
{
defaultInstance = value;
}
}

public MobileServiceClient CurrentClient
{
get { return client; }
}

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

+1

LoginAsync() は Azure Mobile Apps .NET client SDK のバージョン 4 で変更があったようです。ドキュメントの Xamarin.Forms のページは古いままですが、 Xamarin.Android の方 は更新されています。見比べながら進めてみてください。手を入れなければいけないのはこのあたりではないでしょうか。

  • Azure 側の [認証/承認] の [許可される外部リダイレクト URL]
  • LoginAsync() の第3引数に URL スキーム
  • AndroidManifest.xml

追記です。その後、私の方でも挑戦しまして、 'you are now signed-in as ...' というメッセージが表示されるところまで行けました。

それはそうと、 英語版のドキュメント が更新されたようです。


再び追記です。 日本語版 も更新されました。


三度目の追記です。Visual Studio 2017 15.3 で再度ビルドしてみると、同様のエラー (NU1202) となってしまいました。8/16時点でどのように突破したのか思い出せず、エミュレーターに残る APK が動くだけです。面目ないです。

さて、エラーの内容を見る限り、 Microsoft.Azure.Moblie.Client と Xamarin.Forms とが両立するフレームワークは無いように思えます。考えられる対応は、 Microsoft.Azure.Mobile.Client を v3 に下げるか、 Xamarin.Forms を .NETStandard に対応させるかですが、ここまでの話の流れとしては後者で行きたいところです。

Xamarin.Forms を .NETStandard に対応させるには、 NuGet で Xamarin.Forms のプレリリース版をインストールします。詳細は Xamarin 公式の次の記事を参照してください。

Xamarin.Forms 2.4.0.266-pre1 を試したところ、動作しました。

投稿 2017/08/05 13:37

編集 2017/08/20 13:35

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

  • 2017/08/05 21:05

    Xamarin.Androidの公式マニュアルを参考にしてXamarin Form修正したのですが、うまくいきませんでした。
    Xamarin Formではなく、Xamarin.Androidで試してみたのですが、こちらではうまくいきました。
    ですので、公式マニュアルが古いという可能性が高いです。
    もう少し調べてみます。

    キャンセル

  • 2017/08/18 16:58

    ご返信ありがとうございます。挑戦して下さったのですね。
    日本語版を参考にして試してみたのですが、2017だとうまくいかないですね。
    「エラー NU1202 パッケージ Xamarin.Forms 2.3.4.247 は netstandard1.4 (.NETStandard,Version=v1.4) と互換性がありません。」がでます。
    2015で試している最中です。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

91.78%

関連した質問

同じタグがついた質問を見る

  • Xamarin

    254questions

    Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

閲覧数の多いXamarinの質問