49827
# 背景

Google Vision APIを使って、Androidアプリを作ろうとしています（個人開発）。  
さらに、可能であればGoogle Playでアプリを公開したいです。

# 質問

Google VisionのAPIは個人用です。  
したがって、スマホアプリを公開したら、無制限に料金が請求される可能性があります。

一般的に、有料なAPIを利用したスマホアプリを外部に公開するには、どのような対応が必要なのでしょうか？  
たとえば、アプリ利用者は「1日10回まで利用できる」などの制限を加えているのでしょうか？  
それとも、外部にアプリを公開する場合は、有料APIを使用すべきではないのでしょうか？

個人でスマホアプリを開発している方たちが、どのような方法を取っているかが知りたいです。
CC BY-SA 4.0
2018-10-10T16:17:01.603
49154
2018-10-31T14:53:27.387
19524
question
android google-cloud
有料APIを利用したスマホアプリを、外部に公開する方法
お金が絡んでいるのと、変化が激しい分野なので私の回答はあくまで参考までにとどめてください。実際の運用は自己責任でお願いします。

Google Vision APIは使ったことがありませんが、Googleのほとんどの有料APIはGoogle Cloud
Platform上から、それぞれの一日あたりや時間あたりの最大呼び出し回数が設定出来たと思います。  
私が昔有料のAPIを試した時は、それで上限を設定していました。（APIを有効化した後に個別のAPIに対して設定出来ました。AppEngine等のインスタンス課金上限とは別なので注意が必要です）

私の使っていたAPIの場合は、上限を超えてAPIを叩いたときにはエラーが返るようになっていました。  
これを適切にやっていないとハッカーによってこちらのAPIにタダ乗りされて、自分のアプリに関係無く課金される危険があります。これに関しては、自前のサーバー上のWEBAPIへアプリからアクセスし、認証を通るものだけが有料APIを自前のサーバー経由で呼べるようにするなどの様々な工夫が必要です。  
その他にも、呼び出し回数制限は間違って無限ループや大量ループを実装してしまった場合もとんでもないことになるため必須です。

このように様々な実装や設定が必要なのですが、有料のAPIを叩くのであればまずは収益化を考えてユーザーが増えた時に課金で回るようにしないといけません。個人とはいえ、ビジネスとして成り立つアプリであるというのが、有料API利用を利用し、一般公開する場合の最低条件だと思われます。
CC BY-SA 4.0
2018-10-31T12:19:50.113
49827
2018-10-31T12:19:50.113
8795
49154
answer
認証が必要なサードパーティのサービスを利用する場合は、アプリケーションが直接APIを叩くのではなく、中継するサーバをもうけた方がよいでしょう。

アプリケーションが直接APIを利用する形では、APIの認証情報を秘匿するのが難しいのと、リクエスト数をコントロールできないので、有料（特に従量課金の場合）のAPIを安全に利用するのはほぼ不可能です。

中継するサーバがあれば、キャッシュにより総リクエスト数を削減できる（かもしれない）副次的な効果もあります。一方でコストがかかる上信頼性は確実に落ちるというデメリットもあります。

アプリケーションの利用者自身にAPIへのアクセス権を取得させる、という方法も、アプリケーションと利用者次第では考えられます。
CC BY-SA 4.0
2018-10-31T14:53:27.387
49833
2018-10-31T14:53:27.387
5793
49154
answer