Google I/O報告会に2つ参加して印象に残ったところメモ

Google I/O本体に行きたかったのですが、残念ながら行くことができなかったので、それぞれ報告会に出てメモしてみました。
**印象に残ったところを太字にしておきますので、流し読みにどうぞ**
自分はなんとなくGoogle I/Oの各発表内容は知っていて、詳しくは知らないという状態で、詳細について驚いたところや印象に残ったことが結構あったので、その部分を太字にします。


--- 
# Fablicで行われた Google I/O 2016情報共有会
http://fablic.connpass.com/event/32434/


## Google I/O 基調講演おさらい
https://speakerdeck.com/nakamuuu/o-ji-diao-jiang-yan-osarai

Google I/O 2014やGoogle I/O 2015では新しいAndroidバージョンだったが3年ぶりに新バージョン発表がなかった。

Google Assistant
新しい対話型アシスタントロジック
前後の文脈を理解したアシスタント(文脈の理解はSiriなどだとないらしい)

Google Home 音声アシスタント機能 Chromecastのように音楽も再生できる スマートホーム制御機能
Allo メッセージアプリ。返答をサジェストしてくれる。
Duo 通話に出る前に先に相手の顔が見ることができる。

Android N Preview3
コードネームをユーザーから募集している
DayDream
 VR体験を提供するプラットフォーム
Nexus6Pでテストできる
**Daydreamは基本的に既存の端末に対応されることはない。新しい端末のみ**
サードパーティ製のアプリがリリース予定

Android Wear2.0
初のメジャーアップデート
→スタンドアロンアプリの動作が可能
→ **スタンドアロンとはData Layer APIを利用せず、直接ネットワークへのアクセスが可能（UrlConnectionやRetrofitなどが普通に使える）**
→できることが増え、開発がかんたんになった
→UI周り Complications API など

Android Studio
後ほど別のセッションで説明

Firebase
Firebase Analyticsなどが追加され、無料で利用できる。
GCM、AppIndexing、AdWords、AdMobなどはFirebaseへ統合

Android Instant Apps
インストールすることなく、アプリの一部の機能を利用できる。
Android 4.1から利用できる。

**Google Assistantを軸としたプロダクトに力が入っている。**

## Android Studio 2.2 and Beyond

https://speakerdeck.com/androhi/firebase-analytics-shi-yong-gan

What’s New In Android Toolsというセッションがあった。
内容はDesignとDevelopとBuildとTestというところで4ジャンルあった。

### Design

新しいLayout EditorによりUIを作りやすくなった。

Blueprintという新しい表示ができる: Viewの関係がわかりやすくなる
表示例→![image](https://qiita-image-store.s3.amazonaws.com/0/27388/caeb237b-23a8-cdb1-9735-07fb75f3bf1e.png)

UI上のViewのプロパティ一覧がよく使うものだけでてくるようになったので、実用的になった。

ConstraintLayoutが追加された。

**Layout InspectorがAndroid Studioに統合された**
Logcatの横にあるボタンで、Viewのヒエラルキーを取ってくる
便利そう
**いままでAndroid Device Monitorをわざわざ立ち上げてレイアウトの構造を見ていたのが立ち上げなくても良くなった**

### Develop
Firebase Plugin
ボタンを押すだけでfirebaseのプロジェクトが作れる

Code Sample Browser
→コードの要素で右クリック`Find Sample Code`してサンプルコードが見れる

Support AnnotationsやLintの強化
**Infer AnnotationでAnnotationつけられそうなところをつけてくれる**
Nullが入ってきたら警告を出す@NonNullなどを自動でつけられる

### Build 
ビルドの高速化
Jack Annotation Processor Support
→aptじゃなくてannotationProcesserって書く
CMake とNDK-BuildがGradleと連携

Merged Maifest Viewer
**マージされたマニフェストファイルが見れる(パーミッションがライブラリで入ってしまったりするのが防げたりするかも)**

Project Structure View(experimental)
**Use new Project Structure Dialogにチェックを入れるとdependenciesがみれて、依存関係が見れる**
![image](https://qiita-image-store.s3.amazonaws.com/0/27388/a1a892f3-2f52-8db7-a8d7-96d3985382e9.png)
アップデートがあるライブラリをアップデートできる

### Test
TestRecorder
エミュレーター上で動かすと勝手にテストを書いてくれる

apk Analyzer
**プレイストア上で出るapkサイズがDownload Sizeで表示される**
パッケージごとのメソッド数が出る
Refactor 
**→Remove Unused Resourceで使っていないリソースを消せる + 何が消されるのかPreviewもできる**

### 予想
いままでは基本的な機能を行っていた。
最近は開発プロセスの高速化に力を入れており、自動生成ツールがいろいろ来るのはないか。

## The Art of Constraint Layout

自由度が高いRelativeLayout

**既存のレイアウトからConvertできる**
AnySizeなどの大きさの制約を指定したり、大きさの割合をUI上で指定する。

## Firebase Analyticsの使用感
https://speakerdeck.com/androhi/firebase-analytics-shi-yong-gan

### セットアップ
firebase-coreをdependenciesに書く。
**build.gradleの最後にapply plugin: ‘’”を書くひつようがある**

Webのコンソール画面でパッケージ名を設定するとjsonファイルをダウンロードできるので、プロジェクトのappディレクトリ以下に配置する
MainActivityのonCreateの最後にかくだけで自動計測
Firebase Overviewが分かりやすい
https://www.youtube.com/watch?v=tb2GZ3Bh4p8

**とにかく導入がかんたん**
入れたら勝手にとってくれる


## Android Wear 2.0
新しいUI　→ Launcherが新しくなった
スタンドアロン → DataLayer APIを利用しなくてもHTTP通信ができたりする
Google Fit 機能拡張
Java 8

新しい入力方法
スライドする感じで入力できる
使ってみると意外と使える

マテリアルデザイン
Material Design for Wearableで整備された

コンプリケーションAPI
**Data Providerからいくつかの情報をかんたんに取得して表示できるようになった(such as battery level, weather, or step-count data)**

Notificationがマテリアルデザイン化 新しい通知のスタイルも



## Nearby関係
Physical Webというアプリをインストールするとビーコンで通知を表示できる。
Nearby Notifications
まだPreview
Advertise an HTTPS URL
**ビーコンを通じてURLばらまける**
このオプションにはアプリがいらない
今年の夏以降
**BLEビーコンがあればURLを配れる QRコードいらない**

→**こちらGoogle Play Servicesに入ったのでChromeなしでアプリのインストール誘導などができるようになったようです。**
詳しくはこちらのツイートの返答がとても参考になります。
https://twitter.com/new_runnable/status/741070937961828353

## その他

この勉強会にはGoogleの方も来ており、以下の内容を話していて特にInstant Appの説明が参考になりました。

また最近のAndroidについてGoogleの方に聞いたことメモ
http://qiita.com/ogapants/items/c01324ccb1ee9cacfb3a

---
---
---
# Googleで行われた shibuya.apk #8 - Report from Google I/O 2016

## Migration from GCM to FCM
https://speakerdeck.com/wasabeef/introduction-to-firebase-notifications

AndroidとFirebaseが同じぐらいのセッションの量があった
GCMからFCMに移行したほうが良いという話があった

Firebaseとは主に15個の機能がある
ストレージが元はあって、それからFCMやクラッシュレポートなどがはいってきた

AnalyticsはGoogle Analyticsと違って料金がかからない

Firebase Notification

いいところは？
**導入が楽！**
数行で済む
Notificationはクライアント

GCMはdeprecateになる？
→**まずならない**
**機能追加はFirebaseなので移行したほうが良い**

▪️手順
プロジェクト作成
→いろんなサービスから
→Android
→パッケージ名を書く
→ちょっと書くだけ
New Messageで対象のアプリをん選択してメッセージが遅れる

**全体プッシュとか、セグメントpushであればFCMで
会員同士のメッセージングなどはGCMである必要がある**


トピックというカテゴリ分けができて、それに対して送れる
REGISTRATION Tokenというもので1端末についても送れる

クラッシュレポート
シンプルにクラッシュ率とかが出る
プロガードも対応している

**jsonとdependenciesに一行だけで通知を受け取れるようになる**

**ただデフォルトだとスモールアイコンが変えられない+アプリがフォアグラウンドでは通知を受け取れない**
**FirebaseMessagingServiceを使うとイベントが受け取れるのでなんでもできる**


## Introduction to Awareness API
https://speakerdeck.com/hkurokawa/introduction-to-awareness-api

Context Awarenessとはユーザーがどんな状態なのか把握している状態

なぜ？
ユーザーが自分で入力するのはめんどう
ユーザーがどんな状況か把握しやすい

ユーザーのコンテキストに応じて適切な挙動をしてほしい

例えば？
ミーテイングの時間に間に合うように起床アラームがセットされる
などなど


何が嬉しい？
離脱するユーザーが多い
リテンションの手段がプッシュとかになってしまってスパムかしやすい
**ユーザー作り手両方にとってメリット**

現状でも組み合わせればできるが
条件が増えたりバッテリー消費してしまって難しい

二つのAPI

* Fence API
条件を登録しておくと、コールバックされる

* Snapshot API
自分で取りに行く

基本的にはFenceAPIがよくある使い方


**and or not でイベントを論理演算で組み合わせできる**

Fenceのイベントを登録できる

パーミッションが必要なものもあるので若干注意


## Firebase - Remote Config
https://speakerdeck.com/srym/firebase-remote-config

Remote Configとは
例:
リリースしたときに、スウェーデンだけ不適切なものがあった
文字だけサーバーに置いておいて、すぐ差し替える

単なるkey/ value store
再インストールすることなくアプリを更新できる
ABテスト
セグメントの人のみ利用できるようなものを設定できる。

### セットアップ方法
新規プロジェクト作成
→パッッケージ名
→jsonがダウンロードできる
→appの下に入れる
→gradleに書くだけ

導入完了

res/xml/remote_config_defaults.xml(自由なファイル名)でdefaultsMapというのを作り　サーバーと通信出来たときのみ変更できる

(ここが最高でした。)

ここだけ詳しく説明すると以下のようにxmlをres/xmlに置いて


```xml
<?xml version="1.0" encoding="utf-8"?>
<!-- START xml_defaults -->
<defaultsMap>
    <entry>
        <key>price_prefix</key>
        <value>Your price is $</value>
    </entry>
    <entry>
        <key>loading_phrase</key>
        <value>Checking your price…</value>
    </entry>
    <entry>
        <key>is_promotion_on</key>
        <value>false</value>
    </entry>
    <entry>
        <key>price</key>
        <value>100</value>
    </entry>
    <entry>
        <key>discount</key>
        <value>0</value>
    </entry>
</defaultsMap>
    <!-- END xml_defaults -->
```

以下で設定します。

```java
mFirebaseRemoteConfig.setDefaults(R.xml.remote_config_defaults);
```


これで要素を取得して利用できる。

```java
finalPrice = initialPrice - mFirebaseRemoteConfig.getLong(DISCOUNT_CONFIG_KEY);
```

**ネットワークから取れない時はこのデフォルトのxmlを利用して、ネットワークから取れた時はその取れた値を利用します。**


デフォルトでは12時間キャッシュする
開発ではキャッシュしないようにできる
待ち合わせするひつようなし
fetchしてコールバックで成功したらローカルに保存するコードを呼ぶことでリモートの状態を取得する。

ネット通信していなくてもデフォルトの設定が取れる。

(Androidのことがわかっている感じのAPIで最高そう)

A/Bテストできる
バージョン1.1.1以上ではこのUIみたいなこともできる
いろんな条件で優先度をつけて、A/Bテストができる
国とかでもできる

Webコンソールから簡単にできる


google-services.jsonを使い分けたいときはBuildVariantでgoogle-services.jsonをわけると複数使い分けられる。



WebコンソールのAnalyticsのほうでも見れる？

**A/Bテストのためのツールにはなっていないので、効果計測などはまだ既存のA/Bテストのツールを置き換えるわけではない**

**履歴管理は現状できない**

**REST APIは現状ない**


## pre-reportのsecurityテストで楽々対応
https://speakerdeck.com/ken5scal/intro-to-pre-report-the-security

apkを上げて解析して、apkがどうなのか自動でレポートしてくれる

Pre-Preport
リリース前レポートとは
無料なのがいい
apkを静的解析しているっぽい

セキュリティ的にまずいところを出してくれる
**現状だとあんまり検出してくれない**
WebViewの証明書のエラー無視のコードのみ検出


## Googleの人の話
(予定らしいので実際はどうなのかわかりません。)

v4のSupport Libraryが分割される。
**最低APIレベルが引き上げられるかも？**