形式手法勉強会第3回 device tokenの仕様について

122
ᙧᘧᡭἲ୰⣭⦅ ᴫᛕ䜢䜚ධ䜜䛯ᐇ⾜䝖䝺䞊䝇 䛾䜰䝃䞊䝅䝵䞁ド

Upload: shutaro-anno

Post on 26-Jun-2015

8.783 views

Category:

Documents


5 download

DESCRIPTION

形式手法勉強会で使った資料です。 alloyというツールを使っています。 alloy自体の紹介は別の資料で説明しており、 この資料では以下の語を説明無しに使っています ・ドット(結合) ・矢印(積) ・その他各種シグネチャ ・alloyの特徴(全ては関係、全ては論理式、非手続き型言語であることなど) このあたりの理解は原典にあたるのが一番手っ取り早いです http://alloy.mit.edu/alloy/

TRANSCRIPT

Page 1: 形式手法勉強会第3回 device tokenの仕様について

ᙧᘧᡭἲ⦅

ᴫᛕ䜢䜚ධ䜜䛯ᐇ䝖䝺䞊䝇䛾䜰䝃䞊䝅䝵䞁ド

bull alloyゝㄒᵝbull 䜿䞊䝇䝇䝍䝕䜱ndash Push䛾⤌䜏ndash䝅䝇䝔䝮యᅗndashᅇ䛾䛚㢟

bull 䜒䛾䛤䛸䜢ᢳ䛩䜛䠄alloy䜢䛳䛯ᢳ䠅bull ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ䠄㛫䛜䛒䛳䛯䜙䠅bull 䜎䛸䜑

alloyゝㄒᵝ

大事な3つ

bull アトムと関係

bull 演算

bull 制約

アトム

bull これ以上分けられない

bull 変化することがない

bull それ自体意味をもたない

bull 「要素」である

アトムの例

bull 「本」 bull 「ユーザ」 bull 「名前」 bull 「時刻」 bull 「状態名」

例えば

sig User

と書くとUserというアトムの集合 があるということを宣言している 馴染みの言語で言えば

class User

と意味は似ているかもしれない

sig User

において Userというのはアトムの集合を表す User = U0 U1 という感じで要素としてアトムを持つ

class User が無数のインスタンスを持つようなもの

関係

bull 関係はタプルの集合

bull タプルはアトムの並び

bull 関係はRDBの「Table」だと思えば良い

U0 N0 A0

U0 N0 A1

U1 N1 A2

U2 N2 A2

関係「profile」 User Name Addr

各行がタプル

U0 N0 A0

U0 N0 A1

U1 N1 A2

U2 N2 A2

関係「profile」 User Name Addr

profile = (U0 N0 A0) (U0 N0 A1) (U1 N1 A2) (U2 N2 A2)

こんな感じでよく書きます

あとこの列の数をアリティと呼びます

アリティ=3

sig User

User = U0 U1

さっき

と書きましたがより正確には

User = (U0) (U1)

というタプルのアリティが1の関係を表します 「関係はタプルの集合」です

関係には名前をつけることができます

sig User name Name sig Name

をRDB的な表現をすると

sig User name Name sig Name

create table User (id primary key) create table Name (id primary key) create table name(id User id Name)

というニュアンスだと思ってください 特に最後のnameが少し変わってますね

Alloyの全ての値は 関係 です

あとこれ重要

つまり全ての変数の内容は関係です

U0

User

また アリティが1で要素数が1の関係 を特別にスカラと呼びます

N2

Name

u0=(U0)

n2=(N2)

スカラは 何か一つのモノを 表すのでよく使うので 概念名をつけていますが 繰り返しますが スカラも関係です

演算

今回使うものだけ説明します

ドット結合

RDBで言えばJOINです 関係user と 関係name をJOINして JOINキー列を除去した関係を表します

username

U0 N0

U2 N2

U0 U1 U2

User name

join

U0 N0

U2 N2

U0

U2

N0

N2

最初はこう

JOINキーが同じタプル で新しい関係を作る

JOINキー列は削除

U0 N0

U2 N2 U0

User name

u0=(U0) name=(U0 N0) (U2 N2)

u0name = (N0)

直感的な結果になる

関係mail(from message to) U1 M1 U2

U1 M2 U3

U5 M3 U2

u1mail=(M1 U2) (M2 U3)

他の例

mailu2=(U1 M1) (U5 M3)

u1mailu2=(M1)

右側から

両側から

左から

自由にJOINできる

bull SQLみたいに列名でJOINできない

bull 関係の列の順番が重要になります

bull 実用上それほど困らないらしいです

JOINキーは最左か最右

矢印積

U1 -gt N1

これが矢印積

集合の直積を表す

D0 F0

D1 F1

G0

G1

Group drinkFood

Group -gt drinkFood G0 D0 F0 G0 D1 F1 G1 D0 F0 G1 D1 F1

(G0) (G1) (D0F0) (D1F1)

(G0 D0 F0) (G0 D1 F1) (G1 D0F0) (G1 D1 F1)

N0 U0

User Name

u0= (U0) n0= (N0)

u0 -gt n0 U0 N0

(U0 N0)

特に双方がスカラの場合によく使う

制約

bull 論理and or not とか 集合のinとか馴染みの言語でよく使うものは当然ある

bull Alloyに制約の書き方は本当にたくさんありますが今回は2つだけ説明します

implies (含意)

A ならば B である というのを A implies B と記述することができます

Alloyでは implies を =gt とも書きます でも矢印積(-gt)となんか紛らわしい

A implies B というのは (A and B) or (not A) と同じ意味です

「君が金メダリスト ならば 私は総理大臣だ」 が真になる(嘘ではない)のは 「君が金メダリスト かつ 私が総理大臣」 もしくは 「君が金メダリストではない」 ときですよね

限量 そろそろ馴染みが薄い領域

all x e | F eを満たす全てのxにおいてFが成立する

some x e | F eを満たすあるxにおいてFが成立する

no x e | F eを満たす全てのxにおいてFが成立しない

lone x e | F eを満たす高々1つのxにおいてFが成立する

one x e | F eを満たすちょうど1つのxにおいてFが成立

䜿䞊䝇䝇䝍䝕䜱

Push䛾⤌䜏

bull Push䛸䛿䠛ndash䝴䞊䝄䞊䛜䜰䝥䝸䜢䛧䛶䛔䛺䛟䛶䜒䚸䝸䜰䝹䝍䜲䝮䛻䜰䝥䝸䜈ఱ䜙䛛䛾䜢䜛⤌䜏

ndash DeviceToken䛸䜀䜜䜛䚸➃ᮎ䛸䜰䝥䝸䜢ព䛻≉ᐃ䛩䜛ID䜢䛳䛶ᐇ䛥䜜䜛

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 2: 形式手法勉強会第3回 device tokenの仕様について

bull alloyゝㄒᵝbull 䜿䞊䝇䝇䝍䝕䜱ndash Push䛾⤌䜏ndash䝅䝇䝔䝮యᅗndashᅇ䛾䛚㢟

bull 䜒䛾䛤䛸䜢ᢳ䛩䜛䠄alloy䜢䛳䛯ᢳ䠅bull ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ䠄㛫䛜䛒䛳䛯䜙䠅bull 䜎䛸䜑

alloyゝㄒᵝ

大事な3つ

bull アトムと関係

bull 演算

bull 制約

アトム

bull これ以上分けられない

bull 変化することがない

bull それ自体意味をもたない

bull 「要素」である

アトムの例

bull 「本」 bull 「ユーザ」 bull 「名前」 bull 「時刻」 bull 「状態名」

例えば

sig User

と書くとUserというアトムの集合 があるということを宣言している 馴染みの言語で言えば

class User

と意味は似ているかもしれない

sig User

において Userというのはアトムの集合を表す User = U0 U1 という感じで要素としてアトムを持つ

class User が無数のインスタンスを持つようなもの

関係

bull 関係はタプルの集合

bull タプルはアトムの並び

bull 関係はRDBの「Table」だと思えば良い

U0 N0 A0

U0 N0 A1

U1 N1 A2

U2 N2 A2

関係「profile」 User Name Addr

各行がタプル

U0 N0 A0

U0 N0 A1

U1 N1 A2

U2 N2 A2

関係「profile」 User Name Addr

profile = (U0 N0 A0) (U0 N0 A1) (U1 N1 A2) (U2 N2 A2)

こんな感じでよく書きます

あとこの列の数をアリティと呼びます

アリティ=3

sig User

User = U0 U1

さっき

と書きましたがより正確には

User = (U0) (U1)

というタプルのアリティが1の関係を表します 「関係はタプルの集合」です

関係には名前をつけることができます

sig User name Name sig Name

をRDB的な表現をすると

sig User name Name sig Name

create table User (id primary key) create table Name (id primary key) create table name(id User id Name)

というニュアンスだと思ってください 特に最後のnameが少し変わってますね

Alloyの全ての値は 関係 です

あとこれ重要

つまり全ての変数の内容は関係です

U0

User

また アリティが1で要素数が1の関係 を特別にスカラと呼びます

N2

Name

u0=(U0)

n2=(N2)

スカラは 何か一つのモノを 表すのでよく使うので 概念名をつけていますが 繰り返しますが スカラも関係です

演算

今回使うものだけ説明します

ドット結合

RDBで言えばJOINです 関係user と 関係name をJOINして JOINキー列を除去した関係を表します

username

U0 N0

U2 N2

U0 U1 U2

User name

join

U0 N0

U2 N2

U0

U2

N0

N2

最初はこう

JOINキーが同じタプル で新しい関係を作る

JOINキー列は削除

U0 N0

U2 N2 U0

User name

u0=(U0) name=(U0 N0) (U2 N2)

u0name = (N0)

直感的な結果になる

関係mail(from message to) U1 M1 U2

U1 M2 U3

U5 M3 U2

u1mail=(M1 U2) (M2 U3)

他の例

mailu2=(U1 M1) (U5 M3)

u1mailu2=(M1)

右側から

両側から

左から

自由にJOINできる

bull SQLみたいに列名でJOINできない

bull 関係の列の順番が重要になります

bull 実用上それほど困らないらしいです

JOINキーは最左か最右

矢印積

U1 -gt N1

これが矢印積

集合の直積を表す

D0 F0

D1 F1

G0

G1

Group drinkFood

Group -gt drinkFood G0 D0 F0 G0 D1 F1 G1 D0 F0 G1 D1 F1

(G0) (G1) (D0F0) (D1F1)

(G0 D0 F0) (G0 D1 F1) (G1 D0F0) (G1 D1 F1)

N0 U0

User Name

u0= (U0) n0= (N0)

u0 -gt n0 U0 N0

(U0 N0)

特に双方がスカラの場合によく使う

制約

bull 論理and or not とか 集合のinとか馴染みの言語でよく使うものは当然ある

bull Alloyに制約の書き方は本当にたくさんありますが今回は2つだけ説明します

implies (含意)

A ならば B である というのを A implies B と記述することができます

Alloyでは implies を =gt とも書きます でも矢印積(-gt)となんか紛らわしい

A implies B というのは (A and B) or (not A) と同じ意味です

「君が金メダリスト ならば 私は総理大臣だ」 が真になる(嘘ではない)のは 「君が金メダリスト かつ 私が総理大臣」 もしくは 「君が金メダリストではない」 ときですよね

限量 そろそろ馴染みが薄い領域

all x e | F eを満たす全てのxにおいてFが成立する

some x e | F eを満たすあるxにおいてFが成立する

no x e | F eを満たす全てのxにおいてFが成立しない

lone x e | F eを満たす高々1つのxにおいてFが成立する

one x e | F eを満たすちょうど1つのxにおいてFが成立

䜿䞊䝇䝇䝍䝕䜱

Push䛾⤌䜏

bull Push䛸䛿䠛ndash䝴䞊䝄䞊䛜䜰䝥䝸䜢䛧䛶䛔䛺䛟䛶䜒䚸䝸䜰䝹䝍䜲䝮䛻䜰䝥䝸䜈ఱ䜙䛛䛾䜢䜛⤌䜏

ndash DeviceToken䛸䜀䜜䜛䚸➃ᮎ䛸䜰䝥䝸䜢ព䛻≉ᐃ䛩䜛ID䜢䛳䛶ᐇ䛥䜜䜛

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 3: 形式手法勉強会第3回 device tokenの仕様について

alloyゝㄒᵝ

大事な3つ

bull アトムと関係

bull 演算

bull 制約

アトム

bull これ以上分けられない

bull 変化することがない

bull それ自体意味をもたない

bull 「要素」である

アトムの例

bull 「本」 bull 「ユーザ」 bull 「名前」 bull 「時刻」 bull 「状態名」

例えば

sig User

と書くとUserというアトムの集合 があるということを宣言している 馴染みの言語で言えば

class User

と意味は似ているかもしれない

sig User

において Userというのはアトムの集合を表す User = U0 U1 という感じで要素としてアトムを持つ

class User が無数のインスタンスを持つようなもの

関係

bull 関係はタプルの集合

bull タプルはアトムの並び

bull 関係はRDBの「Table」だと思えば良い

U0 N0 A0

U0 N0 A1

U1 N1 A2

U2 N2 A2

関係「profile」 User Name Addr

各行がタプル

U0 N0 A0

U0 N0 A1

U1 N1 A2

U2 N2 A2

関係「profile」 User Name Addr

profile = (U0 N0 A0) (U0 N0 A1) (U1 N1 A2) (U2 N2 A2)

こんな感じでよく書きます

あとこの列の数をアリティと呼びます

アリティ=3

sig User

User = U0 U1

さっき

と書きましたがより正確には

User = (U0) (U1)

というタプルのアリティが1の関係を表します 「関係はタプルの集合」です

関係には名前をつけることができます

sig User name Name sig Name

をRDB的な表現をすると

sig User name Name sig Name

create table User (id primary key) create table Name (id primary key) create table name(id User id Name)

というニュアンスだと思ってください 特に最後のnameが少し変わってますね

Alloyの全ての値は 関係 です

あとこれ重要

つまり全ての変数の内容は関係です

U0

User

また アリティが1で要素数が1の関係 を特別にスカラと呼びます

N2

Name

u0=(U0)

n2=(N2)

スカラは 何か一つのモノを 表すのでよく使うので 概念名をつけていますが 繰り返しますが スカラも関係です

演算

今回使うものだけ説明します

ドット結合

RDBで言えばJOINです 関係user と 関係name をJOINして JOINキー列を除去した関係を表します

username

U0 N0

U2 N2

U0 U1 U2

User name

join

U0 N0

U2 N2

U0

U2

N0

N2

最初はこう

JOINキーが同じタプル で新しい関係を作る

JOINキー列は削除

U0 N0

U2 N2 U0

User name

u0=(U0) name=(U0 N0) (U2 N2)

u0name = (N0)

直感的な結果になる

関係mail(from message to) U1 M1 U2

U1 M2 U3

U5 M3 U2

u1mail=(M1 U2) (M2 U3)

他の例

mailu2=(U1 M1) (U5 M3)

u1mailu2=(M1)

右側から

両側から

左から

自由にJOINできる

bull SQLみたいに列名でJOINできない

bull 関係の列の順番が重要になります

bull 実用上それほど困らないらしいです

JOINキーは最左か最右

矢印積

U1 -gt N1

これが矢印積

集合の直積を表す

D0 F0

D1 F1

G0

G1

Group drinkFood

Group -gt drinkFood G0 D0 F0 G0 D1 F1 G1 D0 F0 G1 D1 F1

(G0) (G1) (D0F0) (D1F1)

(G0 D0 F0) (G0 D1 F1) (G1 D0F0) (G1 D1 F1)

N0 U0

User Name

u0= (U0) n0= (N0)

u0 -gt n0 U0 N0

(U0 N0)

特に双方がスカラの場合によく使う

制約

bull 論理and or not とか 集合のinとか馴染みの言語でよく使うものは当然ある

bull Alloyに制約の書き方は本当にたくさんありますが今回は2つだけ説明します

implies (含意)

A ならば B である というのを A implies B と記述することができます

Alloyでは implies を =gt とも書きます でも矢印積(-gt)となんか紛らわしい

A implies B というのは (A and B) or (not A) と同じ意味です

「君が金メダリスト ならば 私は総理大臣だ」 が真になる(嘘ではない)のは 「君が金メダリスト かつ 私が総理大臣」 もしくは 「君が金メダリストではない」 ときですよね

限量 そろそろ馴染みが薄い領域

all x e | F eを満たす全てのxにおいてFが成立する

some x e | F eを満たすあるxにおいてFが成立する

no x e | F eを満たす全てのxにおいてFが成立しない

lone x e | F eを満たす高々1つのxにおいてFが成立する

one x e | F eを満たすちょうど1つのxにおいてFが成立

䜿䞊䝇䝇䝍䝕䜱

Push䛾⤌䜏

bull Push䛸䛿䠛ndash䝴䞊䝄䞊䛜䜰䝥䝸䜢䛧䛶䛔䛺䛟䛶䜒䚸䝸䜰䝹䝍䜲䝮䛻䜰䝥䝸䜈ఱ䜙䛛䛾䜢䜛⤌䜏

ndash DeviceToken䛸䜀䜜䜛䚸➃ᮎ䛸䜰䝥䝸䜢ព䛻≉ᐃ䛩䜛ID䜢䛳䛶ᐇ䛥䜜䜛

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 4: 形式手法勉強会第3回 device tokenの仕様について

大事な3つ

bull アトムと関係

bull 演算

bull 制約

アトム

bull これ以上分けられない

bull 変化することがない

bull それ自体意味をもたない

bull 「要素」である

アトムの例

bull 「本」 bull 「ユーザ」 bull 「名前」 bull 「時刻」 bull 「状態名」

例えば

sig User

と書くとUserというアトムの集合 があるということを宣言している 馴染みの言語で言えば

class User

と意味は似ているかもしれない

sig User

において Userというのはアトムの集合を表す User = U0 U1 という感じで要素としてアトムを持つ

class User が無数のインスタンスを持つようなもの

関係

bull 関係はタプルの集合

bull タプルはアトムの並び

bull 関係はRDBの「Table」だと思えば良い

U0 N0 A0

U0 N0 A1

U1 N1 A2

U2 N2 A2

関係「profile」 User Name Addr

各行がタプル

U0 N0 A0

U0 N0 A1

U1 N1 A2

U2 N2 A2

関係「profile」 User Name Addr

profile = (U0 N0 A0) (U0 N0 A1) (U1 N1 A2) (U2 N2 A2)

こんな感じでよく書きます

あとこの列の数をアリティと呼びます

アリティ=3

sig User

User = U0 U1

さっき

と書きましたがより正確には

User = (U0) (U1)

というタプルのアリティが1の関係を表します 「関係はタプルの集合」です

関係には名前をつけることができます

sig User name Name sig Name

をRDB的な表現をすると

sig User name Name sig Name

create table User (id primary key) create table Name (id primary key) create table name(id User id Name)

というニュアンスだと思ってください 特に最後のnameが少し変わってますね

Alloyの全ての値は 関係 です

あとこれ重要

つまり全ての変数の内容は関係です

U0

User

また アリティが1で要素数が1の関係 を特別にスカラと呼びます

N2

Name

u0=(U0)

n2=(N2)

スカラは 何か一つのモノを 表すのでよく使うので 概念名をつけていますが 繰り返しますが スカラも関係です

演算

今回使うものだけ説明します

ドット結合

RDBで言えばJOINです 関係user と 関係name をJOINして JOINキー列を除去した関係を表します

username

U0 N0

U2 N2

U0 U1 U2

User name

join

U0 N0

U2 N2

U0

U2

N0

N2

最初はこう

JOINキーが同じタプル で新しい関係を作る

JOINキー列は削除

U0 N0

U2 N2 U0

User name

u0=(U0) name=(U0 N0) (U2 N2)

u0name = (N0)

直感的な結果になる

関係mail(from message to) U1 M1 U2

U1 M2 U3

U5 M3 U2

u1mail=(M1 U2) (M2 U3)

他の例

mailu2=(U1 M1) (U5 M3)

u1mailu2=(M1)

右側から

両側から

左から

自由にJOINできる

bull SQLみたいに列名でJOINできない

bull 関係の列の順番が重要になります

bull 実用上それほど困らないらしいです

JOINキーは最左か最右

矢印積

U1 -gt N1

これが矢印積

集合の直積を表す

D0 F0

D1 F1

G0

G1

Group drinkFood

Group -gt drinkFood G0 D0 F0 G0 D1 F1 G1 D0 F0 G1 D1 F1

(G0) (G1) (D0F0) (D1F1)

(G0 D0 F0) (G0 D1 F1) (G1 D0F0) (G1 D1 F1)

N0 U0

User Name

u0= (U0) n0= (N0)

u0 -gt n0 U0 N0

(U0 N0)

特に双方がスカラの場合によく使う

制約

bull 論理and or not とか 集合のinとか馴染みの言語でよく使うものは当然ある

bull Alloyに制約の書き方は本当にたくさんありますが今回は2つだけ説明します

implies (含意)

A ならば B である というのを A implies B と記述することができます

Alloyでは implies を =gt とも書きます でも矢印積(-gt)となんか紛らわしい

A implies B というのは (A and B) or (not A) と同じ意味です

「君が金メダリスト ならば 私は総理大臣だ」 が真になる(嘘ではない)のは 「君が金メダリスト かつ 私が総理大臣」 もしくは 「君が金メダリストではない」 ときですよね

限量 そろそろ馴染みが薄い領域

all x e | F eを満たす全てのxにおいてFが成立する

some x e | F eを満たすあるxにおいてFが成立する

no x e | F eを満たす全てのxにおいてFが成立しない

lone x e | F eを満たす高々1つのxにおいてFが成立する

one x e | F eを満たすちょうど1つのxにおいてFが成立

䜿䞊䝇䝇䝍䝕䜱

Push䛾⤌䜏

bull Push䛸䛿䠛ndash䝴䞊䝄䞊䛜䜰䝥䝸䜢䛧䛶䛔䛺䛟䛶䜒䚸䝸䜰䝹䝍䜲䝮䛻䜰䝥䝸䜈ఱ䜙䛛䛾䜢䜛⤌䜏

ndash DeviceToken䛸䜀䜜䜛䚸➃ᮎ䛸䜰䝥䝸䜢ព䛻≉ᐃ䛩䜛ID䜢䛳䛶ᐇ䛥䜜䜛

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 5: 形式手法勉強会第3回 device tokenの仕様について

アトム

bull これ以上分けられない

bull 変化することがない

bull それ自体意味をもたない

bull 「要素」である

アトムの例

bull 「本」 bull 「ユーザ」 bull 「名前」 bull 「時刻」 bull 「状態名」

例えば

sig User

と書くとUserというアトムの集合 があるということを宣言している 馴染みの言語で言えば

class User

と意味は似ているかもしれない

sig User

において Userというのはアトムの集合を表す User = U0 U1 という感じで要素としてアトムを持つ

class User が無数のインスタンスを持つようなもの

関係

bull 関係はタプルの集合

bull タプルはアトムの並び

bull 関係はRDBの「Table」だと思えば良い

U0 N0 A0

U0 N0 A1

U1 N1 A2

U2 N2 A2

関係「profile」 User Name Addr

各行がタプル

U0 N0 A0

U0 N0 A1

U1 N1 A2

U2 N2 A2

関係「profile」 User Name Addr

profile = (U0 N0 A0) (U0 N0 A1) (U1 N1 A2) (U2 N2 A2)

こんな感じでよく書きます

あとこの列の数をアリティと呼びます

アリティ=3

sig User

User = U0 U1

さっき

と書きましたがより正確には

User = (U0) (U1)

というタプルのアリティが1の関係を表します 「関係はタプルの集合」です

関係には名前をつけることができます

sig User name Name sig Name

をRDB的な表現をすると

sig User name Name sig Name

create table User (id primary key) create table Name (id primary key) create table name(id User id Name)

というニュアンスだと思ってください 特に最後のnameが少し変わってますね

Alloyの全ての値は 関係 です

あとこれ重要

つまり全ての変数の内容は関係です

U0

User

また アリティが1で要素数が1の関係 を特別にスカラと呼びます

N2

Name

u0=(U0)

n2=(N2)

スカラは 何か一つのモノを 表すのでよく使うので 概念名をつけていますが 繰り返しますが スカラも関係です

演算

今回使うものだけ説明します

ドット結合

RDBで言えばJOINです 関係user と 関係name をJOINして JOINキー列を除去した関係を表します

username

U0 N0

U2 N2

U0 U1 U2

User name

join

U0 N0

U2 N2

U0

U2

N0

N2

最初はこう

JOINキーが同じタプル で新しい関係を作る

JOINキー列は削除

U0 N0

U2 N2 U0

User name

u0=(U0) name=(U0 N0) (U2 N2)

u0name = (N0)

直感的な結果になる

関係mail(from message to) U1 M1 U2

U1 M2 U3

U5 M3 U2

u1mail=(M1 U2) (M2 U3)

他の例

mailu2=(U1 M1) (U5 M3)

u1mailu2=(M1)

右側から

両側から

左から

自由にJOINできる

bull SQLみたいに列名でJOINできない

bull 関係の列の順番が重要になります

bull 実用上それほど困らないらしいです

JOINキーは最左か最右

矢印積

U1 -gt N1

これが矢印積

集合の直積を表す

D0 F0

D1 F1

G0

G1

Group drinkFood

Group -gt drinkFood G0 D0 F0 G0 D1 F1 G1 D0 F0 G1 D1 F1

(G0) (G1) (D0F0) (D1F1)

(G0 D0 F0) (G0 D1 F1) (G1 D0F0) (G1 D1 F1)

N0 U0

User Name

u0= (U0) n0= (N0)

u0 -gt n0 U0 N0

(U0 N0)

特に双方がスカラの場合によく使う

制約

bull 論理and or not とか 集合のinとか馴染みの言語でよく使うものは当然ある

bull Alloyに制約の書き方は本当にたくさんありますが今回は2つだけ説明します

implies (含意)

A ならば B である というのを A implies B と記述することができます

Alloyでは implies を =gt とも書きます でも矢印積(-gt)となんか紛らわしい

A implies B というのは (A and B) or (not A) と同じ意味です

「君が金メダリスト ならば 私は総理大臣だ」 が真になる(嘘ではない)のは 「君が金メダリスト かつ 私が総理大臣」 もしくは 「君が金メダリストではない」 ときですよね

限量 そろそろ馴染みが薄い領域

all x e | F eを満たす全てのxにおいてFが成立する

some x e | F eを満たすあるxにおいてFが成立する

no x e | F eを満たす全てのxにおいてFが成立しない

lone x e | F eを満たす高々1つのxにおいてFが成立する

one x e | F eを満たすちょうど1つのxにおいてFが成立

䜿䞊䝇䝇䝍䝕䜱

Push䛾⤌䜏

bull Push䛸䛿䠛ndash䝴䞊䝄䞊䛜䜰䝥䝸䜢䛧䛶䛔䛺䛟䛶䜒䚸䝸䜰䝹䝍䜲䝮䛻䜰䝥䝸䜈ఱ䜙䛛䛾䜢䜛⤌䜏

ndash DeviceToken䛸䜀䜜䜛䚸➃ᮎ䛸䜰䝥䝸䜢ព䛻≉ᐃ䛩䜛ID䜢䛳䛶ᐇ䛥䜜䜛

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 6: 形式手法勉強会第3回 device tokenの仕様について

アトムの例

bull 「本」 bull 「ユーザ」 bull 「名前」 bull 「時刻」 bull 「状態名」

例えば

sig User

と書くとUserというアトムの集合 があるということを宣言している 馴染みの言語で言えば

class User

と意味は似ているかもしれない

sig User

において Userというのはアトムの集合を表す User = U0 U1 という感じで要素としてアトムを持つ

class User が無数のインスタンスを持つようなもの

関係

bull 関係はタプルの集合

bull タプルはアトムの並び

bull 関係はRDBの「Table」だと思えば良い

U0 N0 A0

U0 N0 A1

U1 N1 A2

U2 N2 A2

関係「profile」 User Name Addr

各行がタプル

U0 N0 A0

U0 N0 A1

U1 N1 A2

U2 N2 A2

関係「profile」 User Name Addr

profile = (U0 N0 A0) (U0 N0 A1) (U1 N1 A2) (U2 N2 A2)

こんな感じでよく書きます

あとこの列の数をアリティと呼びます

アリティ=3

sig User

User = U0 U1

さっき

と書きましたがより正確には

User = (U0) (U1)

というタプルのアリティが1の関係を表します 「関係はタプルの集合」です

関係には名前をつけることができます

sig User name Name sig Name

をRDB的な表現をすると

sig User name Name sig Name

create table User (id primary key) create table Name (id primary key) create table name(id User id Name)

というニュアンスだと思ってください 特に最後のnameが少し変わってますね

Alloyの全ての値は 関係 です

あとこれ重要

つまり全ての変数の内容は関係です

U0

User

また アリティが1で要素数が1の関係 を特別にスカラと呼びます

N2

Name

u0=(U0)

n2=(N2)

スカラは 何か一つのモノを 表すのでよく使うので 概念名をつけていますが 繰り返しますが スカラも関係です

演算

今回使うものだけ説明します

ドット結合

RDBで言えばJOINです 関係user と 関係name をJOINして JOINキー列を除去した関係を表します

username

U0 N0

U2 N2

U0 U1 U2

User name

join

U0 N0

U2 N2

U0

U2

N0

N2

最初はこう

JOINキーが同じタプル で新しい関係を作る

JOINキー列は削除

U0 N0

U2 N2 U0

User name

u0=(U0) name=(U0 N0) (U2 N2)

u0name = (N0)

直感的な結果になる

関係mail(from message to) U1 M1 U2

U1 M2 U3

U5 M3 U2

u1mail=(M1 U2) (M2 U3)

他の例

mailu2=(U1 M1) (U5 M3)

u1mailu2=(M1)

右側から

両側から

左から

自由にJOINできる

bull SQLみたいに列名でJOINできない

bull 関係の列の順番が重要になります

bull 実用上それほど困らないらしいです

JOINキーは最左か最右

矢印積

U1 -gt N1

これが矢印積

集合の直積を表す

D0 F0

D1 F1

G0

G1

Group drinkFood

Group -gt drinkFood G0 D0 F0 G0 D1 F1 G1 D0 F0 G1 D1 F1

(G0) (G1) (D0F0) (D1F1)

(G0 D0 F0) (G0 D1 F1) (G1 D0F0) (G1 D1 F1)

N0 U0

User Name

u0= (U0) n0= (N0)

u0 -gt n0 U0 N0

(U0 N0)

特に双方がスカラの場合によく使う

制約

bull 論理and or not とか 集合のinとか馴染みの言語でよく使うものは当然ある

bull Alloyに制約の書き方は本当にたくさんありますが今回は2つだけ説明します

implies (含意)

A ならば B である というのを A implies B と記述することができます

Alloyでは implies を =gt とも書きます でも矢印積(-gt)となんか紛らわしい

A implies B というのは (A and B) or (not A) と同じ意味です

「君が金メダリスト ならば 私は総理大臣だ」 が真になる(嘘ではない)のは 「君が金メダリスト かつ 私が総理大臣」 もしくは 「君が金メダリストではない」 ときですよね

限量 そろそろ馴染みが薄い領域

all x e | F eを満たす全てのxにおいてFが成立する

some x e | F eを満たすあるxにおいてFが成立する

no x e | F eを満たす全てのxにおいてFが成立しない

lone x e | F eを満たす高々1つのxにおいてFが成立する

one x e | F eを満たすちょうど1つのxにおいてFが成立

䜿䞊䝇䝇䝍䝕䜱

Push䛾⤌䜏

bull Push䛸䛿䠛ndash䝴䞊䝄䞊䛜䜰䝥䝸䜢䛧䛶䛔䛺䛟䛶䜒䚸䝸䜰䝹䝍䜲䝮䛻䜰䝥䝸䜈ఱ䜙䛛䛾䜢䜛⤌䜏

ndash DeviceToken䛸䜀䜜䜛䚸➃ᮎ䛸䜰䝥䝸䜢ព䛻≉ᐃ䛩䜛ID䜢䛳䛶ᐇ䛥䜜䜛

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 7: 形式手法勉強会第3回 device tokenの仕様について

例えば

sig User

と書くとUserというアトムの集合 があるということを宣言している 馴染みの言語で言えば

class User

と意味は似ているかもしれない

sig User

において Userというのはアトムの集合を表す User = U0 U1 という感じで要素としてアトムを持つ

class User が無数のインスタンスを持つようなもの

関係

bull 関係はタプルの集合

bull タプルはアトムの並び

bull 関係はRDBの「Table」だと思えば良い

U0 N0 A0

U0 N0 A1

U1 N1 A2

U2 N2 A2

関係「profile」 User Name Addr

各行がタプル

U0 N0 A0

U0 N0 A1

U1 N1 A2

U2 N2 A2

関係「profile」 User Name Addr

profile = (U0 N0 A0) (U0 N0 A1) (U1 N1 A2) (U2 N2 A2)

こんな感じでよく書きます

あとこの列の数をアリティと呼びます

アリティ=3

sig User

User = U0 U1

さっき

と書きましたがより正確には

User = (U0) (U1)

というタプルのアリティが1の関係を表します 「関係はタプルの集合」です

関係には名前をつけることができます

sig User name Name sig Name

をRDB的な表現をすると

sig User name Name sig Name

create table User (id primary key) create table Name (id primary key) create table name(id User id Name)

というニュアンスだと思ってください 特に最後のnameが少し変わってますね

Alloyの全ての値は 関係 です

あとこれ重要

つまり全ての変数の内容は関係です

U0

User

また アリティが1で要素数が1の関係 を特別にスカラと呼びます

N2

Name

u0=(U0)

n2=(N2)

スカラは 何か一つのモノを 表すのでよく使うので 概念名をつけていますが 繰り返しますが スカラも関係です

演算

今回使うものだけ説明します

ドット結合

RDBで言えばJOINです 関係user と 関係name をJOINして JOINキー列を除去した関係を表します

username

U0 N0

U2 N2

U0 U1 U2

User name

join

U0 N0

U2 N2

U0

U2

N0

N2

最初はこう

JOINキーが同じタプル で新しい関係を作る

JOINキー列は削除

U0 N0

U2 N2 U0

User name

u0=(U0) name=(U0 N0) (U2 N2)

u0name = (N0)

直感的な結果になる

関係mail(from message to) U1 M1 U2

U1 M2 U3

U5 M3 U2

u1mail=(M1 U2) (M2 U3)

他の例

mailu2=(U1 M1) (U5 M3)

u1mailu2=(M1)

右側から

両側から

左から

自由にJOINできる

bull SQLみたいに列名でJOINできない

bull 関係の列の順番が重要になります

bull 実用上それほど困らないらしいです

JOINキーは最左か最右

矢印積

U1 -gt N1

これが矢印積

集合の直積を表す

D0 F0

D1 F1

G0

G1

Group drinkFood

Group -gt drinkFood G0 D0 F0 G0 D1 F1 G1 D0 F0 G1 D1 F1

(G0) (G1) (D0F0) (D1F1)

(G0 D0 F0) (G0 D1 F1) (G1 D0F0) (G1 D1 F1)

N0 U0

User Name

u0= (U0) n0= (N0)

u0 -gt n0 U0 N0

(U0 N0)

特に双方がスカラの場合によく使う

制約

bull 論理and or not とか 集合のinとか馴染みの言語でよく使うものは当然ある

bull Alloyに制約の書き方は本当にたくさんありますが今回は2つだけ説明します

implies (含意)

A ならば B である というのを A implies B と記述することができます

Alloyでは implies を =gt とも書きます でも矢印積(-gt)となんか紛らわしい

A implies B というのは (A and B) or (not A) と同じ意味です

「君が金メダリスト ならば 私は総理大臣だ」 が真になる(嘘ではない)のは 「君が金メダリスト かつ 私が総理大臣」 もしくは 「君が金メダリストではない」 ときですよね

限量 そろそろ馴染みが薄い領域

all x e | F eを満たす全てのxにおいてFが成立する

some x e | F eを満たすあるxにおいてFが成立する

no x e | F eを満たす全てのxにおいてFが成立しない

lone x e | F eを満たす高々1つのxにおいてFが成立する

one x e | F eを満たすちょうど1つのxにおいてFが成立

䜿䞊䝇䝇䝍䝕䜱

Push䛾⤌䜏

bull Push䛸䛿䠛ndash䝴䞊䝄䞊䛜䜰䝥䝸䜢䛧䛶䛔䛺䛟䛶䜒䚸䝸䜰䝹䝍䜲䝮䛻䜰䝥䝸䜈ఱ䜙䛛䛾䜢䜛⤌䜏

ndash DeviceToken䛸䜀䜜䜛䚸➃ᮎ䛸䜰䝥䝸䜢ព䛻≉ᐃ䛩䜛ID䜢䛳䛶ᐇ䛥䜜䜛

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 8: 形式手法勉強会第3回 device tokenの仕様について

sig User

において Userというのはアトムの集合を表す User = U0 U1 という感じで要素としてアトムを持つ

class User が無数のインスタンスを持つようなもの

関係

bull 関係はタプルの集合

bull タプルはアトムの並び

bull 関係はRDBの「Table」だと思えば良い

U0 N0 A0

U0 N0 A1

U1 N1 A2

U2 N2 A2

関係「profile」 User Name Addr

各行がタプル

U0 N0 A0

U0 N0 A1

U1 N1 A2

U2 N2 A2

関係「profile」 User Name Addr

profile = (U0 N0 A0) (U0 N0 A1) (U1 N1 A2) (U2 N2 A2)

こんな感じでよく書きます

あとこの列の数をアリティと呼びます

アリティ=3

sig User

User = U0 U1

さっき

と書きましたがより正確には

User = (U0) (U1)

というタプルのアリティが1の関係を表します 「関係はタプルの集合」です

関係には名前をつけることができます

sig User name Name sig Name

をRDB的な表現をすると

sig User name Name sig Name

create table User (id primary key) create table Name (id primary key) create table name(id User id Name)

というニュアンスだと思ってください 特に最後のnameが少し変わってますね

Alloyの全ての値は 関係 です

あとこれ重要

つまり全ての変数の内容は関係です

U0

User

また アリティが1で要素数が1の関係 を特別にスカラと呼びます

N2

Name

u0=(U0)

n2=(N2)

スカラは 何か一つのモノを 表すのでよく使うので 概念名をつけていますが 繰り返しますが スカラも関係です

演算

今回使うものだけ説明します

ドット結合

RDBで言えばJOINです 関係user と 関係name をJOINして JOINキー列を除去した関係を表します

username

U0 N0

U2 N2

U0 U1 U2

User name

join

U0 N0

U2 N2

U0

U2

N0

N2

最初はこう

JOINキーが同じタプル で新しい関係を作る

JOINキー列は削除

U0 N0

U2 N2 U0

User name

u0=(U0) name=(U0 N0) (U2 N2)

u0name = (N0)

直感的な結果になる

関係mail(from message to) U1 M1 U2

U1 M2 U3

U5 M3 U2

u1mail=(M1 U2) (M2 U3)

他の例

mailu2=(U1 M1) (U5 M3)

u1mailu2=(M1)

右側から

両側から

左から

自由にJOINできる

bull SQLみたいに列名でJOINできない

bull 関係の列の順番が重要になります

bull 実用上それほど困らないらしいです

JOINキーは最左か最右

矢印積

U1 -gt N1

これが矢印積

集合の直積を表す

D0 F0

D1 F1

G0

G1

Group drinkFood

Group -gt drinkFood G0 D0 F0 G0 D1 F1 G1 D0 F0 G1 D1 F1

(G0) (G1) (D0F0) (D1F1)

(G0 D0 F0) (G0 D1 F1) (G1 D0F0) (G1 D1 F1)

N0 U0

User Name

u0= (U0) n0= (N0)

u0 -gt n0 U0 N0

(U0 N0)

特に双方がスカラの場合によく使う

制約

bull 論理and or not とか 集合のinとか馴染みの言語でよく使うものは当然ある

bull Alloyに制約の書き方は本当にたくさんありますが今回は2つだけ説明します

implies (含意)

A ならば B である というのを A implies B と記述することができます

Alloyでは implies を =gt とも書きます でも矢印積(-gt)となんか紛らわしい

A implies B というのは (A and B) or (not A) と同じ意味です

「君が金メダリスト ならば 私は総理大臣だ」 が真になる(嘘ではない)のは 「君が金メダリスト かつ 私が総理大臣」 もしくは 「君が金メダリストではない」 ときですよね

限量 そろそろ馴染みが薄い領域

all x e | F eを満たす全てのxにおいてFが成立する

some x e | F eを満たすあるxにおいてFが成立する

no x e | F eを満たす全てのxにおいてFが成立しない

lone x e | F eを満たす高々1つのxにおいてFが成立する

one x e | F eを満たすちょうど1つのxにおいてFが成立

䜿䞊䝇䝇䝍䝕䜱

Push䛾⤌䜏

bull Push䛸䛿䠛ndash䝴䞊䝄䞊䛜䜰䝥䝸䜢䛧䛶䛔䛺䛟䛶䜒䚸䝸䜰䝹䝍䜲䝮䛻䜰䝥䝸䜈ఱ䜙䛛䛾䜢䜛⤌䜏

ndash DeviceToken䛸䜀䜜䜛䚸➃ᮎ䛸䜰䝥䝸䜢ព䛻≉ᐃ䛩䜛ID䜢䛳䛶ᐇ䛥䜜䜛

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 9: 形式手法勉強会第3回 device tokenの仕様について

関係

bull 関係はタプルの集合

bull タプルはアトムの並び

bull 関係はRDBの「Table」だと思えば良い

U0 N0 A0

U0 N0 A1

U1 N1 A2

U2 N2 A2

関係「profile」 User Name Addr

各行がタプル

U0 N0 A0

U0 N0 A1

U1 N1 A2

U2 N2 A2

関係「profile」 User Name Addr

profile = (U0 N0 A0) (U0 N0 A1) (U1 N1 A2) (U2 N2 A2)

こんな感じでよく書きます

あとこの列の数をアリティと呼びます

アリティ=3

sig User

User = U0 U1

さっき

と書きましたがより正確には

User = (U0) (U1)

というタプルのアリティが1の関係を表します 「関係はタプルの集合」です

関係には名前をつけることができます

sig User name Name sig Name

をRDB的な表現をすると

sig User name Name sig Name

create table User (id primary key) create table Name (id primary key) create table name(id User id Name)

というニュアンスだと思ってください 特に最後のnameが少し変わってますね

Alloyの全ての値は 関係 です

あとこれ重要

つまり全ての変数の内容は関係です

U0

User

また アリティが1で要素数が1の関係 を特別にスカラと呼びます

N2

Name

u0=(U0)

n2=(N2)

スカラは 何か一つのモノを 表すのでよく使うので 概念名をつけていますが 繰り返しますが スカラも関係です

演算

今回使うものだけ説明します

ドット結合

RDBで言えばJOINです 関係user と 関係name をJOINして JOINキー列を除去した関係を表します

username

U0 N0

U2 N2

U0 U1 U2

User name

join

U0 N0

U2 N2

U0

U2

N0

N2

最初はこう

JOINキーが同じタプル で新しい関係を作る

JOINキー列は削除

U0 N0

U2 N2 U0

User name

u0=(U0) name=(U0 N0) (U2 N2)

u0name = (N0)

直感的な結果になる

関係mail(from message to) U1 M1 U2

U1 M2 U3

U5 M3 U2

u1mail=(M1 U2) (M2 U3)

他の例

mailu2=(U1 M1) (U5 M3)

u1mailu2=(M1)

右側から

両側から

左から

自由にJOINできる

bull SQLみたいに列名でJOINできない

bull 関係の列の順番が重要になります

bull 実用上それほど困らないらしいです

JOINキーは最左か最右

矢印積

U1 -gt N1

これが矢印積

集合の直積を表す

D0 F0

D1 F1

G0

G1

Group drinkFood

Group -gt drinkFood G0 D0 F0 G0 D1 F1 G1 D0 F0 G1 D1 F1

(G0) (G1) (D0F0) (D1F1)

(G0 D0 F0) (G0 D1 F1) (G1 D0F0) (G1 D1 F1)

N0 U0

User Name

u0= (U0) n0= (N0)

u0 -gt n0 U0 N0

(U0 N0)

特に双方がスカラの場合によく使う

制約

bull 論理and or not とか 集合のinとか馴染みの言語でよく使うものは当然ある

bull Alloyに制約の書き方は本当にたくさんありますが今回は2つだけ説明します

implies (含意)

A ならば B である というのを A implies B と記述することができます

Alloyでは implies を =gt とも書きます でも矢印積(-gt)となんか紛らわしい

A implies B というのは (A and B) or (not A) と同じ意味です

「君が金メダリスト ならば 私は総理大臣だ」 が真になる(嘘ではない)のは 「君が金メダリスト かつ 私が総理大臣」 もしくは 「君が金メダリストではない」 ときですよね

限量 そろそろ馴染みが薄い領域

all x e | F eを満たす全てのxにおいてFが成立する

some x e | F eを満たすあるxにおいてFが成立する

no x e | F eを満たす全てのxにおいてFが成立しない

lone x e | F eを満たす高々1つのxにおいてFが成立する

one x e | F eを満たすちょうど1つのxにおいてFが成立

䜿䞊䝇䝇䝍䝕䜱

Push䛾⤌䜏

bull Push䛸䛿䠛ndash䝴䞊䝄䞊䛜䜰䝥䝸䜢䛧䛶䛔䛺䛟䛶䜒䚸䝸䜰䝹䝍䜲䝮䛻䜰䝥䝸䜈ఱ䜙䛛䛾䜢䜛⤌䜏

ndash DeviceToken䛸䜀䜜䜛䚸➃ᮎ䛸䜰䝥䝸䜢ព䛻≉ᐃ䛩䜛ID䜢䛳䛶ᐇ䛥䜜䜛

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 10: 形式手法勉強会第3回 device tokenの仕様について

U0 N0 A0

U0 N0 A1

U1 N1 A2

U2 N2 A2

関係「profile」 User Name Addr

profile = (U0 N0 A0) (U0 N0 A1) (U1 N1 A2) (U2 N2 A2)

こんな感じでよく書きます

あとこの列の数をアリティと呼びます

アリティ=3

sig User

User = U0 U1

さっき

と書きましたがより正確には

User = (U0) (U1)

というタプルのアリティが1の関係を表します 「関係はタプルの集合」です

関係には名前をつけることができます

sig User name Name sig Name

をRDB的な表現をすると

sig User name Name sig Name

create table User (id primary key) create table Name (id primary key) create table name(id User id Name)

というニュアンスだと思ってください 特に最後のnameが少し変わってますね

Alloyの全ての値は 関係 です

あとこれ重要

つまり全ての変数の内容は関係です

U0

User

また アリティが1で要素数が1の関係 を特別にスカラと呼びます

N2

Name

u0=(U0)

n2=(N2)

スカラは 何か一つのモノを 表すのでよく使うので 概念名をつけていますが 繰り返しますが スカラも関係です

演算

今回使うものだけ説明します

ドット結合

RDBで言えばJOINです 関係user と 関係name をJOINして JOINキー列を除去した関係を表します

username

U0 N0

U2 N2

U0 U1 U2

User name

join

U0 N0

U2 N2

U0

U2

N0

N2

最初はこう

JOINキーが同じタプル で新しい関係を作る

JOINキー列は削除

U0 N0

U2 N2 U0

User name

u0=(U0) name=(U0 N0) (U2 N2)

u0name = (N0)

直感的な結果になる

関係mail(from message to) U1 M1 U2

U1 M2 U3

U5 M3 U2

u1mail=(M1 U2) (M2 U3)

他の例

mailu2=(U1 M1) (U5 M3)

u1mailu2=(M1)

右側から

両側から

左から

自由にJOINできる

bull SQLみたいに列名でJOINできない

bull 関係の列の順番が重要になります

bull 実用上それほど困らないらしいです

JOINキーは最左か最右

矢印積

U1 -gt N1

これが矢印積

集合の直積を表す

D0 F0

D1 F1

G0

G1

Group drinkFood

Group -gt drinkFood G0 D0 F0 G0 D1 F1 G1 D0 F0 G1 D1 F1

(G0) (G1) (D0F0) (D1F1)

(G0 D0 F0) (G0 D1 F1) (G1 D0F0) (G1 D1 F1)

N0 U0

User Name

u0= (U0) n0= (N0)

u0 -gt n0 U0 N0

(U0 N0)

特に双方がスカラの場合によく使う

制約

bull 論理and or not とか 集合のinとか馴染みの言語でよく使うものは当然ある

bull Alloyに制約の書き方は本当にたくさんありますが今回は2つだけ説明します

implies (含意)

A ならば B である というのを A implies B と記述することができます

Alloyでは implies を =gt とも書きます でも矢印積(-gt)となんか紛らわしい

A implies B というのは (A and B) or (not A) と同じ意味です

「君が金メダリスト ならば 私は総理大臣だ」 が真になる(嘘ではない)のは 「君が金メダリスト かつ 私が総理大臣」 もしくは 「君が金メダリストではない」 ときですよね

限量 そろそろ馴染みが薄い領域

all x e | F eを満たす全てのxにおいてFが成立する

some x e | F eを満たすあるxにおいてFが成立する

no x e | F eを満たす全てのxにおいてFが成立しない

lone x e | F eを満たす高々1つのxにおいてFが成立する

one x e | F eを満たすちょうど1つのxにおいてFが成立

䜿䞊䝇䝇䝍䝕䜱

Push䛾⤌䜏

bull Push䛸䛿䠛ndash䝴䞊䝄䞊䛜䜰䝥䝸䜢䛧䛶䛔䛺䛟䛶䜒䚸䝸䜰䝹䝍䜲䝮䛻䜰䝥䝸䜈ఱ䜙䛛䛾䜢䜛⤌䜏

ndash DeviceToken䛸䜀䜜䜛䚸➃ᮎ䛸䜰䝥䝸䜢ព䛻≉ᐃ䛩䜛ID䜢䛳䛶ᐇ䛥䜜䜛

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 11: 形式手法勉強会第3回 device tokenの仕様について

sig User

User = U0 U1

さっき

と書きましたがより正確には

User = (U0) (U1)

というタプルのアリティが1の関係を表します 「関係はタプルの集合」です

関係には名前をつけることができます

sig User name Name sig Name

をRDB的な表現をすると

sig User name Name sig Name

create table User (id primary key) create table Name (id primary key) create table name(id User id Name)

というニュアンスだと思ってください 特に最後のnameが少し変わってますね

Alloyの全ての値は 関係 です

あとこれ重要

つまり全ての変数の内容は関係です

U0

User

また アリティが1で要素数が1の関係 を特別にスカラと呼びます

N2

Name

u0=(U0)

n2=(N2)

スカラは 何か一つのモノを 表すのでよく使うので 概念名をつけていますが 繰り返しますが スカラも関係です

演算

今回使うものだけ説明します

ドット結合

RDBで言えばJOINです 関係user と 関係name をJOINして JOINキー列を除去した関係を表します

username

U0 N0

U2 N2

U0 U1 U2

User name

join

U0 N0

U2 N2

U0

U2

N0

N2

最初はこう

JOINキーが同じタプル で新しい関係を作る

JOINキー列は削除

U0 N0

U2 N2 U0

User name

u0=(U0) name=(U0 N0) (U2 N2)

u0name = (N0)

直感的な結果になる

関係mail(from message to) U1 M1 U2

U1 M2 U3

U5 M3 U2

u1mail=(M1 U2) (M2 U3)

他の例

mailu2=(U1 M1) (U5 M3)

u1mailu2=(M1)

右側から

両側から

左から

自由にJOINできる

bull SQLみたいに列名でJOINできない

bull 関係の列の順番が重要になります

bull 実用上それほど困らないらしいです

JOINキーは最左か最右

矢印積

U1 -gt N1

これが矢印積

集合の直積を表す

D0 F0

D1 F1

G0

G1

Group drinkFood

Group -gt drinkFood G0 D0 F0 G0 D1 F1 G1 D0 F0 G1 D1 F1

(G0) (G1) (D0F0) (D1F1)

(G0 D0 F0) (G0 D1 F1) (G1 D0F0) (G1 D1 F1)

N0 U0

User Name

u0= (U0) n0= (N0)

u0 -gt n0 U0 N0

(U0 N0)

特に双方がスカラの場合によく使う

制約

bull 論理and or not とか 集合のinとか馴染みの言語でよく使うものは当然ある

bull Alloyに制約の書き方は本当にたくさんありますが今回は2つだけ説明します

implies (含意)

A ならば B である というのを A implies B と記述することができます

Alloyでは implies を =gt とも書きます でも矢印積(-gt)となんか紛らわしい

A implies B というのは (A and B) or (not A) と同じ意味です

「君が金メダリスト ならば 私は総理大臣だ」 が真になる(嘘ではない)のは 「君が金メダリスト かつ 私が総理大臣」 もしくは 「君が金メダリストではない」 ときですよね

限量 そろそろ馴染みが薄い領域

all x e | F eを満たす全てのxにおいてFが成立する

some x e | F eを満たすあるxにおいてFが成立する

no x e | F eを満たす全てのxにおいてFが成立しない

lone x e | F eを満たす高々1つのxにおいてFが成立する

one x e | F eを満たすちょうど1つのxにおいてFが成立

䜿䞊䝇䝇䝍䝕䜱

Push䛾⤌䜏

bull Push䛸䛿䠛ndash䝴䞊䝄䞊䛜䜰䝥䝸䜢䛧䛶䛔䛺䛟䛶䜒䚸䝸䜰䝹䝍䜲䝮䛻䜰䝥䝸䜈ఱ䜙䛛䛾䜢䜛⤌䜏

ndash DeviceToken䛸䜀䜜䜛䚸➃ᮎ䛸䜰䝥䝸䜢ព䛻≉ᐃ䛩䜛ID䜢䛳䛶ᐇ䛥䜜䜛

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 12: 形式手法勉強会第3回 device tokenの仕様について

関係には名前をつけることができます

sig User name Name sig Name

をRDB的な表現をすると

sig User name Name sig Name

create table User (id primary key) create table Name (id primary key) create table name(id User id Name)

というニュアンスだと思ってください 特に最後のnameが少し変わってますね

Alloyの全ての値は 関係 です

あとこれ重要

つまり全ての変数の内容は関係です

U0

User

また アリティが1で要素数が1の関係 を特別にスカラと呼びます

N2

Name

u0=(U0)

n2=(N2)

スカラは 何か一つのモノを 表すのでよく使うので 概念名をつけていますが 繰り返しますが スカラも関係です

演算

今回使うものだけ説明します

ドット結合

RDBで言えばJOINです 関係user と 関係name をJOINして JOINキー列を除去した関係を表します

username

U0 N0

U2 N2

U0 U1 U2

User name

join

U0 N0

U2 N2

U0

U2

N0

N2

最初はこう

JOINキーが同じタプル で新しい関係を作る

JOINキー列は削除

U0 N0

U2 N2 U0

User name

u0=(U0) name=(U0 N0) (U2 N2)

u0name = (N0)

直感的な結果になる

関係mail(from message to) U1 M1 U2

U1 M2 U3

U5 M3 U2

u1mail=(M1 U2) (M2 U3)

他の例

mailu2=(U1 M1) (U5 M3)

u1mailu2=(M1)

右側から

両側から

左から

自由にJOINできる

bull SQLみたいに列名でJOINできない

bull 関係の列の順番が重要になります

bull 実用上それほど困らないらしいです

JOINキーは最左か最右

矢印積

U1 -gt N1

これが矢印積

集合の直積を表す

D0 F0

D1 F1

G0

G1

Group drinkFood

Group -gt drinkFood G0 D0 F0 G0 D1 F1 G1 D0 F0 G1 D1 F1

(G0) (G1) (D0F0) (D1F1)

(G0 D0 F0) (G0 D1 F1) (G1 D0F0) (G1 D1 F1)

N0 U0

User Name

u0= (U0) n0= (N0)

u0 -gt n0 U0 N0

(U0 N0)

特に双方がスカラの場合によく使う

制約

bull 論理and or not とか 集合のinとか馴染みの言語でよく使うものは当然ある

bull Alloyに制約の書き方は本当にたくさんありますが今回は2つだけ説明します

implies (含意)

A ならば B である というのを A implies B と記述することができます

Alloyでは implies を =gt とも書きます でも矢印積(-gt)となんか紛らわしい

A implies B というのは (A and B) or (not A) と同じ意味です

「君が金メダリスト ならば 私は総理大臣だ」 が真になる(嘘ではない)のは 「君が金メダリスト かつ 私が総理大臣」 もしくは 「君が金メダリストではない」 ときですよね

限量 そろそろ馴染みが薄い領域

all x e | F eを満たす全てのxにおいてFが成立する

some x e | F eを満たすあるxにおいてFが成立する

no x e | F eを満たす全てのxにおいてFが成立しない

lone x e | F eを満たす高々1つのxにおいてFが成立する

one x e | F eを満たすちょうど1つのxにおいてFが成立

䜿䞊䝇䝇䝍䝕䜱

Push䛾⤌䜏

bull Push䛸䛿䠛ndash䝴䞊䝄䞊䛜䜰䝥䝸䜢䛧䛶䛔䛺䛟䛶䜒䚸䝸䜰䝹䝍䜲䝮䛻䜰䝥䝸䜈ఱ䜙䛛䛾䜢䜛⤌䜏

ndash DeviceToken䛸䜀䜜䜛䚸➃ᮎ䛸䜰䝥䝸䜢ព䛻≉ᐃ䛩䜛ID䜢䛳䛶ᐇ䛥䜜䜛

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 13: 形式手法勉強会第3回 device tokenの仕様について

をRDB的な表現をすると

sig User name Name sig Name

create table User (id primary key) create table Name (id primary key) create table name(id User id Name)

というニュアンスだと思ってください 特に最後のnameが少し変わってますね

Alloyの全ての値は 関係 です

あとこれ重要

つまり全ての変数の内容は関係です

U0

User

また アリティが1で要素数が1の関係 を特別にスカラと呼びます

N2

Name

u0=(U0)

n2=(N2)

スカラは 何か一つのモノを 表すのでよく使うので 概念名をつけていますが 繰り返しますが スカラも関係です

演算

今回使うものだけ説明します

ドット結合

RDBで言えばJOINです 関係user と 関係name をJOINして JOINキー列を除去した関係を表します

username

U0 N0

U2 N2

U0 U1 U2

User name

join

U0 N0

U2 N2

U0

U2

N0

N2

最初はこう

JOINキーが同じタプル で新しい関係を作る

JOINキー列は削除

U0 N0

U2 N2 U0

User name

u0=(U0) name=(U0 N0) (U2 N2)

u0name = (N0)

直感的な結果になる

関係mail(from message to) U1 M1 U2

U1 M2 U3

U5 M3 U2

u1mail=(M1 U2) (M2 U3)

他の例

mailu2=(U1 M1) (U5 M3)

u1mailu2=(M1)

右側から

両側から

左から

自由にJOINできる

bull SQLみたいに列名でJOINできない

bull 関係の列の順番が重要になります

bull 実用上それほど困らないらしいです

JOINキーは最左か最右

矢印積

U1 -gt N1

これが矢印積

集合の直積を表す

D0 F0

D1 F1

G0

G1

Group drinkFood

Group -gt drinkFood G0 D0 F0 G0 D1 F1 G1 D0 F0 G1 D1 F1

(G0) (G1) (D0F0) (D1F1)

(G0 D0 F0) (G0 D1 F1) (G1 D0F0) (G1 D1 F1)

N0 U0

User Name

u0= (U0) n0= (N0)

u0 -gt n0 U0 N0

(U0 N0)

特に双方がスカラの場合によく使う

制約

bull 論理and or not とか 集合のinとか馴染みの言語でよく使うものは当然ある

bull Alloyに制約の書き方は本当にたくさんありますが今回は2つだけ説明します

implies (含意)

A ならば B である というのを A implies B と記述することができます

Alloyでは implies を =gt とも書きます でも矢印積(-gt)となんか紛らわしい

A implies B というのは (A and B) or (not A) と同じ意味です

「君が金メダリスト ならば 私は総理大臣だ」 が真になる(嘘ではない)のは 「君が金メダリスト かつ 私が総理大臣」 もしくは 「君が金メダリストではない」 ときですよね

限量 そろそろ馴染みが薄い領域

all x e | F eを満たす全てのxにおいてFが成立する

some x e | F eを満たすあるxにおいてFが成立する

no x e | F eを満たす全てのxにおいてFが成立しない

lone x e | F eを満たす高々1つのxにおいてFが成立する

one x e | F eを満たすちょうど1つのxにおいてFが成立

䜿䞊䝇䝇䝍䝕䜱

Push䛾⤌䜏

bull Push䛸䛿䠛ndash䝴䞊䝄䞊䛜䜰䝥䝸䜢䛧䛶䛔䛺䛟䛶䜒䚸䝸䜰䝹䝍䜲䝮䛻䜰䝥䝸䜈ఱ䜙䛛䛾䜢䜛⤌䜏

ndash DeviceToken䛸䜀䜜䜛䚸➃ᮎ䛸䜰䝥䝸䜢ព䛻≉ᐃ䛩䜛ID䜢䛳䛶ᐇ䛥䜜䜛

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 14: 形式手法勉強会第3回 device tokenの仕様について

Alloyの全ての値は 関係 です

あとこれ重要

つまり全ての変数の内容は関係です

U0

User

また アリティが1で要素数が1の関係 を特別にスカラと呼びます

N2

Name

u0=(U0)

n2=(N2)

スカラは 何か一つのモノを 表すのでよく使うので 概念名をつけていますが 繰り返しますが スカラも関係です

演算

今回使うものだけ説明します

ドット結合

RDBで言えばJOINです 関係user と 関係name をJOINして JOINキー列を除去した関係を表します

username

U0 N0

U2 N2

U0 U1 U2

User name

join

U0 N0

U2 N2

U0

U2

N0

N2

最初はこう

JOINキーが同じタプル で新しい関係を作る

JOINキー列は削除

U0 N0

U2 N2 U0

User name

u0=(U0) name=(U0 N0) (U2 N2)

u0name = (N0)

直感的な結果になる

関係mail(from message to) U1 M1 U2

U1 M2 U3

U5 M3 U2

u1mail=(M1 U2) (M2 U3)

他の例

mailu2=(U1 M1) (U5 M3)

u1mailu2=(M1)

右側から

両側から

左から

自由にJOINできる

bull SQLみたいに列名でJOINできない

bull 関係の列の順番が重要になります

bull 実用上それほど困らないらしいです

JOINキーは最左か最右

矢印積

U1 -gt N1

これが矢印積

集合の直積を表す

D0 F0

D1 F1

G0

G1

Group drinkFood

Group -gt drinkFood G0 D0 F0 G0 D1 F1 G1 D0 F0 G1 D1 F1

(G0) (G1) (D0F0) (D1F1)

(G0 D0 F0) (G0 D1 F1) (G1 D0F0) (G1 D1 F1)

N0 U0

User Name

u0= (U0) n0= (N0)

u0 -gt n0 U0 N0

(U0 N0)

特に双方がスカラの場合によく使う

制約

bull 論理and or not とか 集合のinとか馴染みの言語でよく使うものは当然ある

bull Alloyに制約の書き方は本当にたくさんありますが今回は2つだけ説明します

implies (含意)

A ならば B である というのを A implies B と記述することができます

Alloyでは implies を =gt とも書きます でも矢印積(-gt)となんか紛らわしい

A implies B というのは (A and B) or (not A) と同じ意味です

「君が金メダリスト ならば 私は総理大臣だ」 が真になる(嘘ではない)のは 「君が金メダリスト かつ 私が総理大臣」 もしくは 「君が金メダリストではない」 ときですよね

限量 そろそろ馴染みが薄い領域

all x e | F eを満たす全てのxにおいてFが成立する

some x e | F eを満たすあるxにおいてFが成立する

no x e | F eを満たす全てのxにおいてFが成立しない

lone x e | F eを満たす高々1つのxにおいてFが成立する

one x e | F eを満たすちょうど1つのxにおいてFが成立

䜿䞊䝇䝇䝍䝕䜱

Push䛾⤌䜏

bull Push䛸䛿䠛ndash䝴䞊䝄䞊䛜䜰䝥䝸䜢䛧䛶䛔䛺䛟䛶䜒䚸䝸䜰䝹䝍䜲䝮䛻䜰䝥䝸䜈ఱ䜙䛛䛾䜢䜛⤌䜏

ndash DeviceToken䛸䜀䜜䜛䚸➃ᮎ䛸䜰䝥䝸䜢ព䛻≉ᐃ䛩䜛ID䜢䛳䛶ᐇ䛥䜜䜛

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 15: 形式手法勉強会第3回 device tokenの仕様について

U0

User

また アリティが1で要素数が1の関係 を特別にスカラと呼びます

N2

Name

u0=(U0)

n2=(N2)

スカラは 何か一つのモノを 表すのでよく使うので 概念名をつけていますが 繰り返しますが スカラも関係です

演算

今回使うものだけ説明します

ドット結合

RDBで言えばJOINです 関係user と 関係name をJOINして JOINキー列を除去した関係を表します

username

U0 N0

U2 N2

U0 U1 U2

User name

join

U0 N0

U2 N2

U0

U2

N0

N2

最初はこう

JOINキーが同じタプル で新しい関係を作る

JOINキー列は削除

U0 N0

U2 N2 U0

User name

u0=(U0) name=(U0 N0) (U2 N2)

u0name = (N0)

直感的な結果になる

関係mail(from message to) U1 M1 U2

U1 M2 U3

U5 M3 U2

u1mail=(M1 U2) (M2 U3)

他の例

mailu2=(U1 M1) (U5 M3)

u1mailu2=(M1)

右側から

両側から

左から

自由にJOINできる

bull SQLみたいに列名でJOINできない

bull 関係の列の順番が重要になります

bull 実用上それほど困らないらしいです

JOINキーは最左か最右

矢印積

U1 -gt N1

これが矢印積

集合の直積を表す

D0 F0

D1 F1

G0

G1

Group drinkFood

Group -gt drinkFood G0 D0 F0 G0 D1 F1 G1 D0 F0 G1 D1 F1

(G0) (G1) (D0F0) (D1F1)

(G0 D0 F0) (G0 D1 F1) (G1 D0F0) (G1 D1 F1)

N0 U0

User Name

u0= (U0) n0= (N0)

u0 -gt n0 U0 N0

(U0 N0)

特に双方がスカラの場合によく使う

制約

bull 論理and or not とか 集合のinとか馴染みの言語でよく使うものは当然ある

bull Alloyに制約の書き方は本当にたくさんありますが今回は2つだけ説明します

implies (含意)

A ならば B である というのを A implies B と記述することができます

Alloyでは implies を =gt とも書きます でも矢印積(-gt)となんか紛らわしい

A implies B というのは (A and B) or (not A) と同じ意味です

「君が金メダリスト ならば 私は総理大臣だ」 が真になる(嘘ではない)のは 「君が金メダリスト かつ 私が総理大臣」 もしくは 「君が金メダリストではない」 ときですよね

限量 そろそろ馴染みが薄い領域

all x e | F eを満たす全てのxにおいてFが成立する

some x e | F eを満たすあるxにおいてFが成立する

no x e | F eを満たす全てのxにおいてFが成立しない

lone x e | F eを満たす高々1つのxにおいてFが成立する

one x e | F eを満たすちょうど1つのxにおいてFが成立

䜿䞊䝇䝇䝍䝕䜱

Push䛾⤌䜏

bull Push䛸䛿䠛ndash䝴䞊䝄䞊䛜䜰䝥䝸䜢䛧䛶䛔䛺䛟䛶䜒䚸䝸䜰䝹䝍䜲䝮䛻䜰䝥䝸䜈ఱ䜙䛛䛾䜢䜛⤌䜏

ndash DeviceToken䛸䜀䜜䜛䚸➃ᮎ䛸䜰䝥䝸䜢ព䛻≉ᐃ䛩䜛ID䜢䛳䛶ᐇ䛥䜜䜛

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 16: 形式手法勉強会第3回 device tokenの仕様について

演算

今回使うものだけ説明します

ドット結合

RDBで言えばJOINです 関係user と 関係name をJOINして JOINキー列を除去した関係を表します

username

U0 N0

U2 N2

U0 U1 U2

User name

join

U0 N0

U2 N2

U0

U2

N0

N2

最初はこう

JOINキーが同じタプル で新しい関係を作る

JOINキー列は削除

U0 N0

U2 N2 U0

User name

u0=(U0) name=(U0 N0) (U2 N2)

u0name = (N0)

直感的な結果になる

関係mail(from message to) U1 M1 U2

U1 M2 U3

U5 M3 U2

u1mail=(M1 U2) (M2 U3)

他の例

mailu2=(U1 M1) (U5 M3)

u1mailu2=(M1)

右側から

両側から

左から

自由にJOINできる

bull SQLみたいに列名でJOINできない

bull 関係の列の順番が重要になります

bull 実用上それほど困らないらしいです

JOINキーは最左か最右

矢印積

U1 -gt N1

これが矢印積

集合の直積を表す

D0 F0

D1 F1

G0

G1

Group drinkFood

Group -gt drinkFood G0 D0 F0 G0 D1 F1 G1 D0 F0 G1 D1 F1

(G0) (G1) (D0F0) (D1F1)

(G0 D0 F0) (G0 D1 F1) (G1 D0F0) (G1 D1 F1)

N0 U0

User Name

u0= (U0) n0= (N0)

u0 -gt n0 U0 N0

(U0 N0)

特に双方がスカラの場合によく使う

制約

bull 論理and or not とか 集合のinとか馴染みの言語でよく使うものは当然ある

bull Alloyに制約の書き方は本当にたくさんありますが今回は2つだけ説明します

implies (含意)

A ならば B である というのを A implies B と記述することができます

Alloyでは implies を =gt とも書きます でも矢印積(-gt)となんか紛らわしい

A implies B というのは (A and B) or (not A) と同じ意味です

「君が金メダリスト ならば 私は総理大臣だ」 が真になる(嘘ではない)のは 「君が金メダリスト かつ 私が総理大臣」 もしくは 「君が金メダリストではない」 ときですよね

限量 そろそろ馴染みが薄い領域

all x e | F eを満たす全てのxにおいてFが成立する

some x e | F eを満たすあるxにおいてFが成立する

no x e | F eを満たす全てのxにおいてFが成立しない

lone x e | F eを満たす高々1つのxにおいてFが成立する

one x e | F eを満たすちょうど1つのxにおいてFが成立

䜿䞊䝇䝇䝍䝕䜱

Push䛾⤌䜏

bull Push䛸䛿䠛ndash䝴䞊䝄䞊䛜䜰䝥䝸䜢䛧䛶䛔䛺䛟䛶䜒䚸䝸䜰䝹䝍䜲䝮䛻䜰䝥䝸䜈ఱ䜙䛛䛾䜢䜛⤌䜏

ndash DeviceToken䛸䜀䜜䜛䚸➃ᮎ䛸䜰䝥䝸䜢ព䛻≉ᐃ䛩䜛ID䜢䛳䛶ᐇ䛥䜜䜛

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 17: 形式手法勉強会第3回 device tokenの仕様について

ドット結合

RDBで言えばJOINです 関係user と 関係name をJOINして JOINキー列を除去した関係を表します

username

U0 N0

U2 N2

U0 U1 U2

User name

join

U0 N0

U2 N2

U0

U2

N0

N2

最初はこう

JOINキーが同じタプル で新しい関係を作る

JOINキー列は削除

U0 N0

U2 N2 U0

User name

u0=(U0) name=(U0 N0) (U2 N2)

u0name = (N0)

直感的な結果になる

関係mail(from message to) U1 M1 U2

U1 M2 U3

U5 M3 U2

u1mail=(M1 U2) (M2 U3)

他の例

mailu2=(U1 M1) (U5 M3)

u1mailu2=(M1)

右側から

両側から

左から

自由にJOINできる

bull SQLみたいに列名でJOINできない

bull 関係の列の順番が重要になります

bull 実用上それほど困らないらしいです

JOINキーは最左か最右

矢印積

U1 -gt N1

これが矢印積

集合の直積を表す

D0 F0

D1 F1

G0

G1

Group drinkFood

Group -gt drinkFood G0 D0 F0 G0 D1 F1 G1 D0 F0 G1 D1 F1

(G0) (G1) (D0F0) (D1F1)

(G0 D0 F0) (G0 D1 F1) (G1 D0F0) (G1 D1 F1)

N0 U0

User Name

u0= (U0) n0= (N0)

u0 -gt n0 U0 N0

(U0 N0)

特に双方がスカラの場合によく使う

制約

bull 論理and or not とか 集合のinとか馴染みの言語でよく使うものは当然ある

bull Alloyに制約の書き方は本当にたくさんありますが今回は2つだけ説明します

implies (含意)

A ならば B である というのを A implies B と記述することができます

Alloyでは implies を =gt とも書きます でも矢印積(-gt)となんか紛らわしい

A implies B というのは (A and B) or (not A) と同じ意味です

「君が金メダリスト ならば 私は総理大臣だ」 が真になる(嘘ではない)のは 「君が金メダリスト かつ 私が総理大臣」 もしくは 「君が金メダリストではない」 ときですよね

限量 そろそろ馴染みが薄い領域

all x e | F eを満たす全てのxにおいてFが成立する

some x e | F eを満たすあるxにおいてFが成立する

no x e | F eを満たす全てのxにおいてFが成立しない

lone x e | F eを満たす高々1つのxにおいてFが成立する

one x e | F eを満たすちょうど1つのxにおいてFが成立

䜿䞊䝇䝇䝍䝕䜱

Push䛾⤌䜏

bull Push䛸䛿䠛ndash䝴䞊䝄䞊䛜䜰䝥䝸䜢䛧䛶䛔䛺䛟䛶䜒䚸䝸䜰䝹䝍䜲䝮䛻䜰䝥䝸䜈ఱ䜙䛛䛾䜢䜛⤌䜏

ndash DeviceToken䛸䜀䜜䜛䚸➃ᮎ䛸䜰䝥䝸䜢ព䛻≉ᐃ䛩䜛ID䜢䛳䛶ᐇ䛥䜜䜛

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 18: 形式手法勉強会第3回 device tokenの仕様について

U0 N0

U2 N2

U0 U1 U2

User name

join

U0 N0

U2 N2

U0

U2

N0

N2

最初はこう

JOINキーが同じタプル で新しい関係を作る

JOINキー列は削除

U0 N0

U2 N2 U0

User name

u0=(U0) name=(U0 N0) (U2 N2)

u0name = (N0)

直感的な結果になる

関係mail(from message to) U1 M1 U2

U1 M2 U3

U5 M3 U2

u1mail=(M1 U2) (M2 U3)

他の例

mailu2=(U1 M1) (U5 M3)

u1mailu2=(M1)

右側から

両側から

左から

自由にJOINできる

bull SQLみたいに列名でJOINできない

bull 関係の列の順番が重要になります

bull 実用上それほど困らないらしいです

JOINキーは最左か最右

矢印積

U1 -gt N1

これが矢印積

集合の直積を表す

D0 F0

D1 F1

G0

G1

Group drinkFood

Group -gt drinkFood G0 D0 F0 G0 D1 F1 G1 D0 F0 G1 D1 F1

(G0) (G1) (D0F0) (D1F1)

(G0 D0 F0) (G0 D1 F1) (G1 D0F0) (G1 D1 F1)

N0 U0

User Name

u0= (U0) n0= (N0)

u0 -gt n0 U0 N0

(U0 N0)

特に双方がスカラの場合によく使う

制約

bull 論理and or not とか 集合のinとか馴染みの言語でよく使うものは当然ある

bull Alloyに制約の書き方は本当にたくさんありますが今回は2つだけ説明します

implies (含意)

A ならば B である というのを A implies B と記述することができます

Alloyでは implies を =gt とも書きます でも矢印積(-gt)となんか紛らわしい

A implies B というのは (A and B) or (not A) と同じ意味です

「君が金メダリスト ならば 私は総理大臣だ」 が真になる(嘘ではない)のは 「君が金メダリスト かつ 私が総理大臣」 もしくは 「君が金メダリストではない」 ときですよね

限量 そろそろ馴染みが薄い領域

all x e | F eを満たす全てのxにおいてFが成立する

some x e | F eを満たすあるxにおいてFが成立する

no x e | F eを満たす全てのxにおいてFが成立しない

lone x e | F eを満たす高々1つのxにおいてFが成立する

one x e | F eを満たすちょうど1つのxにおいてFが成立

䜿䞊䝇䝇䝍䝕䜱

Push䛾⤌䜏

bull Push䛸䛿䠛ndash䝴䞊䝄䞊䛜䜰䝥䝸䜢䛧䛶䛔䛺䛟䛶䜒䚸䝸䜰䝹䝍䜲䝮䛻䜰䝥䝸䜈ఱ䜙䛛䛾䜢䜛⤌䜏

ndash DeviceToken䛸䜀䜜䜛䚸➃ᮎ䛸䜰䝥䝸䜢ព䛻≉ᐃ䛩䜛ID䜢䛳䛶ᐇ䛥䜜䜛

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 19: 形式手法勉強会第3回 device tokenの仕様について

U0 N0

U2 N2 U0

User name

u0=(U0) name=(U0 N0) (U2 N2)

u0name = (N0)

直感的な結果になる

関係mail(from message to) U1 M1 U2

U1 M2 U3

U5 M3 U2

u1mail=(M1 U2) (M2 U3)

他の例

mailu2=(U1 M1) (U5 M3)

u1mailu2=(M1)

右側から

両側から

左から

自由にJOINできる

bull SQLみたいに列名でJOINできない

bull 関係の列の順番が重要になります

bull 実用上それほど困らないらしいです

JOINキーは最左か最右

矢印積

U1 -gt N1

これが矢印積

集合の直積を表す

D0 F0

D1 F1

G0

G1

Group drinkFood

Group -gt drinkFood G0 D0 F0 G0 D1 F1 G1 D0 F0 G1 D1 F1

(G0) (G1) (D0F0) (D1F1)

(G0 D0 F0) (G0 D1 F1) (G1 D0F0) (G1 D1 F1)

N0 U0

User Name

u0= (U0) n0= (N0)

u0 -gt n0 U0 N0

(U0 N0)

特に双方がスカラの場合によく使う

制約

bull 論理and or not とか 集合のinとか馴染みの言語でよく使うものは当然ある

bull Alloyに制約の書き方は本当にたくさんありますが今回は2つだけ説明します

implies (含意)

A ならば B である というのを A implies B と記述することができます

Alloyでは implies を =gt とも書きます でも矢印積(-gt)となんか紛らわしい

A implies B というのは (A and B) or (not A) と同じ意味です

「君が金メダリスト ならば 私は総理大臣だ」 が真になる(嘘ではない)のは 「君が金メダリスト かつ 私が総理大臣」 もしくは 「君が金メダリストではない」 ときですよね

限量 そろそろ馴染みが薄い領域

all x e | F eを満たす全てのxにおいてFが成立する

some x e | F eを満たすあるxにおいてFが成立する

no x e | F eを満たす全てのxにおいてFが成立しない

lone x e | F eを満たす高々1つのxにおいてFが成立する

one x e | F eを満たすちょうど1つのxにおいてFが成立

䜿䞊䝇䝇䝍䝕䜱

Push䛾⤌䜏

bull Push䛸䛿䠛ndash䝴䞊䝄䞊䛜䜰䝥䝸䜢䛧䛶䛔䛺䛟䛶䜒䚸䝸䜰䝹䝍䜲䝮䛻䜰䝥䝸䜈ఱ䜙䛛䛾䜢䜛⤌䜏

ndash DeviceToken䛸䜀䜜䜛䚸➃ᮎ䛸䜰䝥䝸䜢ព䛻≉ᐃ䛩䜛ID䜢䛳䛶ᐇ䛥䜜䜛

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 20: 形式手法勉強会第3回 device tokenの仕様について

関係mail(from message to) U1 M1 U2

U1 M2 U3

U5 M3 U2

u1mail=(M1 U2) (M2 U3)

他の例

mailu2=(U1 M1) (U5 M3)

u1mailu2=(M1)

右側から

両側から

左から

自由にJOINできる

bull SQLみたいに列名でJOINできない

bull 関係の列の順番が重要になります

bull 実用上それほど困らないらしいです

JOINキーは最左か最右

矢印積

U1 -gt N1

これが矢印積

集合の直積を表す

D0 F0

D1 F1

G0

G1

Group drinkFood

Group -gt drinkFood G0 D0 F0 G0 D1 F1 G1 D0 F0 G1 D1 F1

(G0) (G1) (D0F0) (D1F1)

(G0 D0 F0) (G0 D1 F1) (G1 D0F0) (G1 D1 F1)

N0 U0

User Name

u0= (U0) n0= (N0)

u0 -gt n0 U0 N0

(U0 N0)

特に双方がスカラの場合によく使う

制約

bull 論理and or not とか 集合のinとか馴染みの言語でよく使うものは当然ある

bull Alloyに制約の書き方は本当にたくさんありますが今回は2つだけ説明します

implies (含意)

A ならば B である というのを A implies B と記述することができます

Alloyでは implies を =gt とも書きます でも矢印積(-gt)となんか紛らわしい

A implies B というのは (A and B) or (not A) と同じ意味です

「君が金メダリスト ならば 私は総理大臣だ」 が真になる(嘘ではない)のは 「君が金メダリスト かつ 私が総理大臣」 もしくは 「君が金メダリストではない」 ときですよね

限量 そろそろ馴染みが薄い領域

all x e | F eを満たす全てのxにおいてFが成立する

some x e | F eを満たすあるxにおいてFが成立する

no x e | F eを満たす全てのxにおいてFが成立しない

lone x e | F eを満たす高々1つのxにおいてFが成立する

one x e | F eを満たすちょうど1つのxにおいてFが成立

䜿䞊䝇䝇䝍䝕䜱

Push䛾⤌䜏

bull Push䛸䛿䠛ndash䝴䞊䝄䞊䛜䜰䝥䝸䜢䛧䛶䛔䛺䛟䛶䜒䚸䝸䜰䝹䝍䜲䝮䛻䜰䝥䝸䜈ఱ䜙䛛䛾䜢䜛⤌䜏

ndash DeviceToken䛸䜀䜜䜛䚸➃ᮎ䛸䜰䝥䝸䜢ព䛻≉ᐃ䛩䜛ID䜢䛳䛶ᐇ䛥䜜䜛

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 21: 形式手法勉強会第3回 device tokenの仕様について

bull SQLみたいに列名でJOINできない

bull 関係の列の順番が重要になります

bull 実用上それほど困らないらしいです

JOINキーは最左か最右

矢印積

U1 -gt N1

これが矢印積

集合の直積を表す

D0 F0

D1 F1

G0

G1

Group drinkFood

Group -gt drinkFood G0 D0 F0 G0 D1 F1 G1 D0 F0 G1 D1 F1

(G0) (G1) (D0F0) (D1F1)

(G0 D0 F0) (G0 D1 F1) (G1 D0F0) (G1 D1 F1)

N0 U0

User Name

u0= (U0) n0= (N0)

u0 -gt n0 U0 N0

(U0 N0)

特に双方がスカラの場合によく使う

制約

bull 論理and or not とか 集合のinとか馴染みの言語でよく使うものは当然ある

bull Alloyに制約の書き方は本当にたくさんありますが今回は2つだけ説明します

implies (含意)

A ならば B である というのを A implies B と記述することができます

Alloyでは implies を =gt とも書きます でも矢印積(-gt)となんか紛らわしい

A implies B というのは (A and B) or (not A) と同じ意味です

「君が金メダリスト ならば 私は総理大臣だ」 が真になる(嘘ではない)のは 「君が金メダリスト かつ 私が総理大臣」 もしくは 「君が金メダリストではない」 ときですよね

限量 そろそろ馴染みが薄い領域

all x e | F eを満たす全てのxにおいてFが成立する

some x e | F eを満たすあるxにおいてFが成立する

no x e | F eを満たす全てのxにおいてFが成立しない

lone x e | F eを満たす高々1つのxにおいてFが成立する

one x e | F eを満たすちょうど1つのxにおいてFが成立

䜿䞊䝇䝇䝍䝕䜱

Push䛾⤌䜏

bull Push䛸䛿䠛ndash䝴䞊䝄䞊䛜䜰䝥䝸䜢䛧䛶䛔䛺䛟䛶䜒䚸䝸䜰䝹䝍䜲䝮䛻䜰䝥䝸䜈ఱ䜙䛛䛾䜢䜛⤌䜏

ndash DeviceToken䛸䜀䜜䜛䚸➃ᮎ䛸䜰䝥䝸䜢ព䛻≉ᐃ䛩䜛ID䜢䛳䛶ᐇ䛥䜜䜛

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 22: 形式手法勉強会第3回 device tokenの仕様について

矢印積

U1 -gt N1

これが矢印積

集合の直積を表す

D0 F0

D1 F1

G0

G1

Group drinkFood

Group -gt drinkFood G0 D0 F0 G0 D1 F1 G1 D0 F0 G1 D1 F1

(G0) (G1) (D0F0) (D1F1)

(G0 D0 F0) (G0 D1 F1) (G1 D0F0) (G1 D1 F1)

N0 U0

User Name

u0= (U0) n0= (N0)

u0 -gt n0 U0 N0

(U0 N0)

特に双方がスカラの場合によく使う

制約

bull 論理and or not とか 集合のinとか馴染みの言語でよく使うものは当然ある

bull Alloyに制約の書き方は本当にたくさんありますが今回は2つだけ説明します

implies (含意)

A ならば B である というのを A implies B と記述することができます

Alloyでは implies を =gt とも書きます でも矢印積(-gt)となんか紛らわしい

A implies B というのは (A and B) or (not A) と同じ意味です

「君が金メダリスト ならば 私は総理大臣だ」 が真になる(嘘ではない)のは 「君が金メダリスト かつ 私が総理大臣」 もしくは 「君が金メダリストではない」 ときですよね

限量 そろそろ馴染みが薄い領域

all x e | F eを満たす全てのxにおいてFが成立する

some x e | F eを満たすあるxにおいてFが成立する

no x e | F eを満たす全てのxにおいてFが成立しない

lone x e | F eを満たす高々1つのxにおいてFが成立する

one x e | F eを満たすちょうど1つのxにおいてFが成立

䜿䞊䝇䝇䝍䝕䜱

Push䛾⤌䜏

bull Push䛸䛿䠛ndash䝴䞊䝄䞊䛜䜰䝥䝸䜢䛧䛶䛔䛺䛟䛶䜒䚸䝸䜰䝹䝍䜲䝮䛻䜰䝥䝸䜈ఱ䜙䛛䛾䜢䜛⤌䜏

ndash DeviceToken䛸䜀䜜䜛䚸➃ᮎ䛸䜰䝥䝸䜢ព䛻≉ᐃ䛩䜛ID䜢䛳䛶ᐇ䛥䜜䜛

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 23: 形式手法勉強会第3回 device tokenの仕様について

D0 F0

D1 F1

G0

G1

Group drinkFood

Group -gt drinkFood G0 D0 F0 G0 D1 F1 G1 D0 F0 G1 D1 F1

(G0) (G1) (D0F0) (D1F1)

(G0 D0 F0) (G0 D1 F1) (G1 D0F0) (G1 D1 F1)

N0 U0

User Name

u0= (U0) n0= (N0)

u0 -gt n0 U0 N0

(U0 N0)

特に双方がスカラの場合によく使う

制約

bull 論理and or not とか 集合のinとか馴染みの言語でよく使うものは当然ある

bull Alloyに制約の書き方は本当にたくさんありますが今回は2つだけ説明します

implies (含意)

A ならば B である というのを A implies B と記述することができます

Alloyでは implies を =gt とも書きます でも矢印積(-gt)となんか紛らわしい

A implies B というのは (A and B) or (not A) と同じ意味です

「君が金メダリスト ならば 私は総理大臣だ」 が真になる(嘘ではない)のは 「君が金メダリスト かつ 私が総理大臣」 もしくは 「君が金メダリストではない」 ときですよね

限量 そろそろ馴染みが薄い領域

all x e | F eを満たす全てのxにおいてFが成立する

some x e | F eを満たすあるxにおいてFが成立する

no x e | F eを満たす全てのxにおいてFが成立しない

lone x e | F eを満たす高々1つのxにおいてFが成立する

one x e | F eを満たすちょうど1つのxにおいてFが成立

䜿䞊䝇䝇䝍䝕䜱

Push䛾⤌䜏

bull Push䛸䛿䠛ndash䝴䞊䝄䞊䛜䜰䝥䝸䜢䛧䛶䛔䛺䛟䛶䜒䚸䝸䜰䝹䝍䜲䝮䛻䜰䝥䝸䜈ఱ䜙䛛䛾䜢䜛⤌䜏

ndash DeviceToken䛸䜀䜜䜛䚸➃ᮎ䛸䜰䝥䝸䜢ព䛻≉ᐃ䛩䜛ID䜢䛳䛶ᐇ䛥䜜䜛

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 24: 形式手法勉強会第3回 device tokenの仕様について

N0 U0

User Name

u0= (U0) n0= (N0)

u0 -gt n0 U0 N0

(U0 N0)

特に双方がスカラの場合によく使う

制約

bull 論理and or not とか 集合のinとか馴染みの言語でよく使うものは当然ある

bull Alloyに制約の書き方は本当にたくさんありますが今回は2つだけ説明します

implies (含意)

A ならば B である というのを A implies B と記述することができます

Alloyでは implies を =gt とも書きます でも矢印積(-gt)となんか紛らわしい

A implies B というのは (A and B) or (not A) と同じ意味です

「君が金メダリスト ならば 私は総理大臣だ」 が真になる(嘘ではない)のは 「君が金メダリスト かつ 私が総理大臣」 もしくは 「君が金メダリストではない」 ときですよね

限量 そろそろ馴染みが薄い領域

all x e | F eを満たす全てのxにおいてFが成立する

some x e | F eを満たすあるxにおいてFが成立する

no x e | F eを満たす全てのxにおいてFが成立しない

lone x e | F eを満たす高々1つのxにおいてFが成立する

one x e | F eを満たすちょうど1つのxにおいてFが成立

䜿䞊䝇䝇䝍䝕䜱

Push䛾⤌䜏

bull Push䛸䛿䠛ndash䝴䞊䝄䞊䛜䜰䝥䝸䜢䛧䛶䛔䛺䛟䛶䜒䚸䝸䜰䝹䝍䜲䝮䛻䜰䝥䝸䜈ఱ䜙䛛䛾䜢䜛⤌䜏

ndash DeviceToken䛸䜀䜜䜛䚸➃ᮎ䛸䜰䝥䝸䜢ព䛻≉ᐃ䛩䜛ID䜢䛳䛶ᐇ䛥䜜䜛

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 25: 形式手法勉強会第3回 device tokenの仕様について

制約

bull 論理and or not とか 集合のinとか馴染みの言語でよく使うものは当然ある

bull Alloyに制約の書き方は本当にたくさんありますが今回は2つだけ説明します

implies (含意)

A ならば B である というのを A implies B と記述することができます

Alloyでは implies を =gt とも書きます でも矢印積(-gt)となんか紛らわしい

A implies B というのは (A and B) or (not A) と同じ意味です

「君が金メダリスト ならば 私は総理大臣だ」 が真になる(嘘ではない)のは 「君が金メダリスト かつ 私が総理大臣」 もしくは 「君が金メダリストではない」 ときですよね

限量 そろそろ馴染みが薄い領域

all x e | F eを満たす全てのxにおいてFが成立する

some x e | F eを満たすあるxにおいてFが成立する

no x e | F eを満たす全てのxにおいてFが成立しない

lone x e | F eを満たす高々1つのxにおいてFが成立する

one x e | F eを満たすちょうど1つのxにおいてFが成立

䜿䞊䝇䝇䝍䝕䜱

Push䛾⤌䜏

bull Push䛸䛿䠛ndash䝴䞊䝄䞊䛜䜰䝥䝸䜢䛧䛶䛔䛺䛟䛶䜒䚸䝸䜰䝹䝍䜲䝮䛻䜰䝥䝸䜈ఱ䜙䛛䛾䜢䜛⤌䜏

ndash DeviceToken䛸䜀䜜䜛䚸➃ᮎ䛸䜰䝥䝸䜢ព䛻≉ᐃ䛩䜛ID䜢䛳䛶ᐇ䛥䜜䜛

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 26: 形式手法勉強会第3回 device tokenの仕様について

implies (含意)

A ならば B である というのを A implies B と記述することができます

Alloyでは implies を =gt とも書きます でも矢印積(-gt)となんか紛らわしい

A implies B というのは (A and B) or (not A) と同じ意味です

「君が金メダリスト ならば 私は総理大臣だ」 が真になる(嘘ではない)のは 「君が金メダリスト かつ 私が総理大臣」 もしくは 「君が金メダリストではない」 ときですよね

限量 そろそろ馴染みが薄い領域

all x e | F eを満たす全てのxにおいてFが成立する

some x e | F eを満たすあるxにおいてFが成立する

no x e | F eを満たす全てのxにおいてFが成立しない

lone x e | F eを満たす高々1つのxにおいてFが成立する

one x e | F eを満たすちょうど1つのxにおいてFが成立

䜿䞊䝇䝇䝍䝕䜱

Push䛾⤌䜏

bull Push䛸䛿䠛ndash䝴䞊䝄䞊䛜䜰䝥䝸䜢䛧䛶䛔䛺䛟䛶䜒䚸䝸䜰䝹䝍䜲䝮䛻䜰䝥䝸䜈ఱ䜙䛛䛾䜢䜛⤌䜏

ndash DeviceToken䛸䜀䜜䜛䚸➃ᮎ䛸䜰䝥䝸䜢ព䛻≉ᐃ䛩䜛ID䜢䛳䛶ᐇ䛥䜜䜛

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 27: 形式手法勉強会第3回 device tokenの仕様について

A implies B というのは (A and B) or (not A) と同じ意味です

「君が金メダリスト ならば 私は総理大臣だ」 が真になる(嘘ではない)のは 「君が金メダリスト かつ 私が総理大臣」 もしくは 「君が金メダリストではない」 ときですよね

限量 そろそろ馴染みが薄い領域

all x e | F eを満たす全てのxにおいてFが成立する

some x e | F eを満たすあるxにおいてFが成立する

no x e | F eを満たす全てのxにおいてFが成立しない

lone x e | F eを満たす高々1つのxにおいてFが成立する

one x e | F eを満たすちょうど1つのxにおいてFが成立

䜿䞊䝇䝇䝍䝕䜱

Push䛾⤌䜏

bull Push䛸䛿䠛ndash䝴䞊䝄䞊䛜䜰䝥䝸䜢䛧䛶䛔䛺䛟䛶䜒䚸䝸䜰䝹䝍䜲䝮䛻䜰䝥䝸䜈ఱ䜙䛛䛾䜢䜛⤌䜏

ndash DeviceToken䛸䜀䜜䜛䚸➃ᮎ䛸䜰䝥䝸䜢ព䛻≉ᐃ䛩䜛ID䜢䛳䛶ᐇ䛥䜜䜛

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 28: 形式手法勉強会第3回 device tokenの仕様について

限量 そろそろ馴染みが薄い領域

all x e | F eを満たす全てのxにおいてFが成立する

some x e | F eを満たすあるxにおいてFが成立する

no x e | F eを満たす全てのxにおいてFが成立しない

lone x e | F eを満たす高々1つのxにおいてFが成立する

one x e | F eを満たすちょうど1つのxにおいてFが成立

䜿䞊䝇䝇䝍䝕䜱

Push䛾⤌䜏

bull Push䛸䛿䠛ndash䝴䞊䝄䞊䛜䜰䝥䝸䜢䛧䛶䛔䛺䛟䛶䜒䚸䝸䜰䝹䝍䜲䝮䛻䜰䝥䝸䜈ఱ䜙䛛䛾䜢䜛⤌䜏

ndash DeviceToken䛸䜀䜜䜛䚸➃ᮎ䛸䜰䝥䝸䜢ព䛻≉ᐃ䛩䜛ID䜢䛳䛶ᐇ䛥䜜䜛

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 29: 形式手法勉強会第3回 device tokenの仕様について

䜿䞊䝇䝇䝍䝕䜱

Push䛾⤌䜏

bull Push䛸䛿䠛ndash䝴䞊䝄䞊䛜䜰䝥䝸䜢䛧䛶䛔䛺䛟䛶䜒䚸䝸䜰䝹䝍䜲䝮䛻䜰䝥䝸䜈ఱ䜙䛛䛾䜢䜛⤌䜏

ndash DeviceToken䛸䜀䜜䜛䚸➃ᮎ䛸䜰䝥䝸䜢ព䛻≉ᐃ䛩䜛ID䜢䛳䛶ᐇ䛥䜜䜛

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 30: 形式手法勉強会第3回 device tokenの仕様について

Push䛾⤌䜏

bull Push䛸䛿䠛ndash䝴䞊䝄䞊䛜䜰䝥䝸䜢䛧䛶䛔䛺䛟䛶䜒䚸䝸䜰䝹䝍䜲䝮䛻䜰䝥䝸䜈ఱ䜙䛛䛾䜢䜛⤌䜏

ndash DeviceToken䛸䜀䜜䜛䚸➃ᮎ䛸䜰䝥䝸䜢ព䛻≉ᐃ䛩䜛ID䜢䛳䛶ᐇ䛥䜜䜛

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 31: 形式手法勉強会第3回 device tokenの仕様について

Push䛾⤌䜏

1 ➃ᮎ䜢㘓䠄䝴䞊䝄䞊䛾チ䛜せ䜛䠅2 DeviceToken䜢ᚓ3 䝃䞊䝞䞊䛻DeviceToken䜢㘓4 Push౫㢗5 Push

➃ᮎ䠄䜰䝥䝸䠅

GCM

䝃䞊䝞䞊

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 32: 形式手法勉強会第3回 device tokenの仕様について

DeviceToken䛾⪅䛳䜇䜚

bull DeviceToken䛿䛯䜎䛻᪂䛥䜜䜛ndashᮇ㛫䠖䛔DeviceToken䜢䛳䛶Push䜢䜜䜛䛜䚸䜛䛸᪂䛧䛔DeviceToken䛿䛣䜜䛷䛩䜘䛸䛳䛶䛟䜛

ndashᮇ㛫⤊ᚋ䠖䛔DeviceToken䛻䜝䛖䛸䛩䜛䛸䜶䝷䞊䛻䛺䜛

bull 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛧䛯䛣䛸䛿䜙䛥䜜䛺䛔

ndash Push䜢䜝䛖䛸䛧䛶䜑䛶䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 33: 形式手法勉強会第3回 device tokenの仕様について

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 34: 形式手法勉強会第3回 device tokenの仕様について

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

䜶䝷䞊

GCM䠄Google Cloud Messaging for Android䠅䕔DeviceToken䛾䚸᪂䜢䛖䕔䝃䞊䝗䝟䞊䝔䜱䛛䜙Push䛾౫㢗䜢䛡䛶ᐇ㝿䛻android➃ᮎ䛻Push䜢䜛䕔 䠄iPhone䛻䜒䛨䜘䛖䛺䛾䛜䛒䜛䠅

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 35: 形式手法勉強会第3回 device tokenの仕様について

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

䜶䝷䞊

➃ᮎ䕔 Push䜢䜚䛯䛔䜰䝥䝸䛜ධ䛳䛶䛔䜛➃ᮎ䕔䛴䛾䜰䝥䝸䛻䛴䛔䛶⪃䛘䜛ሙ䛻䛿䚸➃ᮎ䛸䜰䝥䝸䛿ど䛜䛷䛝䜛䕔 GCM䛛䜙DT䜢䛡䜛䛸䚸API䜢䛯䛯䛔䛶䛭䜜䜢DB䛻ಖᏑ䛩䜛䕔䜰䝥䝸䛛䜙Push䛾チ䠋ᣄ䜢タᐃ䛷䛝䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 36: 形式手法勉強会第3回 device tokenの仕様について

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

API䝃䞊䝞䞊䕔䜰䝥䝸䛛䜙䛾DT᪂䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛䕔䜰䝥䝸䛛䜙䛾Push䜢䛡䛶䚸DBෆ䛾ሗ䜢᪂䛩䜛

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 37: 形式手法勉強会第3回 device tokenの仕様について

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

㓄ಙ䝞䝑䝏䝃䞊䝞䞊䕔Push䜢チ䛧䛶䛔䜛➃ᮎ䛻Push䜢㓄ಙ䛩䜛䕔GCM䛛䜙䛾DT᪂せㄳ䜢䛡䛶DBෆ䛾DT䜢᪂䛩䜛䕔DT䛜ఱ䜙䛛䛾䛷darrຠ䛻䛺䛳䛶䛔䜛ሙ䚸DB䛻ᑐ䛧䛶ᾘ䛧䜏䜢䛖

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 38: 形式手法勉強会第3回 device tokenの仕様について

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 39: 形式手法勉強会第3回 device tokenの仕様について

䝅䝇䝔䝮యᅗ

GCM

㓄ಙ䝞䝑䝏API

䝃䞊䝞䞊

DB

➃ᮎ䠄䜰䝥䝸䠅

Push

Push

䠄ᮇ㛫䠅᪂DT

DT๐㝖

DT䚸᪂

DTຍ䚸᪂

Pushチ䠋ᣄ

DTຍ䚸᪂

Pushチ䠋ᣄ

Pushෆᐜ䛸䛭䛾䜚ඛDT䜢ᚓ

DT᪂

䜶䝷䞊

DBෆ䛾䝕䞊䝍䛿Ᏻ䛰䜝䛖䛛䠛

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 40: 形式手法勉強会第3回 device tokenの仕様について

ᅇ䛾䛚㢟䠖᮲

bull DeviceToken䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷ኚ䛥䜜䜛bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷Push䛾チ䠋ᣄ䜢ษ䜚䛘䜛

bull 䜰䝥䝸䛿䝷䞁䝎䝮䛺䝍䜲䝭䞁䜾䛷䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䜛ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛯䛣䛸䛿䛥䜜䛺䛔ndash Push䜢䜝䛖䛸䛧䛶GCM䛜Ẽ䛝䚸๐㝖䝣䝷䜾䛜䛴䠄䜶䝷䞊䛿䛳䛶䛣䛺䛔䠅

ndash Push䜢䜒䛖ᗘ䜝䛖䛸䛧䛶䚸GCM䛛䜙䜶䝷䞊䛜䛳䛶䛟䜛

bull ಙ䛿䛔䛴䛷䜒ኻᩋ䛩䜛ᛶ䛜䛒䜛bull DB䛿䜰䝥䝸䛛䜙䛾ኚせㄳ䛜䛒䜛䛛䚸Push䜢䜚GCM䛛䜙⤖ᯝ䛜䛳䛶䛝䛯ẁ㝵䛷᪂䛥䜜䜛

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 41: 形式手法勉強会第3回 device tokenの仕様について

ᅇ䛾䛚㢟䠖せồ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 42: 形式手法勉強会第3回 device tokenの仕様について

䜒䛾䛤䛸䜢ᢳ䛩䜛

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 43: 形式手法勉強会第3回 device tokenの仕様について

䜒䛾䛤䛸䜢ᢳ䛩䜛

bull alloy䜢䛳䛶ド䛩䜛䛻䛿䚸䜒䛾䛤䛸䜢ᢳ䛩䜛సᴗ䛜ᚲせ

bull ᢳ䛿䛸䛳䛶䜒㞴䛧䛔ndash䛒䜛ᗘ䛿䜜䛷䛺䜣䛸䛛䛺䜛ndash↛䛾䝠䝷䝯䜻䛷ゎỴ䛩䜛䛣䛸䜒䛒䜛

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 44: 形式手法勉強会第3回 device tokenの仕様について

య䛾ὶ䜜

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 45: 形式手法勉強会第3回 device tokenの仕様について

ᐃ䛾ᐃ⩏

RSHQRSHQRSHQRSHQ XWLORUGHULQJgt7LPHRSHQRSHQRSHQRSHQXWLORUGHULQJgtHYLFH7RNHQ

VLJVLJVLJVLJ7LPH ^`

VLJVLJVLJVLJHYLFH7RNHQ HYLFH7RNHQ

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFWVLJVLJVLJVLJ3XVK$YDLODELOLW ^`3XVKࡢRQHVLJRQHVLJRQHVLJRQHVLJ3XVK$YDLODEOH3XVK8QDYDLODEOH H[WHQGVH[WHQGVH[WHQGVH[WHQGV 3XVK$YDLODELOLW

bull open䜻䞊䝽䞊䝗䠖䝷䜲䝤䝷䝸䜢ㄞ䜏䜐ndash Time䛸DeviceToken䛻䛿㡰ᗎᵓ㐀䛜䛒䜚䜎䛩䜘䚸䛸ゝ䛳䛶䛔䜛

bull abstract䜻䞊䝽䞊䝗ndash PushAvailability䛾䜏䛻ᡤᒓ䛩䜛䜰䝖䝮䛿darr䛔䛜䚸䛣䜜䜢⥅ᢎ䠄extends䠅䛧䛯㞟䛾䜰䝖䝮䛿Ꮡᅾ䛩䜛

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 46: 形式手法勉強会第3回 device tokenの仕様について

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䜰䝥䝸䛾≧ែ䛿䛝䛟2䛴ndash 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䛛䛹䛖䛛

bull 䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䜛䜢㞟䛸䛧䛶ಖᣢ䛩䜛䛣䛸䛷

ndash Push䜢チ䛧䛶䛔䜛䛛䛹䛖䛛bull PushAvailability䛸 Time 䛾㛵ಀ䛷bull 䜣䜙䜈䜣䛾 one䛿䚸䛻ᑐ䛧䛶 PushAvailability䛜 1䛴䛻Ỵ䜎䜛䛣䛸䜢ព䛩䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 47: 形式手法勉強会第3回 device tokenの仕様について

䜰䝥䝸䛾≧ែ

RQHVLJRQHVLJRQHVLJRQHVLJ$SS6WDWH ^LQVWDOOLQJVHWVHWVHWVHW7LPHࡋࢺࢫSXVK$YDLODELOLW3XVK$YDLODELOLW RQHRQHRQHRQH 7LPH3ࡅXVKࡢ

`^$SS6WDWH㞟ෆࡢせᖖᡂࡘᐇOHWOHWOHWOHW X 7LPH LQVWDOOLQJO PD[gtLQVWDOOLQJ^OQH[WV XSXVK$YDLODELOLWX LQLQLQLQ SXVK$YDLODELOLWO

``

bull 䝴䞊䝄䞊䛸䛾ᖸ΅䛜darr䛔䛯䜑䚸AppState䛿䝅䞁䜾䝹䝖䞁bull darr᮲䛷ᡂ䜚䛴ᐇ䛾䛺䛝᪉

ndash fact䜢䛟௦䜟䜚䛻䚸䝅䜾䝛䝏䝱䛾䜰䝖䝮䛷ᡂ䜚䛴ᐇ䛿グ䛾䜘䛖䛻䛟䛣䛸䛜䛷䛝䜛

௨ୗࡌIDFWIDFWIDFWIDFW ^DOODOODOODOO [$SS6WDWH_OHWOHWOHWOHW X 7LPH [LQVWDOOLQJ

O PD[gt[LQVWDOOLQJ

`

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 48: 形式手法勉強会第3回 device tokenの仕様について

GCM䛾≧ែ

bull GCM䛿DeviceToken䛾ᡂ䛸᪂䜢䛖ndash 23䛾 lone䛿䚸䛻ᑐ䛧䛶 DeviceToken䛜㧗䚻1䛴ᐃ䜎䜛䛣䛸䜢ព䛩䜛䠄䛾ሙ䜒䛒䜛䠅

bull current䛸previous䛾㛵ಀ䜢䜒䛳䛶䚸3䛴䛾≧ែ䜢䛩䜛ndash ᖖ≧ែ䠖current䛜Ꮡᅾ䛧䚸previous䛜ndash ᮇ㛫䠖current䚸previous䛹䛱䜙䜒Ꮡᅾndash 䜰䝥䝸๐㝖䝣䝷䜾䠖currentprevious䛹䛱䜙䜒

RQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 49: 形式手法勉強会第3回 device tokenの仕様について

GCM䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJamp06WDWH ^FXUUHQWHYLFH7RNHQ ORQHORQHORQHORQH 7LPH ᅾຠ HYLFH7RNHQSUHYLRXVHYLFH7RNHQ ORQHORQHORQHORQH 7LPHᮇ㛫 HYLFH7RNHQ

`^DOODOODOODOO W7LPH^

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHV SUHYLRXVWQH[W FXUUHQWWQRQRQRQR FXUUHQWWLPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR SUHYLRXVW

``

bull GCMState䛷ᖖ䛻ᡂ䜚䛴ᐇ䛿ḟ䛾2Ⅼndash previous䛜Ꮡᅾ䛩䜛䛺䜙䚸current䜒Ꮡᅾ䛧䛶䚸previous䛾ḟ䛾

DeviceToken䜢ᣦ䛧䛶䛔䜛ndash current䛜䛺䜙䚸previous䜒䠄䛴䜎䜚๐㝖䝣䝷䜾䛜䛳䛶䛔䜛䠅

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 50: 形式手法勉強会第3回 device tokenの仕様について

DB䛾≧ែRQHVLJRQHVLJRQHVLJRQHVLJ6WDWH ^GDWDHYLFH7RNHQ ORQHORQHORQHORQH3XVK$YDLODELOLW7LPH

`

bull 䛻䛴䛔䛶䚸DeviceToken䛸PushAvailability䛾⤌䜢ಖᣢ䛧䛶䛔䜛

bull DeviceToken1䛴䛻䛴䛝䚸PushAvailability䛜㧗䚻1䛴ᑐᛂ䛧䛶䛔䜛ndash lone䛜darr䛔䛸䚸(DT0 Available)䛸(DT0Unavailable)䜢䛻ಖᣢ䛧䛶䛧䜎䛖ᛶ䛜䛒䜛

ndash lone䛷䛿䛺䛟one䛰䛸䚸䛶䛾DeviceToken䜢ᖖ䛻ಖᣢ䛧䛶䛧䜎䛖

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 51: 形式手法勉強会第3回 device tokenの仕様について

స䛾ᐃ⩏

bull 䛷䛩䛜䛚䛥䜙䛔ndash alloy䛿䛩䜉䛶ㄽᘧ䛷䛛䜜䜛ndashኚ䛾䛿⤯ᑐ䛻ኚ䛥䜜䛺䛔

bull స䛿䛹䛾䜘䛖䛻䛥䜜䜛䛛䠛ndash 2䛴䛾䜢ᘬ䛸䛧䚸䛭䛾㛫䛷ᡂ䜚䛴ㄽᘧ䜢グ䛧䛶䛔䛟

ndashᘬ䜢ᣢ䛴ㄽᘧ䛾䛣䛸䜢ㄒ䠄pred䠅䛸䛔䛖

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 52: 形式手法勉強会第3回 device tokenの仕様について

䛺䛻䜒䛧䛺䛔స

SUHGSUHGSUHGSUHG $SS6NLSWW7LPH^LQVWDOOLQJW LQVWDOOLQJWOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW _[W [W

`SUHGSUHGSUHGSUHG amp06NLSWW7LPH^

OHWOHWOHWOHW [ amp06WDWHFXUUHQW amp06WDWHSUHYLRXV _[W [WDQGW W`SUHGSUHGSUHGSUHG 6NLSWW7LPH^6WDWHGDWDW 6WDWHGDWDW

`

bull t䛸t䛾㛫䛷䛭䜜䛮䜜䛾≧ែ䛜ኚ䛧䛺䛔䛣䛸䜢䛩

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 53: 形式手法勉強会第3回 device tokenの仕様について

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull 䜰䝥䝸䛾స䛿㒊䛷3䛴ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛ndash Push䜢チ䛩䜛ndash Push䜢ᣄ䛩䜛

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 54: 形式手法勉強会第3回 device tokenの仕様について

䜰䝥䝸䛾స

SUHGSUHGSUHGSUHG $SS$FFHSWWW7LPH^3XVKࡢチOHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK8QDYDLODEOH WࡢⅬ3ࡣXVKࡣᣄࡉ[W 3XVK$YDLODEOH WࡣⅬࡢ 3XVKࡣチࡉ

`amp06NLSgtWW6NLSgtWW

`SUHGSUHGSUHGSUHG $SSHQWW7LPH^3XVKࡢᣄ

OHWOHWOHWOHW [ $SS6WDWHSXVK$YDLODELOLW ^[W 3XVK$YDLODEOH[W 3XVK8QDYDLODEOH

`amp06NLSgtWW6NLSgtWW

`

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 55: 形式手法勉強会第3回 device tokenの仕様について

GCM䛾స

bull GCM䛾స䛿2䛴ndash DeviceToken䛾᪂䠄ᮇ㛫䜈㑄䠅ndashᮇ㛫䛾⤊

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 56: 形式手法勉強会第3回 device tokenの仕様について

GCM䛾సSUHGSUHGSUHGSUHG amp08SGDWHWW7LPH^HYLFH7RNHQ ᪂ࡢ$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVFXUUHQWW๓᮲㸸FXUUHQWࡀᏑᅾ㸦๐㝖ࡗࢢ㸧QRQRQRQR JVSUHYLRXVW๓᮲㸸SUHYLRXVࡀ㸦ᮇ㛫㸧JVSUHYLRXVW JVFXUUHQWWᚋ᮲㸸WࡀFXUUHQWࡢWSUHYLRXVࡢ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

RQHRQHRQHRQH SUHYLRXVWLPSOLHVLPSOLHVLPSOLHVLPSOLHVSUHYLRXVWQH[W FXUUHQWWᐃࡣFXUUHQW

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 57: 形式手法勉強会第3回 device tokenの仕様について

GCM䛾సSUHGSUHGSUHGSUHG amp0([SLUHWW7LPH^ᮇ㛫ࡢ⤊$SS6NLSgtWWOHWOHWOHWOHW JV amp06WDWH ^

RQHRQHRQHRQH JVSUHYLRXVW๓᮲㸸ᮇ㛫QRQRQRQR JVSUHYLRXVWᚋ᮲㸸ᮇ㛫ࡣ⤊ࡓࡋJVFXUUHQWW JVFXUUHQWWᚋ᮲㸸FXUUHQWࡢࡑࡣ

`6NLSgtWW

`

7 7

7 7

W

W

SUHYLRXV FXUUHQW

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 58: 形式手法勉強会第3回 device tokenの仕様について

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 3$3$3$3$

7 3$

7 38

7777 38383838

㞟ࡢࡋ㞟ࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 59: 形式手法勉強会第3回 device tokenの仕様について

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

㐪ࡢࠕࠕ

7777 3$3$3$3$

7 3$

7 38

7777 38383838

7 3$

7 38

ࡍ᪂ࡋᕥࡣࠕ

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 60: 形式手法勉強会第3回 device tokenの仕様について

DB䛾సSUHGSUHGSUHGSUHG 8SGDWHWW7LPH^$3ࡢࢧせㄳࡅ᪂WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡀᚲせࡉࢺࢫࡀ$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW JV amp06WDWHGEV 6WDWHS $SS6WDWHSXVK$YDLODELOLWW^JVFXUUHQWWSQRWQRWQRWQRW LQLQLQLQ GEVGDWDW๓᮲㸸㘓ࡉGEVGDWDW GEVGDWDWᚋ᮲㸸

JVFXUUHQWWSFXUUHQW3XVK⤌ࡢ㘓 JVSUHYLRXVW3XVK$YDLODELOLW SUHYLRXV๐㝖

``

7777 38383838

ᕪ㞟ࡣࠕ

7777 3$3$3$3$

7 3$

7 38

7 3$

7 38

ࡍฟせdarrࡣࡗ$㞟ࡣ$

7777 3$3$3$3$

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 61: 形式手法勉強会第3回 device tokenの仕様について

Push

bull Push䜚䛾ᵝ䛚䛥䜙䛔ndash Push䛿䛭䜜䜢チ䛧䛶䛔䜛䜰䝥䝸䛻ᑐ䛧䛶䛖ndash ᖖ䛾䛿䚸ఱ䜒ኚ䜟䜙䛺䛔ndash ᮇ㛫䛿DB䛜᪂䛥䜜䜛ndash 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯ሙ

bull 1ᅇ䛾Push䛷䚸GCM䛻๐㝖䝣䝷䜾䛜䛴bull 2ᅇ䛾Push䛷䚸䝃䞊䝞䞊ഃ䛻䜶䝷䞊䛜䛳䛶䛝䛶䚸DBෆ䛾䝕䞊䝍䛜๐㝖䛥䜜䜛

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 62: 形式手法勉強会第3回 device tokenの仕様について

Push

7 7

SUHYLRXVW FXUUHQWW

7 7ᮇ㛫

7 7ࢫ

ᚋᅇࢺ

7 7ࢫ

ᚋᅇࢺ

7 3$ 7 3$

GDWDW GDWDW

7 7

SUHYLRXVW FXUUHQWW

7 3$

GDWDW

7 3$

GDWDW

≧ែኚdarrࡋ

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 63: 形式手法勉強会第3回 device tokenの仕様について

Push

bull Ẽ䛝ndash AppState䛿ఱ䜒ኚ䜟䜙䛺䛔ndash GCMState䛜ኚ䜟䜛䛾䛿䚸DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯䛾䜏

ndash DBState䛜ኚ䜟䜛䛾䛿䚸ᮇ㛫䛛䚸๐㝖䝣䝷䜾䛜䛳䛶䛔䛯

bull previous䛸current䛹䛱䜙䜒䛒䜛䛛䚸䛹䛱䜙䜒䛺䛔

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 64: 形式手法勉強会第3回 device tokenの仕様について

Push䠖AppState

bull AppState䛿ఱ䜒ኚ䜟䜙䛺䛔

SUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW

`

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 65: 形式手法勉強会第3回 device tokenの仕様について

Push䠖GCMStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWW

`

ndash DB䛻Pushチ䛸㘓䛥䜜䛶䛔䜛䜰䝥䝸䛜ndash 䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛔䛯

bull 䛺䜙䜀ndash current䜢䛻䛩䜛䠄GCMState䛾ᐃ⩏䛛䜙previous䜒䛻䛺䜛䠅

bull 䛭䛖䛷䛺䛡䜜䜀䠄HOVHHOVHHOVHHOVH䠅ndash GCM䛿ኚ䜟䜙䛺䛔

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 66: 形式手法勉強会第3回 device tokenの仕様について

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull pdarr䚸c䚸dtnec rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 67: 形式手法勉強会第3回 device tokenの仕様について

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull p䚸c䚸dt=p rarr dt=dt=p䚸pnext=c䛰䛛䜙䚸DB䛿p䜢ᾘ䛧䛶c䜢ຍ䛩䜛bull p䚸c䚸dt=c rarr dt䚸dt䛹䛱䜙䜒䛻䛺䜛䛯䜑DB䛿ኚdarr䛧bull p䚸c䚸dtnepc rarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 68: 形式手法勉強会第3回 device tokenの仕様について

Push䠖DBStateSUHGSUHGSUHGSUHG 3XVK1RWLILFDWLRQWW7LPH^3XVK$SS6NLSgtWW^

VRPHVRPHVRPHVRPH 6WDWHGDWDW3XVK$YDLODEOH amp06WDWHFXUUHQWSUHYLRXVWWQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR amp06WDWHFXUUHQWWHOVHHOVHHOVHHOVH amp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWD

GW GEW3XVK$YDLODEOH3XVKチࡋHYLFH7RNHQࡢ㞟GW GW amp06WDWHSUHYLRXVW GWࡢᮇ㛫ࡢHYLFH7RNHQࡢ㞟GW GW amp06WDWHFXUUHQWW_GWࡢຠHYLFH7RNHQࡢ㞟

GEW GEWGWQH[W3XVK$YDLODEOH GW3XVK$YDLODEOH

`

bull pdarr䚸cdarrrarr dt䛿䚸dt=dt䛰䛜䛣䜜䛿darrຠ䛺DeviceToken䛺䛯䜑䚸๐㝖䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 69: 形式手法勉強会第3回 device tokenの仕様について

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 70: 形式手法勉強会第3回 device tokenの仕様について

ᮇ᮲

SUHGSUHGSUHGSUHG LQLWW7LPH^ᮇ᮲OHWOHWOHWOHW GW ILUVWHYLFH7RNHQS 3XVK$YDLODEOH ^WLQLQLQLQ $SS6WDWHLQVWDOOLQJ ࡉࢺࢫࡣ$SS6WDWHSXVK$YDLODELOLWW S3XVKチࡉamp06WDWHFXUUHQWW GW ᅾࡢ HYLFH7RNHQ ࡣ GW QRQRQRQR amp06WDWHSUHYLRXVW௨๓ࡢ HYLFH7RNHQ darrࡣ6WDWHGDWDW GW Sࡣࡀࢱࢹධࡗ

``

bull alloy䛾ndash t䛜ᮇ᮲䜢䛯䛩䚸䛸䛔䛖ㄽᘧ

bull first amp DeviceTokenndash ᐇ䛿 first 䛸䛛 next 䛿 ordering 䝷䜲䝤䝷䝸䜢ㄞ䜏䜣䛰䛻䛻䛘䜛䜘䛖䛻䛺䜛䜒䛾䛷䚸㡰ᗎᵓ㐀䛾ጞ䜑䛾䠄first䠅䜔䛒䜛䛾ḟ䛾䜢䠄next䠅䜢䛩

ndash ᅇ䚸㡰ᗎᵓ㐀䛿 Time 䛸 DeviceToken䛻ධ䜜䛶䛔䜛䛯䜑䚸first䛿ᐇ䛿2䛴䛾䜢ᣢ䛴ndash 䛭䛾䛖䛱䛾DeviceToken䛾᪉䛷䛩䜘䚸䛸ไ㝈䛩䜛䛯䜑䛻amp₇⟬䛜䜟䜜䛶䛔䜛

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 71: 形式手法勉強会第3回 device tokenの仕様について

䛾స䜢グ

bull 䛣䜜䜎䛷స䛳䛶䛝䛯స䛿䚸䛺䛨䜏䛾ゝㄒ䛷ゝ䛘䜀㛵䜢స䛳䛯䛣䛸䛻ᑐᛂ䛩䜛

bull 㛵䜢స䛳䛯䛰䛡䛷䛿ព䛜darr䛟䚸䛣䜜䜢䝯䜲䞁䝇䝖䝸䞊䝮䛾䛷ᐇ䛧䛶䜔䜙䛺䛡䜜䜀䛺䜙䛺䛔

bull alloy䛷䛿䚸IDFWIDFWIDFWIDFW䜢1䛴ᑟධ䛩䜛䛣䛸䛷䚸䛣䜜䜙䛾స䜢ᐇ䝖䝺䞊䝇䛻䛩䜛䛣䛸䛜䛷䛝䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 72: 形式手法勉強会第3回 device tokenの仕様について

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 73: 形式手法勉強会第3回 device tokenの仕様について

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 74: 形式手法勉強会第3回 device tokenの仕様について

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 75: 形式手法勉強会第3回 device tokenの仕様について

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 76: 形式手法勉強会第3回 device tokenの仕様について

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 77: 形式手法勉強会第3回 device tokenの仕様について

TracesIDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

bull alloy䛾ndash 㛤ጞᚋ䛿ᮇ᮲䛜䛯䛥䜜䛶䛔䜛ndash last 䜢㝖䛟ព䛾 t 䛸䚸 t 䛾ḟ䛾 t 䛻䛴䛔䛶䚸స䛾䛹䜜䛛䛜ᐇ䛥䜜䜛

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 78: 形式手法勉強会第3回 device tokenの仕様について

య䛾ὶ䜜䠄ᥖ䠅

bull ᐃ䜢ᐃ⩏ndash 䚸DeviceToken䚸Push

bull ≧ែ䜢ᐃ⩏ndash 䜰䝥䝸䚸GCM䚸DB䛾≧ែ

bull స䜢ᐃ⩏ndash DeviceToken䛾᪂䜔Push䛺䛹䛾స䜢ᐃ⩏

bull ᮇ᮲䛸䛾䛣䜚䛖䜛స䜢グbull 䛯䛧䛶䜋䛧䛔せồ䜢䜰䝃䞊䝅䝵䞁䛸䛧䛶グ

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 79: 形式手法勉強会第3回 device tokenの仕様について

䛯䛧䛶䜋䛧䛔せồ䠄ᥖ䠅

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 80: 形式手法勉強会第3回 device tokenの仕様について

᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜲䞁䝇䝖䞊䝹䛧䛶䛔䜛䛶䛾Ⅼ䛷䚸DB䛻ఱ䜙䛛䛾ሗ䛜ධ䛳䛶䛔䜛䛣䛸

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 81: 形式手法勉強会第3回 device tokenの仕様について

䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 82: 形式手法勉強会第3回 device tokenの仕様について

ド⤖ᯝ

bull 䛹䛱䜙䜒䠄counterexample䠅䛜ぢ䛴䛛䛳䛯

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 83: 形式手法勉強会第3回 device tokenの仕様について

⤖ᯝ䜢䛩䜛๓䛻

DEVWUDFWDEVWUDFWDEVWUDFWDEVWUDFW VLJVLJVLJVLJ (YHQW^` ᐇࡉసࡢぴRQHRQHRQHRQH VLJVLJVLJVLJ $SS8QLQVWDOO(YHQW$SS$FFHSW(YHQW$SSHQ(YHQWamp08SGDWH(YHQWamp0([SLUH(YHQW8SGDWH(YHQW3XVK1RWLILFDWLRQ(YHQW H[WHQGVH[WHQGVH[WHQGVH[WHQGV (YHQW^`

RQHRQHRQHRQHVLJVLJVLJVLJ(YHQW6WDWH ^S(YHQW7LPH ๓ࢺࡢQ(YHQW7LPHᚋࢺࡢ

`^DOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W ^

VRPHVRPHVRPHVRPH QWSW QW

`QRQRQRQR QODVW

`

bull ༢䛻䛩䜛䛰䛡䛷䛿䚸䛻䛹䛾స䛜䜟䜜䛯䛛䛜䜟䛛䜙䛺䛔䛾䛷䚸グ䛾䜘䛖䛻EventState䜢స䛳䛶ᐇ䛥䜜䛯స䛜ぢ䛘䜛䜘䛖䛻䛧䛶䛚䛟

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 84: 形式手法勉強会第3回 device tokenの仕様について

⤖ᯝ䜢䛩䜛๓䛻

SUHGSUHGSUHGSUHG $SS8QLQVWDOOWW7LPH^ࢺࢫࡢ$SS8QLQVWDOO(YHQW LQLQLQLQ(YHQW6WDWHQW๓᮲WLQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡢⅬࡉࢺࢫࡣᚋ᮲WQRWQRWQRWQRW LQLQLQLQ $SS6WDWHLQVWDOOLQJ WࡉࢺࢫࡣⅬࡢamp06NLSgtWWࡋኚࡣࡘ0amp6NLSgtWW

`

bull స䛻グ䛾䜘䛖䛺グ䜢ຍ䛘䛶䛔䛟

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 85: 形式手法勉強会第3回 device tokenの仕様について

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䜒䛾䛩䛤䛟䜟䛛䜚䛻䛟䛔䛾䛷⤖ᯝ䜢ᙧ䛧䜎䛩

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 86: 形式手法勉強会第3回 device tokenの仕様について

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛂Next䛃䛾ᶓ䛾䛂Projectionnone䛃䜢䜽䝸䝑䜽䛧䚸Time䜢㑅ᢥ䛩䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 87: 形式手法勉強会第3回 device tokenの仕様について

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull ୗ䛾༳䝪䝍䞁䜢ᢲ䛩䛣䛸䛷䚸㛫䜢㐍䜑䛯䜚ᡠ䛩䛣䛸䛜䛷䛝䜛䜘䛖䛻䛺䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 88: 形式手法勉強会第3回 device tokenの仕様について

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛥䜙䛻䚸䛂Theme䛃䝪䝍䞁䜢ᢲ䛩䛸䛾䜘䛖䛺䜴䜱䞁䝗䜴䛜ฟ䛶䛟䜛䚹䛖䜎䛔䛣䛸タᐃ䛩䜛䛸hellip

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 89: 形式手法勉強会第3回 device tokenの仕様について

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛣䜎䛷䛷䛝䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 90: 形式手法勉強会第3回 device tokenの仕様について

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛿䛨䜑䛻GCMUpdate䛜䜟䜜䚸DeviceToken0rarrDeviceToken1䛾ᮇ㛫䛻ධ䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 91: 形式手法勉強会第3回 device tokenの仕様について

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull GCMExpire䛜䜟䜜䚸DeviceToken0䛜darrຠ䛻bull 䛣䛾Ⅼ䛷䚸DBෆ䛾䝕䞊䝍䛸GCM䛾ᣦ䛩

DeviceToken䛜㞳䛧䛶䛔䜛

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 92: 形式手法勉強会第3回 device tokenの仕様について

䛂᪂䛾DT䜢ぢኻ䜟䛺䛔䛃䛾

bull 䛣䛾≧ែ䛷Push䛜䜟䜜䚸DB䛜䝴䞊䝄䞊䜢ぢኻ䛖

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 93: 形式手法勉強会第3回 device tokenの仕様について

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 94: 形式手法勉強会第3回 device tokenの仕様について

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜Push䜢ᣄ

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 95: 形式手法勉強会第3回 device tokenの仕様について

䛂䛔DT䛜ṧ䜛䛃䛾

bull API䛜䛛䜜䚸Pushᣄ䛾䛜DB䛻㘓䛥䜜䜛

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 96: 形式手法勉強会第3回 device tokenの仕様について

䛂䛔DT䛜ṧ䜛䛃䛾

bull 䝴䞊䝄䞊䛜䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 97: 形式手法勉強会第3回 device tokenの仕様について

䛂䛔DT䛜ṧ䜛䛃䛾

bull Push

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 98: 形式手法勉強会第3回 device tokenの仕様について

䛂䛔DT䛜ṧ䜛䛃䛾

bull ᗘPushbull DB䛾䛾䝕䞊䝍䛿PushUnavailable䛾䜎䜎䛔䛴䜎䛷䜒᪂䛥䜜䛺䛔

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 99: 形式手法勉強会第3回 device tokenの仕様について

⤖ᯝ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndashᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 100: 形式手法勉強会第3回 device tokenの仕様について

ᛂ⏝䠖䝰䝕䝹䛾ᣑᙇ

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 101: 形式手法勉強会第3回 device tokenの仕様について

ᛂ⏝䠖dry run

bull ➃ᮎ䛻Push䜢䜙䛪䛻䚸GCM䛻Push䛾䝔䝇䝖ಙ䛜

bull 䛭䛾㝿䚸DeviceToken䛾ᮇ㛫䛰䛳䛯ሙ䛿䚸᪂䛧䛔DeviceToken䜢ᩍ䛘䛶䛟䜜䜛

bull ➃ᮎ䛻䛿ᒆ䛛䛺䛔䛾䛷䚸Push䜢ᣄ䛧䛶䛔䜛ே䛻䜒䜜䜛

bull dry run 䛾స䜢ຍ䛘䛶䝰䝕䝹䜢䛝䛘䛶䜏䜘䛖

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 102: 形式手法勉強会第3回 device tokenの仕様について

dry run 䛻䜘䛳䛶ኚ䛩䜛䜒䛾

bull 䜰䝥䝸䛾≧ែndashኚ䛺䛧

bull 䠣䠟䠩䛾≧ែndashኚ䛺䛧

bull DB䛾≧ែndashᖖrarrኚ䛺䛧ndashᮇ㛫rarr᪂䛧䛔DeviceToken䛜㘓䛥䜜䜛ndash䛭䜜௨እrarr䛶๐㝖䛥䜜䜛

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 103: 形式手法勉強会第3回 device tokenの仕様について

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 104: 形式手法勉強会第3回 device tokenの仕様について

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull GCM䛾≧ែ䛿ኚ䜟䜙䛺䛔

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 105: 形式手法勉強会第3回 device tokenの仕様について

dryrunసSUHGSUHGSUHGSUHG UUXQWW7LPH^UUXQ(YHQW LQLQLQLQ (YHQW6WDWHQW$SS6NLSgtWWamp06NLSgtWWOHWOHWOHWOHW GE 6WDWHGDWDJV amp06WDWH

GW GEW3XVK$YDLODELOLWGW GW JVSUHYLRXVWGW GW JVFXUUHQWW_

GEW GEWGWQH[WGEWgtGW GW3XVK$YDLODELOLW

`

bull Push䛷䛿チ䛧䛶䛔䜛䝴䞊䝄䞊䛾䜏䛰䛳䛯䛾䛜䚸dryrun䛷䛿㛵ಀ䛺䛟స䛧䛶䛔䜛

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 106: 形式手法勉強会第3回 device tokenの仕様について

ᐇ䝖䝺䞊䝇䠄ᥖ䠅

IDFWIDFWIDFWIDFW7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 107: 形式手法勉強会第3回 device tokenの仕様について

ᐇ䝖䝺䞊䝇䠄ಟṇᚋ䠅

SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW

`SUHGSUHGSUHGSUHG 7UDFHV^ᐇࢫࢺLQLWgtILUVWDOODOODOODOO W7LPH ODVW_OHWOHWOHWOHW W WQH[W _$SS8QLQVWDOOgtWWRURURURU $SS$FFHSWgtWWRURURURU $SSHQgtWWRURURURUamp08SGDWHgtWWRURURURU amp0([SLUHgtWWRURURURU8SGDWHgtWWRURURURU3XVK1RWLILFDWLRQgtWW RURURURUUUXQgtWW

DOODOODOODOO GLVMGLVMGLVMGLVM W7LPH ODVWWWQH[WV ODVW_amp08SGDWHgtWWQH[WDQGDQGDQGDQG amp0([SLUHgtWWQH[WLPSOLHVLPSOLHVLPSOLHVLPSOLHV

VRPHVRPHVRPHVRPH WWQH[WV WSUHYV _UUXQgtWWQH[W`

bull IDFWIDFWIDFWIDFW䜢SUHGSUHGSUHGSUHG䛻䛧䚸Dryrun䛾darr䛷Traces䜢2䛴䛻ศ䛡䜛bull ᚋ䛾ᘧ䛿䚸ᮇ㛫䛻ᚲ䛪Dryrun䛜ᐇ䛥䜜䜛䛣䛸䜢ព䛩䜛

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 108: 形式手法勉強会第3回 device tokenの仕様について

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 109: 形式手法勉強会第3回 device tokenの仕様について

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

DVVHUWDVVHUWDVVHUWDVVHUWR1RWRVH8VHU ^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO W$SS6WDWHLQVWDOOLQJ _VRPHVRPHVRPHVRPH 6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN R1RWRVH8VHU IRUIRUIRUIRU

᪂䛾DT䜢ᖖ䛻ぢኻ䜟䛺䛔䠄ಟṇᚋ䠅

bull Traces 䛜ᐇ䛷䛿䛺䛟䛺䛳䛯䛯䜑䚸assert ෆ䛷௬ᐃ䛧䛺䛡䜜䜀䛺䜙䛺䛔bull implies 䛾ᡭ๓䛻Traces1䜢⨨䛟䛣䛸䛷䚸๓䛸䛨⤖ᯝ䛜ᚓ䜙䜜䜛䛸䛸䜒䛻䚸

Traces2䛻ኚ䛘䜛䛰䛡䛷Dryrun䜢㐺⏝䛷䛝䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 110: 形式手法勉強会第3回 device tokenの仕様について

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇ๓䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^

WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 111: 形式手法勉強会第3回 device tokenの仕様について

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ1䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO GLVMGLVMGLVMGLVM WWW7LPH ODVW_^WLQLQLQLQ WQH[WVWLQLQLQLQ WQH[WV$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W

`LPSOLHVLPSOLHVLPSOLHVLPSOLHV QRQRQRQR 6WDWHGDWDWQH[W

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䛻䛟ndash 䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹ᚋ䚸Push䜢2ᗘ䛳䛯Ⅼ䛷ᾘ䛥䜜䜛䛿䛪䛷䛒䜛

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 112: 形式手法勉強会第3回 device tokenの仕様について

䛔DT䛿䛔䛴䛛䛿๐㝖䛥䜜䜛䠄ಟṇᚋ2䠅

DVVHUWDVVHUWDVVHUWDVVHUWHOHWHKHQ8QLQVWDOO^7UDFHV LPSOLHVLPSOLHVLPSOLHVLPSOLHV

DOODOODOODOO WWWWW7LPH ODVWW7LPH_^W WW W LQLQLQLQ WQH[WV W㹼W ࡣ W ᚋW LQLQLQLQ PD[gtW WW WQH[WV W ࡣ W㹼W ᚋW WW W$SS8QLQVWDOOgtWWQH[W3XVK1RWLILFDWLRQgtWWQH[W㡰3ࠊࡎXVKUUXQࡣ3XVK1RWLILFDWLRQgtWWQH[WᅇࡘࡎࡤUUXQgtWWQH[WUUXQgtWWQH[W

`LPSOLHVQR6WDWHGDWDW

`FKHFNFKHFNFKHFNFKHFN HOHWHKHQ8QLQVWDOO IRUIRUIRUIRU

bull 䜰䝥䝸䛜䜰䞁䜲䞁䝇䝖䞊䝹䛥䜜䛶䛛䜙Push䛸dryrun䛜ప2ᅇ䛪䛴䜀䜜䜜䜀DeviceToken䛿๐㝖䛥䜜䜛

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 113: 形式手法勉強会第3回 device tokenの仕様について

bull DoNotLoseUser2䛿䛜ぢ䛴䛛䜙䛺䛛䛳䛯

ド⤖ᯝ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 114: 形式手法勉強会第3回 device tokenの仕様について

䛂䛔DT䛜ṧ䜛2䛃䛾

bull ᮇ≧ែ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 115: 形式手法勉強会第3回 device tokenの仕様について

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Pushᣄ

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 116: 形式手法勉強会第3回 device tokenの仕様について

䛂䛔DT䛜ṧ䜛2䛃䛾

bull DB᪂

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 117: 形式手法勉強会第3回 device tokenの仕様について

䛂䛔DT䛜ṧ䜛2䛃䛾

bull 䜰䝥䝸䜰䞁䜲䞁䝇䝖䞊䝹

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 118: 形式手法勉強会第3回 device tokenの仕様について

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䛸Dryrun䛷䚸⤖ᯝ䛜ኚ䜟䜙䛺䛔䠄EventState䜢ぢ䜛䛸䚸䛻䛣䛳䛶䛔䜛䛣䛸䛜䜟䛛䜛䠅

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 119: 形式手法勉強会第3回 device tokenの仕様について

䛂䛔DT䛜ṧ䜛2䛃䛾

bull Push䚸䜎䛯䛿Dryrun2ᅇ

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 120: 形式手法勉強会第3回 device tokenの仕様について

⤖ㄽ

bull ᪂䛾DeviceToken䜢ᖖ䛻ぢኻ䜟䛺䛔ndash ᮇ㛫ෆ䛻䜰䝥䝸䚸䜰䝥䝸ഃ䞉㓄ಙ䝃䞊䝞䞊ഃ᪉䛛䜙᪂䛾㐩䛜᮶䛺䛡䜜䜀DT䜢ぢኻ䛖

ndash ᮇ㛫ෆ䛻dryrun䛜ᐇ䛥䜜䜜䜀䚸DT䜢ぢኻ䛖䛣䛸䛿darr䛔䚹GCM䛻䜘䜛DT᪂䛿㢖ᗘ䛜ᑡ䛺䛔䛾䛷䚸䛣䛾௬ᐃ䛿ጇᙜ䛷䛒䜛

bull 䛔DeviceToken䛿䛔䛴䛛䛿๐㝖䛥䜜䜛ndash Push䜢ᣄ䛧䛯䜎䜎䜰䝥䝸䜢䜰䞁䜲䞁䝇䝖䞊䝹䛩䜛䛸䚸๐㝖䛥䜜䛯䛣䛸䜢䜛䛜darr䛔

ndash dryrun䛾ሙ䚸➃ᮎ䜎䛷䛿䝏䜵䝑䜽䛧䛻䛔䛛䛺䛔䛯䜑䚸GCM䛻DT䛜䛒䜛㝈䜚㝖䛥䜜䛺䛔

ndash 䛥䜙䛻䚸ᮇ㛫ෆ䛻dryrun䜢ᐇ䛩䜛䛣䛸䜢௬ᐃ䛧䛶䛔䜛䛯䜑䚸GCM䛜DT䜢᪂䛩䜛䛣䛸䛷DBෆ䛾䝕䞊䝍䛜䛟䛺䜛䛣䛸䜒ᮇᚅ䛷䛝䛺䛔

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 121: 形式手法勉強会第3回 device tokenの仕様について

䜎䛸䜑

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛

Page 122: 形式手法勉強会第3回 device tokenの仕様について

䜎䛸䜑䠖ఱ䜢ぢ䛴䛡䛯䛾䛛䠛

bull DT᪂䚸Push䚸dryrun䛾䛭䜜䛮䜜䛾㢖ᗘ䛻䛴䛔䛶䚸䛹䛾䜘䛖䛺๓ᥦ䜢䛚䛟䛛䛻䜘䛳䛶⤖ㄽ䛜ኚ䜟䜛

bull 䛸䛔䛖䛣䛸䜢䚸alloy䛻䜘䛳䛶ཝᐦ䛻䛧䛯bull ᵝ⟇ᐃ䛾ẁ㝵䛷ᬯ㯲䛾䛖䛱䛻ඹ䛥䜜䛶䛔䜛䚸䛒䜛䛔䛿ඹ䛥䜜䛪䛻darrពୗ䛻䛒䜛䛣䜜䜙䛾๓ᥦ䜢䚸alloy䜢䛖䛣䛸䛷䛧䚸ㄽ䛩䜛䛣䛸䛜䛸䛺䜛