狠狠撸

狠狠撸Share a Scribd company logo
AppCenter
?azuyukiMiyake
SatoruFujimori
GlobalDevOpsBootcamp2019@Tokyo
1
AboutMe
三宅和之@kazuyukimiyake
株式会社ゼンアーキテクツCTO,MicrosoftMVP
Vue.js日本ユーザーグループコアスタッフ,typescript?jp立ち上げスタッフ
PaaSがかりの部屋(Blog):https://k?miyake.github.io/blog/
藤森智@masatoru
株式会社ケイ?ジェイ?システムズ代表
Azure/Xamarinの開発、ほぼC#な毎日
おでんはじめました(Blog):http://masatoru.hatenadiary.jp/
最近ヨガにはまり中 2
モバイル開発の何が大変か
ビルド、配信を毎回手動でやるの?
配布したアプリのユーザー数は?
配布したアプリは動いてる?
ログイン画面にFacebookログイン追加して
認証したユーザーでデータベースの表示わけて
モバイルはプッシュ通知当たり前だよね?
#バックエンドの友達がいない
3
AppCenterって何
旧名VisualStudioMobileCenter
アプリのビルドや配信を継続的におこなうためのサービス(CI/CD)
Data/Authが追加された
Android,iOS,Xamarin,macOS,UWP,ReactNative等をサポート
AzureDevOpsとの違い
VisualStudioAppCenterOverView
WhatisAzureDevOps?
4
AppCenter機能一覧
5
OS別対応表
iOS Android Xamarin UWP macOS RN Cordova Unity
Build o o o o o o x x
Test o o o x x x o o
Distribute
Diagnostics
Analytics
Push
o o o o o o o o
Auth
Data o o o x x x x x
6
AzureDevOpsとの連携
以下の機能はAzureDevOpsのビルドタスクとして連携可能
Distribute
Test
7
AppCenterAPI
API(OpenAPI)が公開されている
8
1.Build
自動ビルド
GithHub,DevOps,BitBucketからブランチを選択
API?eyなどのセキュア情報はEnvironmentsVariablesを使う
例)プッシュ通知のgoogle?services.jsonはGitに含まない
gitupdate?index??assume?unchanged./google?services.json
ステータスバッジ(ビルド結果をURLで取得可能)
buildbuild succeededsucceeded
1か月240分のビルドまで無料
9
Demo:Build
AppCenterBuild
Xamain.Androidアプリをビルド
10
EnvironmentsVariablesの使い方
1.EnvironmentsVariablesで変数を設定する
11
2.シェル( appcenter-pre-build.sh )で変数を置き換える
#!/usr/bin/env bash
GOOGLE_JSON_FILE=$APPCENTER_SOURCE_DIRECTORY/TodoDataSync/TodoDataSync.Android/google-services.json
echo "PATH=" $GOOGLE_JSON_FILE
if [ -e "$GOOGLE_JSON_FILE" ]
then
echo "Updating Google Json"
echo "$GOOGLE_JSON" > $GOOGLE_JSON_FILE
sed -i -e 's/"/'"'/g' $GOOGLE_JSON_FILE
echo "File content:"
cat $GOOGLE_JSON_FILE
fi
3.Gitでプッシュする
4.AppCenterにアイコンが着く
5.ビルド時に置き換えが実行される
12
Buildの嬉しいところ
iOSアプリのビルドにMac実機が不要
モバイルアプリ環境の構築が不要
13
2.Distribute
アプリの配信
Collaboratorsへのメール配信
Storeへの配信
AppleAppStore
GooglePlayStore
MicrosoftIntune
AppCenterTaskを使ってAzureDevOpsPipelinesへ追加可能
14
Demo:Distribute
AppCenterDistribute
Collaboratorsへのメール配信
15
モニタリング
3.Diagnostics
クラッシュレポート
例外処理のログ出力
4.Analytics
アプリの使用状況を分析
ユーザー数、デバイス、国、言語など
Azureとの連携
ApplicationInsightsへの接続も可能
AzureStorageにログが保存されている(デフォルトは90日間) 16
DiagnosticsとAnalyticsの設定
try
{
var user = await Auth.SignInAsync();
// Analytics への送信
Analytics.TrackEvent("OnLogin", new Dictionary<string, string>
{
["User"] = user.AccountId.Substring(0, 10),
});
await DisplayAlert("User", $"{user.AccountId.Substring(0, user.AccountId.Length/2)}", "Close");
await UpdateList();
}
catch (Exception ex)
{
// Diagnostics への送信
Crashes.TrackError(ex);
await DisplayAlert("Error", ex.Message, "Close");
}
17
DiagnosticsとAnalyticsのモニタリング
18
5.Test
UITest
旧名XamarinTestCloud
実機テスト,スクリーンショット,ログ,
各種TestFrameworkに対応
Appium,Espresso,XamarinUITest
対応デバイス
AzureDevOpsのパイプラインに追加可能
19
6.Push
特定のデバイスやAudience(アプリのバージョンやAPIのバージョン)へのプッシュ通
知
CustomData(?eyValue形式)のプッシュ通知
特定のユーザーへのプッシュ通知(Authとの組み合わせ)
簡単に構築可能
APIでプッシュ通知を送信する
20
プッシュ環境は簡単に構築できる
Xamarin.Forms(Android)の場合
1.AppCenterでアプリケーションを作成
2.Xamarin.Formsプロジェクトに Microsoft.AppCenter.Push パッケージを追加
3.Xamarin.Formsの App.cs にAppCenter用のコードをコピペ
4.Xamarin.FormsのAndroidプロジェクトの AndroidManifest.xml にコピペ
5.Firebaseでプロジェクトを作成
6.FirebaseCloudMessaging(FCM)のサーバーキーをAppCenterにコピペ
7.FCMから google-service.json をダウンロードしてAndroidプロジェクトに追加
21
Xamarin.Formsのコード
// App.cs
using Microsoft.AppCenter.Push;
...
protected override async void OnStart()
{
if (!AppCenter.Configured)
{
Push.PushNotificationReceived += async (sender, e) =>
{
await this.MainPage.DisplayAlert(e.Title, e.Message, "プッシュを受信した");
}
}
AppCenter.Start($"android=<App Center Android Key>;" +
$"ios=<App Center iOS Key>",
typeof(Push));
}
22
Demo:Push
AzureFunctionからプッシュ通知
AzureFunctionsからAppCenterバインディングが使えるように!
しばやん雑記:AzureFunctions向けにAppCenterPushを簡単に扱える拡張を作った
23
7.Auth
iOS,Android,Xamarinのみ
AzureADB2Cテナントを使った認証機能
AppCenterAuthを使うメリット
アプリに認証機能を追加できる
ユーザーごとのViewの切り替え
ユーザーを特定してPushを送信
MS,Twitter,FacbookなどのIDプロバイダーを追加可能
access_token取得は次のバージョンで対応予定
1か月で50,000人まで無料
24
SignIn
using Microsoft.AppCenter.Auth;
...
async void OnLogin(object sender, EventArgs e)
{
try
{
user = await Auth.SignInAsync(); //これだけ!!
}
catch (Exception e)
{
// Do something with sign-in failure.
}
}
Xamarin.Formsの場合、記述する場所は App.OnStart() でも Page.OnAppearing()
でもO?(試した限りでは)
25
8.Data
CosmosDBとデバイスを接続
PublicとPrivate(User)の2種類をサポート
AppCenterからCosmosDBを作成(もちろん事前に作成済みを選択も可能)
Authを組み合わせることでユーザー別の表示を簡単に組み込むことができる
オフライン機能は未サポート
Wedon'tcurrentlysupportofflinepersistancewhenlistingdocuments.
UnderstandingCosmosDB
CosmosDBSQLAPIのみサポート
26
Upsert
public async Task UpsertAsync(TodoItem item)
{
if ( Guid.Empty==item.Id)
{
// 追加
item.Id = Guid.NewGuid();
await Data.CreateAsync(item.Id.ToString(), item,
DefaultPartitions.UserDocuments);
}
else
{
// 更新
await Data.ReplaceAsync(item.Id.ToString(), item,
DefaultPartitions.UserDocuments);
}
}
DefaultPartitions.UserDocuments は認証されている場合に使用可能
27
どんなデータが作られるか
28
Others
WebHooks
Teams,GitHubへ通知
チャットサポート
29
まとめ
Build/DistributeでCI/CDをすぐ始められる
Testで実機でのテストができる
Analytics/Diagnosticsでアプリの使用状況がわかる
Authで認証機能を追加できる
DataとAuthでユーザーごとのViewを作成できる
Pushでプッシュ通知機能を追加できる
#バックエンドの友達がいなくても大丈夫
30
ご清聴ありがとうございました!
ThanksForTFSUG
31

More Related Content

AppCenter