アルファ銀行での䞀日モバむル開発





Alfa-Bankは、モバむルバンキングのパむオニアの1぀になりたした。iOSずAndroidのアプリケヌションは、2010幎に「電話自䜓から電話のバランスを補充する」胜力が珍しかったずきに登堎したした。 そしお、これらすべおの幎月が経った今、銀行でのモバむル開発はどうでしょうか



以前は、「Alfa Bankでの1日Java開発」ずいうテキストを公​​開したしたが、いよいよ先に進み、iOSおよびAndroidアプリケヌションでの䜜業に぀いお尋ねたした。 むリダ・ツァレフずアントン・プホニンが答えおくれたした。 名前をiLyaずAntonず曞くず、誰が䌚瀟の責任を負うのかがすぐにわかりたす



-2010幎、habrayuzer が Alfa BankにAndroidアプリケヌションの登堎を発衚したずき、「そのようなアプリケヌションの必芁性に関する垂堎調査には6か月以䞊かかりたした」ず曞いおいたす。 それ以来、モバむルバンキングは生掻の䞍可欠な郚分になり、今日これらの蚀葉はおかしく聞こえたす。 そしお、この䞖界の倉化はモバむル開発にどのように圱響したすか Alfa-Bankアプリケヌションの開発は圓初からではありたせんでしたが、近幎、䜕が倉わったのかを発芋したしたか



アントンたず、スピヌド今、あなたはすぐに芋、すぐにリリヌスし、倚くの機胜を携垯電話にドラッグする必芁がありたす。



2぀目は、モバむルが最初になり、モバむルのみになりたした。 これで、アプリケヌションには十分に掻甚されおいないものもすべお含たれおいるはずです。 箄3幎前、私の個人的な意芋はこれでした。モバむルアプリケヌションでは、少なくずも月に䞀床䜿甚する機胜が必芁です。 頻床が䜎い堎合は、サむトにアクセスしおください。すべおが順調です。 カヌドのアクティベヌションなど、数幎ごずに䜕かが䜿甚されたす。 前に、私は間違いなく蚀うでしょうなぜこれはアプリケヌションで必芁なのですか サむトを開きたす。



むリダ ATMに挿入したす。



アントンそれはどういうわけかATMの底です 通垞、これはもう機胜したせん。モバむルアプリケヌションに远加する必芁がありたす。



このようなめったに䜿甚されない機胜を可胜な限り迅速に開発し、それらの保守に費やす時間を短瞮するために、WebViewはアプリケヌションにたすたす登堎しおいたす。 ナヌザヌが5幎に1回アクセスする「カヌドの有効化」セクションでは、矎しいアニメヌションや完璧に掗緎されたむンタヌフェむスは必芁ありたせん。 圌は䞀床ボタンを突くずそれを忘れるこずができたす。 そしお、この機胜をネむティブではなくWebViewで開発するず、サむトに既に実装されおいるため開発が加速され、数分で䜕かを曎新できるため、曎新速床が向䞊したす。 これは私たちの仕事に倧きな圱響を䞎えたした。



もちろん、JavaScript開発者の生掻にも圱響がありたした。 画面を構成する前に、携垯電話に぀いおスチヌムバスを济びないでください。しかし、サむトはおそらくスマヌトフォンで開かれるこずを知っおいるので、アダプティブレむアりトが必芁です。たた、モバむル内で芋た堎合はネむティブアプリケヌションもありたす。 圌らは私たちのためにCSSを埮調敎したした。



-「モバむルのみ」ずいう蚀葉が話されたした-Alfa-Mobileに機胜を远加したすが、サむトには远加したせんか



アントン倚くはありたせんが、ありたす。 たずえば、裕犏な人銀行の最も裕犏な顧客の5の堎合、特定の条件が満たされるずボヌナスがありマネヌアカりントにXを超える金額を持ち、月あたりYを超える取匕を行うため、特定の関連機胜はモバむルでのみ利甚できたす。



-繰り返したすが、Androidアプリケヌションの登堎に関する2010幎の投皿を思い出したす。 コメントで私は29メガバむトのサむズに䞍愉快な驚きを芚えたした。圓時のAndroidナヌザヌは1メガバむトごずにカりントする必芁があり、兞型的なアプリケヌションははるかに軜量でした。 今では、数十ギガバむトの安䟡なスマヌトフォンであっおも、時代は違うように芋えたすが、「Facebookアプリケヌションがこんなに倧きいのに、これはおかしい」ずいう投皿がただありたす。 したがっお、比范するのは興味深いです。珟圚、アプリケヌションの重量はどれくらいですか



むリダ iOSには66メガバむトありたす。



アントン私たちには玄40、プラスたたはマむナス5がありたす。



-サむズは今あなたにずっお差し迫った問題ですか 時間ずずもに成長したすか、それを枛らす努力をしなければなりたせんか



アントン Androidアプリケヌションのサむズは特に増加しおいたせん。 コヌドの量は増えおおり、いく぀かのラむブラリが远加されおいたすが、過去2幎間でアプリケヌションは枛少しおいたす。 GoogleはVectorDrawableを導入したした。リ゜ヌスは4サむズのPNGサむズではなく、数キロバむトの単玔なベクタヌ描画で保存されおいたした。 アプリケヌションの石鹞はUIに衚瀺されたせん。 さお、モバむルアプリケヌションの倧きな写真から、私の意芋では、背景はほんの2、3しかありたせん。 他のすべおは、必芁に応じおバック゚ンドから拡匵されたす。



Ilya App Storeを開いたばかりです-圌は、アプリケヌションの重量が90メガバむトであるず曞いおいたすが、これはアンパックバヌゞョンであり、むンストヌル埌にかなりのスペヌスを占有したす。 Alphaに到着した時点で、ダりンロヌドずは䜕でしたか。珟圚は66メガバむトでした。成長の理由は䜕ですか か぀おなかったスりィフトのせいもありたす。 リ゜ヌスに加えお、はい...



しかし、たずえば、iPhoneには1か月あたり12ギガバむトのトラフィックがありたす。 これは非垞に緊急の問題ではないようです。



アントンモスクワの堎合。



むリダ私たちはモスクワに察しお非垞に倧きな偏芋を持぀ナヌザヌの分垃を持っおいたす。



䞀般的に、私たちはアプリケヌションを枛らすために急進的なこずは䜕もしおいたせん。あなたが特に䜕かをするこずはたずありたせん。 すべおのPNGが揺れ、コヌドを絶えずリファクタリングしお、䜙分な郚分を削陀したした。 ただし、100個のコヌドファむルを削陀しおも、最倧1メガバむトかかりたす。これは幞運な堎合です。 ぀たり、すべおの簡単なこずはすでに行われおいたす。 必芁に応じお新しいものを䜜成したす。



App Storeでは、モバむルネットワヌク経由でダりンロヌドする際に150メガバむトずいう制限がありたすが、通垞は問題ありたせん。 Facebookの重さは実際に玄200メガバむト、非圧瞮圢匏で400で、倚くのラむブラリずあらゆる皮類のラむブラリがあり、同時に非垞に頻繁にリリヌスされたす。 サむズに関する興味深い投皿を1぀読みたした。 そこで、ある人がアプリケヌションの曎新に぀いお曞いた「毎週300メガバむトをダりンロヌドしなければならないのに、あなたは倢䞭になっおいる」。 しかし、私たち党員がこの話を始めおいるようで、すべおの䌁業はより頻繁に、しばしば䜕らかの皮類の䟡倀を生み出すためにリリヌスしようずしおいたすが、これはクヌルです。



アントンその間、私はAndroidバヌゞョンの正確なサむズを芋たした。今では42.26メガバむトの重さです。 原則ずしお、可胜な限りサむズを小さくするよう努めおいたす。 倚くのスペヌスを占めるすべおのリ゜ヌスをクリヌンアップし、すべおをベクトルに倉換するか、コヌド内でレンダリングするか、バック゚ンドからロヌドしたす。



しかし、これはコヌドの党䜓的な品質、぀たりアプリケヌションに取り組んでいるようなものです。 タスクが「アプリケヌションを最小限に削枛する」こずである堎合、それを取埗しおさらに厳しく削枛したす。 しかし、それで結果がほずんど埗られない䜙分な仕事を自分で探すのはなぜですか 補品メトリックでは、アプリケヌションを40メガバむトから10に枛らしおも、補品に小さな䟡倀がもたらされるようです。 ダりンロヌド、速床、矎しいアニメヌションの最適化に時間を費やすこずをお勧めしたす-これはナヌザヌにずっおより良い方法です。 たあ、これは私の䞻芳的な意芋です。



-Apple PayずGoogle Payのサポヌトはナヌザヌにずっお非垞に泚目に倀したすが、この話は銀行のモバむルアプリケヌションに関するものではありたせん。 圌らのサポヌトが導入されたずき、モバむル開発者はたったく必芁ですか、そしお圌らの圹割はどれくらいですか



アントン銀行にApple Pay / Google Payの支払いを远加するだけなら、モビラむザヌや䞀般的に前線を匕き付ける必芁はありたせん。 しかし、あなたがうたくやりたいなら、圌らは必芁になりたす。



むリダええず-これは、たずえば、アプリケヌションからデゞタルカヌドの操䜜を䞀時停止できるずいう事実に関するものです。 Apple PayずGoogle Payが実行されおいるデバむスのリストがあり、アプリケヌションから䞀時停止たたはリンク解陀できたす。



アントンしかし、䞀般的に、前線での䜜業は最小限です。 最倧の目暙を蚭定しおドキュメントを泚意深く読んでも、2〜3週間で完了したす。 䞻な仕事は凊理にありたす-端末ず友達になり、マスタヌカヌドずビザに同意したす。 各マップバむンディングは、本質的に新しい仮想カヌドです。 新しい識別子が圌女に割り圓おられ、すべおの問題は腞のどこかにありたす。 そしお、Apple PayたたはGoogle Payアプリで友達を䜜る必芁がありたす。



むリダたあ、アップルかグヌグルのどちらかがそれを蚱すべきです。







-「セキュリティ」は「銀行」ずいう蚀葉に関連付けられおいたすが、これはモバむル開発にどのように圱響したすか たずえば、すべおの䜜業がオフィス内でのみ行われるべきであるず刀明しおいたせんか



Ilyaすべおの開発者には、瀟内ネットワヌクに接続するVPNがあるため、䞖界䞭どこからでもアプリケヌションに取り組むこずができ、アクセスが可胜です。 ログむンパスワヌド、ラップトップには蚌明曞がありたす。デバむスが玛倱した堎合、すべおをブロックできたす。 䞀般に、モバむル開発者はバトルサヌバヌにアクセスできないため、リスクは䜎くなりたす。



アントンモバむルアプリケヌションのセキュリティに぀いお蚀えば、ほずんどの脆匱性はAPIレベルでクロヌズされたす。すべおの操䜜はSMS経由で送信されるワンタむムパスワヌドによっお確認され、䞍審な操䜜をブロックするようにフィルタヌが蚭定されたす。 詐欺の疑いを最小限に抑えお、操䜜がブロックされ、コヌルセンタヌのオペレヌタヌがクラむアントに電話をかけたす。 サヌバヌずの察話は暗号化されたチャネルを介しお行われ、蚌明曞の怜蚌が実装されおいたす。



-より倚くの銀行が保守䞻矩に関連付けられおいたす。 モバむルで新しいものを䜿甚するのは簡単ですかたずえば、Swiftぞの移行はどのように芋えたすか、たたは非暙準ですか



Ilya私たちは昚幎からSwiftに぀いお曞いおきたしたが、2.3から始たり、今では4番目になりたした。 新しくお珍しい技術をオヌプンに芋おいたす。犁止はありたせん。 奜奇心の匷い人は、おそらくコヌドを介しおのみUIを操䜜し、そのためにSnapKitを䜿甚するず蚀うこずができたす。



アントンはい、犁止事項はありたせんが、開発者の共通の内郚コミュニティがありたす。 テクノロゞヌが有望で、必芁で、本圓に圹立぀こずを蚌明したら、誰もがそれを䜿い始めたす。



ただし、ここでは、Alfa-Mobileプロゞェクトが䜕幎も前のものであり、機胜ずレガシヌの尟が倧きいこずを理解する必芁がありたす。 もちろん、倚くは曞き盎されおいたすが、叀いものは残っおいたす。 そしお、倚くの人々がプロゞェクトを前進させるず...「あなたのMVPはもはやファッショナブルではありたせん。スタむリッシュでファッショナブルな若者のMVRxを玹介したしょう」ず蚀うずき、圌らは論理的な質問をしたす。「おい、今、あなたは新しいアヌキテクチャを適甚したす。残りに 2぀のアヌキテクチャを個別にサポヌトする必芁がありたす。」 そしお、誰もが圌が望むものを匕きずり続ければ、それず䞀緒に暮らすこずはたすたす難しくなりたす。



倧たかに蚀っお、AsyncTaskからRxぞの移行が䟡倀があるこずを蚌明した堎合、2-3-4のアプロヌチを遅らせないように、叀いもののリファクタリングずしお、実装時に蚈画を䜜成したす。



むリダ぀たり、すべおがコミュニティを通じお機胜したす。 コミュニティは受け入れたす-それでは行きたしょう。



-コミュニティが2぀のキャンプに分かれおいるこずはありたすか



むリダそれは起こりたす。 その埌、最終決定はリヌドによっお行われたす。



アントンこれは私たちにも起こりたした。 たずえば、単䜓テストを曞く堎合。 個人甚ず法的甚の2぀のアプリケヌションがありたす。 テストの䜜成を改善するこずを考えたずき、半分は「Kotlinでテストを曞きたしょう」ず蚀い玄1幎前、半分は「Kotlinは良いが、玔粋なJUnitでKotlinを曞くのは退屈で、コヌドが倚すぎたす。 SpockずGroovyをドラッグしたす。」



SpockずGroovyを芋お、半分は「すばらしい、そのように曞きたしょう」ず蚀いたした。 そしお、残りの半分は、Groovyでのクロヌゞャヌは理にかなわないものであるず蚀い、コトリンで曞きたしょう。 その結果、珟圚、あるアプリケヌションではKotlinで、別のアプリケヌションではGroovyでテストを蚘述しおいたす。



-iOSずAndroidはどの皋床同期しおいたすか 新しい機胜は䞡方のプラットフォヌムに同時に衚瀺されたすか



Ilya私たちはスクラムに取り組んでいるので、各チヌムはすべおのレむダヌに参加者がいる小さなスタヌトアップであり、すべおのレむダヌに䞀床に新しい機胜を远加したす。 したがっお、通垞、機胜の準備はほが同じです。 バヌゞョンのリリヌスには小さな非同期がある堎合がありたす。たずえば、以前のAndroidでのリリヌス、および機胜は少し前にリリヌスされたす。 もちろん、再蚭蚈のような倧きな倉曎を䞀緒に行いたす。



-あなたのアプリケヌションは䜕癟䞇ものスマヌトフォンにむンストヌルされおいたすが、そのような芏暡の圱響は䜕ですか たずえば、あたり知られおいないスマヌトフォンの奇劙な振る舞いのような゚キゟチックなこずを気にする必芁がありたすか 非垞にたれな問題でも、誰かが吊定的に反応し、修正する必芁があるこずがわかりたすか



むリダはい、い぀も、「そんなこずは絶察にないだろう」ず思うず、100になりたす。 仕事に就くず、1か月埌に「誰もいない」ず思ったケヌスがありたした。もちろん、巚倧なナヌザヌベヌスでは、すべおが出おしたい、線集しなければなりたせんでした。 はい、垞にそのようなケヌスがありたす。 したがっお、テストは私たちにずっお特に重芁です。ビゞネスロゞックを怜蚌するコヌド内のナニットテスト䞀郚の境界ケヌスを含む、ビゞネスシナリオが機胜するこずを自動的に怜蚌するUIテスト、および受け入れテストレむアりトがどこにもクロヌルされおいないこずを確認し、アプリケヌションが手動で機胜の障害をチェックするずきにすべおが正垞であり、リグレッションです。



アントン゚キゟチックなスマヌトフォンに぀いおiOSのすべおが明確であり、デバむスのベヌスはそれほど倧きくなく、Androidはデバむスの動物園です。 アプリケヌションの䞻なバグは修正されおいるにもかかわらず、䞭囜の無名デバむスで䞍可解なスペヌスが発生し、アプリケヌションがクラッシュするこずがありたす。



Android自䜓がクラッシュするこずもありたすが、Androidでそれを行うこずはほずんどできたせん。 倉曎されたデバむスメヌカヌが倱敗する堎合がありたす。 このような問題を簡単に解決したす。このようなデバむスを探し、欠陥の原因を突き止めたす。 「モスクワにそのようなデバむスずそのようなデバむスを持っおいる人は、テストしおみたしょう」-䌁業チャットで頻繁にメッセヌゞが衚瀺されたす。



数幎前、Playストアの同じデバむスから同じ「レビュヌが機胜しない」ずいうレビュヌがあり、䜕もはっきりしおいなかったため、「このスマヌトフォンを芋るこずができたすか」ずいう店に行きたした。 30分以内に条件付き1000ルヌブルでこのデバむスを賌入するかどうかを決定し、実際にアプリケヌションの特別なアセンブリをむンストヌルし、萜䞋の理由を芋぀け、オフィスに来お、修理しお、リロヌドしたした。 そこでは、問題は解像床に関連しおいたした。デバむスは倧きく、解像床はどういうわけか非垞に小さかったのです。



-「Android自䜓が時々クラッシュする」圌の偎に痛みを感じたすか たずえば、Googleはアプリケヌションを制限するためにDozeモヌドを䜿甚できたす。



アントンGoogleがすべおを事前に提瀺しおいるずいう事実から始めおみたしょう。倉曎に぀いお説明し、I / Oに぀いお話し、開発者向けに新しいバヌゞョンを事前にリリヌスしたす。 そしお、重芁なものはすべお事前に閉じようずしたす。



時には努力が必芁です。 実行時のアクセス蚱可が衚瀺されたずき、それは倚くの苊痛を匕き起こしたした。1週間以䞊座っお、アプリケヌションのすべおのケヌスをキャッチする必芁がありたした。 しかし、ニュヌスをフォロヌすれば、リリヌス時に突然問題が発生するこずはありたせん。



そしお、䞀般的なAndroidの問題...たずえば、昚幎、Android 4.0のサポヌトを攟棄せざるを埗たせんでした。 なんで WebViewは非垞に倚くのデバむスに搭茉されたした。 AsyncTaskはそこで愚かではなく、システムはそのようなクラスを芋぀けるこずができたせんでした。 どの゜リュヌションが利甚可胜かを調べたしたが、䜕も埗られたせんでした; WebViewを䜿甚しお実装された重芁な機胜がありたした。



私たちは䜕かをしなければならなかったので、珟圚のバヌゞョンでは4.1よりも䜎いバヌゞョン圓時は2〜2.5であったをナヌザヌに残した方が良いず刀断し、98だけ曎新されたした。







-iOS / Androidの新しいバヌゞョンのプレれンテヌションでは、ARKitのような壮倧なものを芋るこずができたすが、拡匵珟実は明らかにあなたのものではありたせん。 新しいバヌゞョンがリリヌスされたずき、それはあなたにどの皋床圱響したすか



むリダさお、拡匵珟実は私たちのこずです iPhoneで起動し、スマヌトフォンを動かしお拡匵珟実のATMを怜玢できる堎所を瀺したす。 もちろん、これは長い間行われおいたすが、もちろんARKitでは行われおいたせん。



䞀般に、iOSの曎新に぀いお-むンタヌフェヌスをiOS 6からiOS 7に切り替えお完党に再蚭蚈したずき、壊れおいた可胜性のあるすべおのものが壊れたした。 私は圓時Alphaで働いおいたせんでしたが、別のプロゞェクトで2か月間切り替えたしたが、それは恐怖でした。 そしおその埌、すべおが簡単になりたす。 iOS 11では、Appleがファむルシステムなどの内郚で倚くのこずを行いたしたが、劇的な倉化はありたせんでした。 ちなみに、電話からのすべおの写真を曎新した埌、消去されたした。 バックアップが残っおからロヌドされるのは良いこずです。



そのため、iOS 11の革新のうち、私たちに関係のあるものはほずんどありたせん。 技術的なものを䜿甚しおいるこずは明らかです。Swift、Xcodeの新しいバヌゞョンに切り替えおいたす。 これは通垞のプロセスであるため、すべおが故障したすが、そこにはありたせん。 業界で倚くのうめき声があった3番目のSwiftのリリヌスでも。



アントンこれは最新のAndroidアップデヌトです。ナヌザヌにはほずんど圱響したせんでしたが、実際には開発者に本圓に圱響したした。 圌らは倚くの建築物を提瀺し、すぐによく芋お考え始めたした-たずえば、Googleが導入したデヌタベヌスであるRoomで新しい機胜を実行するこずにしたした。 Androidアヌキテクチャコンポヌネントもすぐに興味を持ちたしたが、最初はあたりにも粗末で、安党に䜿甚する準備ができおいたせんでした。



そしお、ナヌザヌにずっお新しいものから-Instant Appsはクヌルなものであり、これにも気付きたしたが、急いで実装したせんでした。 アプリケヌションの任意のセクションをむンスタントアプリから起動するには、アプリケヌション党䜓を深くリファクタリングする必芁がありたす。 Alpha Mobileアプリケヌションの芏暡では、これは非垞に耇雑で時間がかかりたす。 2018幎にこれを実装できるこずを願っおいたす。



-iOS 11では、CoreMLも远加されたしたが、機械孊習はどの皋床関連しおいたすか



むリダ珟圚の圢のCoreMLは、私にずっおはほずんど意味がないようです。 圌はモデルを蚓緎する方法を知らず、既補のモデルのみを䜿甚したす。 この特定のデバむスを䜿甚する特定のナヌザヌ向けにモデルをトレヌニングできるず䟿利です。 たずえば、誰もが携垯電話に500ルヌブルを支払い、圌は50を支払いたす。そしお、今床は、誰もが500を支払うため、500を提案したす。 50の方が良いでしょう。



バック゚ンドでは、これは私たちにずっおより関連性がありたす。 たずえば、ナヌザヌがどのトランザクションを持぀かを予枬する堎合。 - , , , , , , . .



— Mobius , . , ?



: , , , . . - , MVC . - . . - . .



. , , MVC, . , , , , .



, MVC , , MVVM. , . , MVVM -, - , . , - , , , . Mobius , « , , , , - , ».



たさにそれをやった。 MVVM, VIPER, Clean Swift, : « , ». . : , MVVM. , ? VIPER , ? , .



, Clean Architecture , , ”Yet another architecture”. , , . , , , , , «, VIPER ». «», , , . .



: , . Android 2008-. . — , 2010-. , , mobile-only . 5 , , , .



Google , , , : . , IDE, SDK, .



2010- Google I/O Google , -. , , — - , , . — , . . , , , - . , , , : Java , iOS VIPER.



, - . , . - « ».



: . , «--», . — . , , .



— , - ?



: . . CI, , Grafana . DevOps-, - . , — , : — .



. , , , -, , , , - . - -CI




: « » « »?



: 
 , , CI! . .



: . Android- , : « ? ?»



- : « , ». - : « - , C, , ». , . JSON, , , , . , , . , - .



— . . 20 , , , , ? .



, CI. Mac Pro, . . , , , . Android- . , Docker-. Jenkins-. Android DevOps. , .



. « ». , . : Spock, Spek, Espresso. . , , .



, . ? , , mockup — , , , . , , . , , , - , - .



— !







Mobius , - . , , !




All Articles