SlideShare una empresa de Scribd logo
1 de 54
Chromeウェブストア
• Hostedアプリ
– Webサーバから必要なファイルが提供される
• Packagedアプリ
– 必要なファイル群がChromeにインストールさ
れる
• 拡張機能
– Chromeに便利な機能を追加する
The Chrome Web Store lets you
publish apps and games – either free
or paid – where Google Chrome users
can easily find them.
開発者
ユーザー
登録
The Chrome Web Store lets you
publish apps and games – either free
or paid – where Google Chrome users
can easily find them.
開発者
ユーザー発見
開発者
ユーザー発見
利用
The Chrome Web Store lets you
publish apps and games – either free
or paid – where Google Chrome users
can easily find them.
開発者 ユーザー
開発者 ユーザー
決済機能の
開発が必要
開発者
ユーザー
開発者
ユーザー
種別 アプリでの利用 拡張機能での利用
アプリ自体の販売
(1回、定期購入)
○ ×
アプリ内課金
(デジタルグッズなどの販
売) ○ ○
広告の掲載
○ ○
アプリ自体の販売
・・・Chromeウェブストア決済
• 1回払い
• 月間登録料
• 年間登録料
• 無料試用版
無料試用版
• Hostedアプリ
– Licensing API
• Packagedアプリ
– 機能制限版とフル機能版の2つをリリース
Licensing API
• OpenID認証を行う
• ライセンスサーバにリクエストを送る
• 購入状況によって機能を制限する
https://www.googleapis.com
/chromewebstore/v1/licenses/[AppId]/[UserID]
https://www.googleapis.com
/chromewebstore/v1/licenses/[AppId]/[UserID]
+ 署名
# Licensing APIのエンドポイント
ENDPOINT = 'https://www.googleapis.com/chromewebstore/v1/licenses'
# アプリID
APP_ID = '...'
# OAuthトークン
OAUTH_TOKEN = '...'
# OAuthトークンシークレット
OAUTH_TOKEN_SECRET = '...'
# ユーザーのOpenID URL文字列
user_id = ...
# OAuthクライアントの生成
client = Signet::OAuth1::Client.new(
:client_credential_key => 'anonymous',
:client_credential_secret => 'anonymous',
:token_credential_key => OAUTH_TOKEN,
:token_credential_secret => OAUTH_TOKEN_SECRET
)
# リクエストの送信
response = client.fetch_protected_resource(
:uri => "ENDPOINT/#{app_id}/#{CGI::escape(user_id)}"
)
# 結果の取得
result = JSON.parse(response.body)
{
"kind": "chromewebstore#license",
"id": "appId/userId",
"appId": "appId",
"userId": "userId",
"result": "YES",
"accessLevel": "FULL",
"maxAgeSecs": "3600",
}
result値 accessLevel値 状況
YES FULL ユーザーはアプリに課金している。
YES FREE_TRIAL ユーザーはアプリに課金してなく、
無料試用版を使うべき。
NO NONE ユーザーはアプリに課金してなく、
アプリにアクセスしていない。
アプリ内課金
・・・Google In-App Payments API for Web
開発者のサーバ
星を手に入れる
購入
①
②
APIコール
③
Googleのサーバ 開発者のサーバ
通知
④
通知
⑤
星を手に入れた!
⑥
JWTの生成
{
"iss": "購入者ID",
"aud": "Google",
"typ": "google/payments/inapp/item/v1",
"exp": "1358678162",
"iat": "1358674585",
"request": {
"name": "Red potion",
"description": "It increases the hit point.",
"price": "2.50",
"currencyCode": "USD",
"sellerData": "user_id:123,transaction_id:98765"
}
}
SELLER_IDENTIFIER = '販売者 ID'
SELLER_SECRET = '販売者の秘密鍵'
token = JWT.encode(
{
'iss' => SELLER_IDENTIFIER,
'aud' => 'Google',
'typ' => 'google/payments/inapp/item/v1',
'exp' => (Time.now + 3600).to_i,
'iat' => Time.now.to_i,
'request' => {
'name' => 'Red potion',
'description' => 'It increases the hit point.',
'price' => '2.50',
'currencyCode' => 'USD',
'sellerData' => 'user_id =>123,transaction_id =>98765'
}
}, SELLER_SECRET)
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9.ey
Jpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzO
DAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19y
b290Ijp0cnVlfQ.dBjftJeZ4CVP-mB92K27uhbUJU1
p1r_wW1gFWFOEjXk
開発者のサーバ
星を手に入れる
購入
①
②
APIコール
③
Googleのサーバ 開発者のサーバ
通知
④
通知
⑤
星を手に入れた!
⑥
buy()関数の
呼び出し 購入画面
<script type="text/javascript"
src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load('payments', '1.0', {
'packages': ['sandbox_config']
});
</script>
var generatedJwt = ...;
document.getElementById("buy").onclick = function(evt) {
purchase();
};
function purchase() {
...
goog.payments.inapp.buy({
jwt: generatedJwt,
success: function(result) { ... },
failure: function(result) { ... }
});
}
開発者のサーバ
星を手に入れる
購入
①
②
APIコール
③
Googleのサーバ 開発者のサーバ
通知
④
通知
⑤
星を手に入れた!
⑥
ポストバック
URLの呼び出
し
{
"iss": "Google",
"aud": "購入者ID",
"typ": "google/payments/inapp/item/v1/postback/buy",
"exp": "1358678162",
"iat": "1358674585",
"request": {
"name": "Red potion",
"description": "It increases the hit point.",
"price": "2.50",
"currencyCode": "USD",
"sellerData": "user_id:12345,transaction_id:98765"
},
"response": {
"orderId": "3485709183457474939449"
}
}
SELLER_SECRET = '販売者の秘密鍵'
encoded_jwt = params['jwt']
item_token = JWT.decode(encoded_jwt, SELLER_SECRET)
order_id = item_token['response']['orderId']
# デコードされた内容に基づいて、注文内容を確認し、
# 必要があればデータベースに注文完了を書き込む
render text: order_id
開発者のサーバ
星を手に入れる
購入
①
②
APIコール
③
Googleのサーバ 開発者のサーバ
通知
④
通知
⑤
星を手に入れた!
⑥
コールバック
関数の呼び出
し
var generatedJwt = ...;
document.getElementById("buy").onclick = function(evt) {
purchase();
};
function purchase() {
...
goog.payments.inapp.buy({
jwt: generatedJwt,
success: function(result) { ... },
failure: function(result) { ... }
});
}
• Hostedアプリ
– Available.
• Packagedアプリ
– Can use on the dev channel.
Tax
付加価値税
• 購入するユーザーと開発者の直接契約
– 納税する責任は開発者にある
国ごとに法律が異なる
• 税率の違い
• 購入者が国外にいた時の扱い
• 納税免除の下限額の違い
・・・知らなかった、では済まされない
• 田中 洋一郎
– Google Developers Expert (Chrome)
– LINE株式会社 開発1センター所属
End

Más contenido relacionado

Similar a Chromeウェブストア - Html5とか勉強会42

オンラインゲームソリューション@トレジャーデータ
オンラインゲームソリューション@トレジャーデータオンラインゲームソリューション@トレジャーデータ
オンラインゲームソリューション@トレジャーデータTakahiro Inoue
 
Firefox Marketplace and Payment
Firefox Marketplace and PaymentFirefox Marketplace and Payment
Firefox Marketplace and Paymentdynamis
 
XOOPS EC Distribution
XOOPS EC DistributionXOOPS EC Distribution
XOOPS EC DistributionYoshi Sakai
 
初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api   cms どうでしょう - 大阪夏の陣初めての Data api   cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣Yuji Takayama
 
SocialWeb Conference vol.5 OpenSocial Night #2
SocialWeb Conference vol.5 OpenSocial Night #2SocialWeb Conference vol.5 OpenSocial Night #2
SocialWeb Conference vol.5 OpenSocial Night #2Nobuhiro Nakajima
 
Google Play Game Servicesについて
Google Play Game ServicesについてGoogle Play Game Servicesについて
Google Play Game ServicesについてKenzo Ishii
 
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Yuji Takayama
 

Similar a Chromeウェブストア - Html5とか勉強会42 (7)

オンラインゲームソリューション@トレジャーデータ
オンラインゲームソリューション@トレジャーデータオンラインゲームソリューション@トレジャーデータ
オンラインゲームソリューション@トレジャーデータ
 
Firefox Marketplace and Payment
Firefox Marketplace and PaymentFirefox Marketplace and Payment
Firefox Marketplace and Payment
 
XOOPS EC Distribution
XOOPS EC DistributionXOOPS EC Distribution
XOOPS EC Distribution
 
初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api   cms どうでしょう - 大阪夏の陣初めての Data api   cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣
 
SocialWeb Conference vol.5 OpenSocial Night #2
SocialWeb Conference vol.5 OpenSocial Night #2SocialWeb Conference vol.5 OpenSocial Night #2
SocialWeb Conference vol.5 OpenSocial Night #2
 
Google Play Game Servicesについて
Google Play Game ServicesについてGoogle Play Game Servicesについて
Google Play Game Servicesについて
 
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界
 

Más de Yoichiro Tanaka

Navigate users from assistant app to android app
Navigate users from assistant app to android appNavigate users from assistant app to android app
Navigate users from assistant app to android appYoichiro Tanaka
 
Chrome Extensionsの基本とデザインパターン
Chrome Extensionsの基本とデザインパターンChrome Extensionsの基本とデザインパターン
Chrome Extensionsの基本とデザインパターンYoichiro Tanaka
 
Chrome Extensionsから見るWebExtensions
Chrome Extensionsから見るWebExtensionsChrome Extensionsから見るWebExtensions
Chrome Extensionsから見るWebExtensionsYoichiro Tanaka
 
SocialWeb-Japan Vol.2 20090428
SocialWeb-Japan Vol.2 20090428SocialWeb-Japan Vol.2 20090428
SocialWeb-Japan Vol.2 20090428Yoichiro Tanaka
 
JavaEdge第3回ライブセッション
JavaEdge第3回ライブセッションJavaEdge第3回ライブセッション
JavaEdge第3回ライブセッションYoichiro Tanaka
 
maven2+aptで楽々ドキュメント
maven2+aptで楽々ドキュメントmaven2+aptで楽々ドキュメント
maven2+aptで楽々ドキュメントYoichiro Tanaka
 
丸山先生レクチャーシリーズ2007-2008
丸山先生レクチャーシリーズ2007-2008丸山先生レクチャーシリーズ2007-2008
丸山先生レクチャーシリーズ2007-2008Yoichiro Tanaka
 
体操競技のルール改正と今後の日本の方向性
体操競技のルール改正と今後の日本の方向性体操競技のルール改正と今後の日本の方向性
体操競技のルール改正と今後の日本の方向性Yoichiro Tanaka
 
世間の荒波を乗りこなせ!
世間の荒波を乗りこなせ!世間の荒波を乗りこなせ!
世間の荒波を乗りこなせ!Yoichiro Tanaka
 

Más de Yoichiro Tanaka (12)

Navigate users from assistant app to android app
Navigate users from assistant app to android appNavigate users from assistant app to android app
Navigate users from assistant app to android app
 
Chrome Extensionsの基本とデザインパターン
Chrome Extensionsの基本とデザインパターンChrome Extensionsの基本とデザインパターン
Chrome Extensionsの基本とデザインパターン
 
Chrome Extensionsから見るWebExtensions
Chrome Extensionsから見るWebExtensionsChrome Extensionsから見るWebExtensions
Chrome Extensionsから見るWebExtensions
 
Yapc
YapcYapc
Yapc
 
SocialWeb-Japan Vol.2 20090428
SocialWeb-Japan Vol.2 20090428SocialWeb-Japan Vol.2 20090428
SocialWeb-Japan Vol.2 20090428
 
JRuby on Rails
JRuby on RailsJRuby on Rails
JRuby on Rails
 
JavaEdge第3回ライブセッション
JavaEdge第3回ライブセッションJavaEdge第3回ライブセッション
JavaEdge第3回ライブセッション
 
maven2+aptで楽々ドキュメント
maven2+aptで楽々ドキュメントmaven2+aptで楽々ドキュメント
maven2+aptで楽々ドキュメント
 
丸山先生レクチャーシリーズ2007-2008
丸山先生レクチャーシリーズ2007-2008丸山先生レクチャーシリーズ2007-2008
丸山先生レクチャーシリーズ2007-2008
 
体操競技のルール改正と今後の日本の方向性
体操競技のルール改正と今後の日本の方向性体操競技のルール改正と今後の日本の方向性
体操競技のルール改正と今後の日本の方向性
 
Wicket勉強会2
Wicket勉強会2Wicket勉強会2
Wicket勉強会2
 
世間の荒波を乗りこなせ!
世間の荒波を乗りこなせ!世間の荒波を乗りこなせ!
世間の荒波を乗りこなせ!
 

Último

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 

Último (9)

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 

Chromeウェブストア - Html5とか勉強会42