「道具」ではなく「文化」をもたらすサービスがいいよね

Instgramは「画像を上げてみんなで見れるサービス」だし、Twitterは「短い文しか上げることができないブログ」になる。どちらも作るのは非常に簡単で、主要な機能だけならすぐに作れるものだろう。単純なサービスは簡単に作ることができる。言い換えれば簡単に似たようなサービスを作ることができる。しかし、その中で流行るサービスと流行らないサービスに別れてしまう理由を前はサービスの利便性だとか機能だと思っていた。しかし、最近は「文化」のほうが重要なのではないかと思えてきた。

サービスの使いやすさや機能というのは地盤でしかない。最低限の機能が最低限使いやすくできていれば、それ以外の機能はオプションなので必須ではない。必須ではないものを詰め込んでいけば、使い勝手は良くなり裾野が広がり使う可能性がある人間は増えるだろう。しかし、それは「道具」として使えるようになったに過ぎない。「道具」はあくまでも「道具」で使いやすいものが出てくれば取って代わられる。使いやすいものというのを突き詰めて他のサービスを落とすという方法もあるのだろうが、それには多大な労力がかかり、巨人が同じようなサービスを出してくると潰される可能性がある。

しかし、「文化」は真似することができない。使い勝手は悪いけど、なんとなくこのサービス内の雰囲気がよいから使うというのは往々にしてあると思う。Instagramに写真を上げればなんとなくおしゃれになった気分になるし、Twitterには適当な文章を吐き出して良さそうな雰囲気がある。この「文化」が非常に大切で、最終的にどういった文化をそのサービス内で形成したいのか?から逆算してサービスをつくるというのは良いアプローチなのかもしれない。やりたいことを実現するためにアプリを作るのではなく、どういった人をあつめたいのかというアプローチから逆算してアプリを作ると面白いのかもしれない。

Google Sign-InでApiException: 12501がでて失敗する

以下のエラーがでて失敗する

> com.google.android.gms.common.api.ApiException 12501

手順は以下の通り

OAuth2のClientKeyが設定されてないのがだめというものを見つけたけど違った。

結局、 GoogleSignInOptions.DEFAULT_SIGN_IN を設定しないといけないところを GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN を設定していたからエラーとなっていた。

うまくいったコード

バージョンは以下

> implementation “com.google.android.gms:play-services-auth:15.0.1”

FirabseのAuthUIで[Code: 10, message: 10]のエラーが出る

FirebaseのAuthUIを試してみたけど以下のエラーがでて動かない。

com.firebase.ui.auth.FirebaseUiException: Code: 10, message: 10:

よくよくみると以下のワーニングが出ていた

Developer error: this application is misconfigured. Check your SHA1 and package name in the Firebase console.

SH256のほうがいいだろうと256しか登録していなかったが、SHA1が登録していないとだめらしい。FirebaseConsoleの設定からSHA1を登録したところ問題なく動作した。

複数のFlowableで全ての更新通知で全ての値を結合する

結論を先に書くと Flowable.combineLatest を使うと良い

flatMapで結合

こうすると、onNextが流れるたびにobserveされる物が増えていくためintProcessorで流れてきた回数strProcessorが出力されることになる。一応目的は果たして入るが、同じ値が複数流れてくるので非常に効率が悪い。

combineLatestで結合

こうすると、どちらかのonNextが流れてきたときに、他の最新データを使って結合することができる。これがやりたかったこと。