2015.10.03 #6 JXUG Conference
Xamarin.Forms も Facebook の graph API  も、頑張りすぎないのが吉。
シルバーウィークにXamarin.Formsで
Facebookアプリを作成した
⾃自⼰己紹介
¡  識識別⼦子        SIN/札幌ワークス
¡  Twitter  @furuya02
¡  スタッフ  CLR/H
¡  ブログ        SIN@SAPPOROWORKSの覚書
¡  Microsoft MVP for Visual C# (2013/1〜~)
¡  フリーソフト    BlackJumboDog
¡  BuildInsider Xamarin逆引きTips
アプリ紹介
アプリ紹介
Xamarin.Formsで約1週間で作成
graph API を利利⽤用して、各種情報を視覚化
ここんとこ
重要
Facebookのソーシャルグラフ
からデータを取得
・たくさんの「いいね」を頂いた投稿
・たくさん「いいね」くださった⽅方々
・最近、何に「いいね」を押したか
・何時頃、投稿しているのか
・何⽉月にたくさんとう投稿したか
  など・・・
アプリ紹介
先読み⾃自分新聞
最もたくさんの「いいね」を獲得した記事の紹介
アプリ紹介
たくさんの「いいね」をありがとう
アプリ紹介
最近、何書いたっけ
酔っ払って、何か、変なこと書いてない?
アプリ紹介
脊髄反応ページ
どんなリンクを紹介したか。
すいません、私の場合は、⾃自分のブログばっかり・・・
アプリ紹介
いつ寝るの・依存⽉月間
投稿した、時間、⽇日付を
集計してみました。
デモ
Facebookアプリ開発事情
Facebookアプリ開発事情
Facebookで提供されるSDKには、C#⽤用はない・・・
Facebookアプリ開発事情
C#でFacebook書くなら、これ⼀一択かも
Facebookアプリ開発事情
Profile78では、使えないです・・・
PM> Install-Package Facebook
Facebookアプリ開発事情
Forms⽤用のコンポーネントは、現時点では公開されていません
Search>Facebook
Android
iOS
Facebookアプリ開発事情
Forms⽤用もあるじゃないか︎    \(⌒∀⌒*)/ナンデ  ハヤク  イワナイノ☆♪    
すてま
Facebookアプリ開発事情
Xamarin.FormsでFacebookアプリ書くなら、現時点ではこれ⼀一択
OAuth認証
Facebookアプリ
OAuth認証
1.  OauthのURLをリクエストすると
https://m.facebook.com/dialog/oauth?  [AppID]&&scope=[Scope]…
2.  Loginのページへリダイレクトされる
https://m.facebook.com/login.php?  [AppID]&&scope=[Scope]…
3.  ID・パスワードで認証が成功するとアクセス許可を求める
https://m.facebook.com/v2.0/dialog/oauth?  [AppID]&&scope=[Scope]…
4.  許可された場合は、リダイレクト(最終)ページへジャンプし
  パラメータとして「アクセストークン」を送ってくる
https://www.facebook.com/connect/login_̲success.html#access_̲token=xxxx
Facebookアプリ
Xamarin.FormsのWebViewでNavigatedイベントを処理理する
//Uri遷移のイベントを処理理する
webView.Navigated  +=  (s,  e)  =>  {
if(  最終ページか?  ){
                   if(  アクセストークが取得できたか?  )
                                     //  認証成功
           else
                                                      //  認証失敗
}  
      //認証継続中
}
いつの間にか増えてた?
Facebookアプリ
Cookieが有効だと、ログインがスルーしてしまう・・(ログアウトできない)
public class ExWebView : WebView {
public ExWebView(bool deleteCookie) {
DeleteCookie = deleteCookie;
}
public bool DeleteCookie { get; private set; }
}
拡張WebViewで
クッキー削除のプロパティを追加
Facebookアプリ
iOSでは、NSHttpCookieStorage.SharedStorage
public class ExWebViewRenderer : WebViewRenderer {
    protected override void OnElementChanged(VisualElementChangedEventArgs e) {
base.OnElementChanged(e);
//Xamarin.Formのコントロール(ExWebView)
var exWebView = e.NewElement as ExWebView;
if (exWebView.DeleteCookie) {  //クッキー(ログイン情報)の削除
                                var storage = NSHttpCookieStorage.SharedStorage;
  foreach (var cookie in storage.Cookies) {
      storage.DeleteCookie(cookie);
  }
}
プラットフォームごとクッキー削除
を機能させる
Facebookアプリ
Androidでは、CookieManager.Instance.RemoveAllCookie
public class ExWebViewRenderer : WebViewRenderer {
protected override void
            OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e) {
      base.OnElementChanged(e);
      //Xamarin.Formのコントロール(ExWebView)
      var exWebView = e.NewElement as ExWebView;
            if (exWebView.DeleteCookie) {  //クッキー(ログイン情報)の削除
                CookieManager.Instance.RemoveAllCookie();
     }
}
}
プラットフォームごとクッキー削除
を機能させる
Facebookアプリ
WindowsPhoneでは、JavaScriptも有効に・・・
public class ExWebViewRenderer : WebViewRenderer {
protected override void OnElementChanged(ElementChangedEventArgs<WebView> e) {
base.OnElementChanged(e);
  //Xamarin.Formのコントロール(ExWebView)
  var exWebView = e.NewElement as ExWebView;
  //ネイティブコントロール(Microsoft.Phone.Controls.WebBrowser)
  var webBrowser = Control;
  webBrowser.IsScriptEnabled = true;   
        if (exWebView.DeleteCookie) {  //クッキー(ログイン情報)の削除    
    webBrowser.ClearCookiesAsync();
  }
}
}
プラットフォームごとクッキー削除
を機能させる
デフォルトでOFFになっている
JavaScriptをONにしないと認証で
きない
Facebookアプリ
CookieWebViewを使えば、レンダラーなしで⾏行行けるカモ
画⾯面遷移
画⾯面遷移
class App {
MainPage =
NavigationPage(new Page())
画⾯面遷移
メインはNavigationPage
Navigation.PushAsync(new Page)
画⾯面遷移
PushAsyncで遷移・⽮矢印でメインへ戻る
Navigation.PushModalAsync(new Page())
Navigation.PopModalAsync()
画⾯面遷移
認証画⾯面はモーダルウインド
ちょいハマり
画⾯面真っ⽩白
ATS (App  Transport  Security)
慌てないで、取り敢えず8.xで
試すのが吉
ATSへの対策(info.plistなど・・)
<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        <key>NSExceptionDomains</key>
        <dict>
            <key>facebook.com</key>
NuGet  パッケージの復復元の有効化・が無い
git  clone  したら参照エラーでコンパイルできない
VS2015にしたから・・・・?
更更新プリグラムで⼀一応復復活
Nuget  Package  Manager  for  Visual  Studio  2015
微妙に「英語」表記
最新のNuget
packagesフォルダや.nugetフォルダが無くても再構築される
ので .gitignoreに   [Pp]ackages/  を追加しました
https://github.com/furuya02/FbSample/
FacebookもXamarin.Formsも限界まで挑戦しないで・・・
頑張りすぎないのが吉。
「ネイティブのFacebookアプリが1週間で作成できる!」
ご清聴ありがとうございました
札幌ワークス
http://www.sapporoworks.ne.jp/spw

シルバーウィークにfacebookアプリを作成した