code

顯示具有 Google IO 標籤的文章。 顯示所有文章
顯示具有 Google IO 標籤的文章。 顯示所有文章

2018年7月22日 星期日

Google IO 2018 - 用Android App Actions與Android OS深度整合

將現有的android app與android深度整合

Google assistant有個關鍵的entity叫做actions,那什麼是actions?



由於使用者非常少會再重複使用一個app (reengagement is low!!!),所以Google想要協助app developers把app的功能(actions)展現給使用者看,透過AI自動判斷目前使用者可能需要做的動作(Actions),而不只是App。

如果一個android app定義了自己的app actions之後,則這就是一個快速跟Google assistant app接口的方法,使用者可以透過Google Assistant做出task-based query,我們的android app actoins也能獲得展露頭角的機會。




 甚至是content-based query,google assistant會預測接下來使用者的動作,同樣也能讓我們的app actions浮現上來(例如以下查詢lady gaga的姓名,google assistant預測可能接下來的有許多買票或是訂購音樂相關的動作:)


也能在google search bar下方的action prediction出現:(android O之後)


還有就是一些OS深度整合(例如text selection預設action):



總之只要implement了app action,就有機會跟android平台(不只是手機OS) 做深度的整合。


Semantic Intents

Google已經幫我們把下圖中左邊的語意換成右邊的Intent with params:



我們programmer要做的就是在我們的apk中加入actions.xml,然後定義好裡面的fullfillments。


所謂intents,其實是一個semantic intents(注意這不是android intent! 這是Actions by Google這個平台定義的semantic intents),是需要被Google service分析過後的結過,而fulfillment是一個deep link直接指向我們app內可以提供內容或是action的頁面。以上兩者構成了actions.xml。

Semantic intents不是只有給android actions用而已,他可以在任何Google assistant能出現的地方,都被當作是一個intent。

這邊有一個可以integrate的東西叫做usage logging(透過Firebase app indexing api),這個可以幫助Android 將action suggestion 個人化(how?)



目前google 提供了不少built-in intents,當然還在持續增加中:





勁量使用built-in intents,因為這樣Google已經做好所有的semantic analysis,也不會有什麼ambiguity的空間,而且多國語言的語意分析也幫你弄好了,基本上只要專注在準備fulfillment就可以了。

App Actions基本上是黏著semantic intents和android intents的橋樑:



用URL當橋樑的好處是,這個資料型態還能符合很多其他的服務:




 Fulfillment

fulfillment可以有兩種model來形容:


 1. url template model: 基本上就是對那種app就能解決的問題來說適合的。此時actions.xml裡面定義的url是一個app中的deep link,而所謂的template就是語意分析引擎會把分析出來的參數填入url template中的place holder部分,這樣deep link到的頁面就能處理。

2. content-driven model: 這對content serving action有用,而且通常content會連結到網站上,所以此時的actions.xml中的url就是連結到某個我們有所有權的網站中的網頁,當然能夠符合structured data形式 (可以說semantic intent定義了動詞,而structured data定義了名詞或是受詞)是最好,這個要另外一篇來提了。



測試與提交actions.xml

這其實是把actions.xml送到 Actions on Google這個平台資料庫,這樣讓所有安裝google assistant的device (不限於android devices)都能使用。對android app來說,最簡單的提交方法就是放在apk裡面,然後submit到google play console:



不過在提交之前,要先測試吧!
Android studio有一個plugin叫做actions test tool可以用來測試actions.xml是否正常運作:



這個plugin能讓developer account單獨看到actions(即便submit到Actions on Google的database),其他使用者不會被影響到,接下來就是用Google Assistant來測試各種語言組合是否有正確連結到url defined in actions.xml。



URL Template-based example: Taxi app

這個叫車的app的actions.xml如下:


這個action使用的semantic intent為一個built-in intent ORDER_RIDE,使用者可能會說出以下的句子:

這個intent會被分析成以下的parameters,他們的type是schema.org/xxx:


可以看到在actions.xml中,fulfillment定義的urlTemplate是一個接受兩個參數placeholders(注意type) 的urls,不過這邊不一定要是http的schema。

如果在App Actions Test Tool中看到如下:






Content-driven example: Coursera app

coursera的android app已經做了這個app actions的深度整合,來看他們怎麼做的。

如果使用者說出以下:


Coursera app註冊了一個built-in intent,由於Google Assistant知道該怎麼parse這段語音成有意義的參數,所以這些參數會丟向Coursera app actions:



可以看到此TAKE_COURSE intent有定義一個parameter叫做course,那他的type是schema.org/Course,所以在每個Coursera app的網頁中,如果加上以下的strucutured data markup:


Google Assistant就能知道這個action要提供的url content是什麼,也就是一個fullfillment。

所以coursera app的actions.xml就是以下這麼簡單的幾行xml:



在test tool中看到會是這樣:




在Google Assistant中的互動中,take course就變成一個predictable actions,當然coursera app就會出現在此predicted action list中:




Usage logging with Firebase indexing APIs

整合這個的目的就是要讓我們的App Actions在Android的app suggestion中更能被看到。
Firebase提供api來記錄in-app action usages可以達到這個目的。


透過Slices與Android/Google App整合

Android 19+ 提供了Slices - 一個UI template有點類似widget,讓app的一些內容或功能呈現出來,可以被其他app所展現(例如Search, Gmail等)。

不過這又是另一個topic了。



如何與非Android devices整合 - Conversational Actions

以上說的利用actions.xml來定義app actions,這是只對android devices有用。那如果想要延伸到非android devices但是五億台google assistant enabled devices上呢?

基本上Google努力建置technology stack出來,而應用程式開發商就專注在experiences上:


由於這些非android devices共同的介面就是語音,所以就要定義另一個action介面:conversational actions。

待下回分解。

2018年6月10日 星期日

Google IO 2018 - What's new in Android TV

1. Hardware Adoption倍數成長




2. 還是稀少的apps,約3600個。


3. Google assistant 生態系一員:



有Google Assistant的幫助,大大降低操作的門檻,特別是search functionality。主要三個功能面向:

(1) Content Search
(2) Deep links
(3) Playback control


4. Content-first design

每個app有channel概念,可以拉出一部份重點放在Android TV首頁,而使用者也可以自己決定顯示哪些channel。



每個channel中可以有很多個"program",例如上面的每個電影是一個program。


看起來也沒太大改變。

2018年5月16日 星期三

Google IO 2018 - .app domain

目的

提高https普及率
此為全世界第一個open (任何人都可以註冊) TLD (top-level domain) with full HTTPS policy

此地要分清楚Registry和Registrar的不同。看以下連結:

https://help.one.com/hc/en-us/articles/115005588149-What-is-a-registry-registrar-and-registrant-

Registry: 此TLD的創建者/管理者/經營者,以本例子來說是Google
Registrar: 銷售TLD的經銷商,例如goDaddy

民眾通常不會跟Registry打交道,而是透過Registrar。


Target Users

主要瞄準所有跟app development相關的從業人員。

此外還有行銷上的好處:好記較短的網址,例如momoapp.com可以簡化成 momo.app

HTTPS 好處

1. Authenticity: 公開wifi提供者常會對http網站內容做修改(因為掌握底層傳輸機制),所以失去網站的真實性,常見的非惡意的做法是塞入廣告版面。



2. 新的Browser APIs只限制要使用HTTPS傳輸

3. Chrome URL bar會顯示「不安全」給HTTP網站


4. Android P (9.0) default就要HTTPS connection between App and backend


HSTS (HTTP Strict Transport Security)

這是一個讓server告知browser說所有server content壹定要在HTTPS connection上傳輸。



HSTS可以避免connection被ISP downgrade 導向www server的HTTP content (如果有的話),稱為protocol downgrade attack。

再來就是可以做HSTS preloading,也就是一個browser list記載某些TLDs壹定要用HTTPS connection,即便連第一個request header都還沒看到。

由於.app domain已經加入HSTS preload list,所以使用.app domain的website不用花心力去configure HSTS,或是花幾個月的時間去申請加入HSTS preload list

此外也可以節省website loading時間,如果已經加入HSTS preload list的話,就不會經歷HTTP redirect到HTTPS content的過程。


結論

加入.app domain的好處:
1. marketing advantages:較短且好記的名稱,例如momoecapp.com => momoec.app
2. .app domain已經被加入HSTS preload list,所以server不用花時間心力去configure HSTS以及申請加入preload list,馬上就可以得到HSTS的好處。