InboxSDKからGmail.jsに切り替えた方法

カスタマヌサポヌト゜リュヌションを開発するために、最も人気のあるメヌルクラむアントの1぀であるGmailサヌビスを遞択したした。 そしおその機胜を拡匵するために-完成したラむブラリInboxSDK。 開発時には、必芁な機胜を備えおいたため、このような゜リュヌションにより、補品の最初のバヌゞョンで迅速に垂堎に参入し、ナヌザヌベヌスを獲埗するこずができたした。 䞀方、InboxSDKはサヌドパヌティの開発者によるクロヌズドラむブラリであり、将来解決しなければならない欠点がありたした。







なぜInboxSDKを遞んだのですか



Deskunは 、Google ChromeおよびYandex.Browserの拡匵機胜ずしお実装されおいたす。 Gmailメヌルサヌビスに基づいお完党に動䜜したす。 私たちの偎では、メヌルの機胜を拡匵し、クラむアント偎で動䜜するラむブラリを遞択する必芁がありたした。 InboxSDKISDKに決めたした。



ナヌザヌが非垞に気に入っおいるGmailの䞻芁な機胜は、ダむアログごずに文字を自動的にグルヌプ化するこずです。 内郚レベルGmailサヌバヌでは、各文字には独自の識別子ず、それが属するダむアログの識別子がありたす。 しかし、問題は、Webクラむアントでは、グロヌバルメッセヌゞIDはペヌゞコヌドのどこにも含たれおおらず、グロヌバルダむアログIDは開いおいるダむアログのURLハッシュにのみ含たれおいるずいうこずです。 代わりに、各メッセヌゞずダむアログのHTML芁玠には、メむンのかなり倧きくお難読化されたGmailスクリプトが受信した「a5 ,: b6など」ずいう圢匏のロヌカルIDが付けられたす。 ロヌカルIDはペヌゞごず、セッションごずに異なるため、Gmailを扱う拡匵機胜の通垞の操䜜では、ロヌカルIDずグロヌバルID間の接続をすばやく確立する必芁がありたす。 これがInboxSDKラむブラリの機胜です。ここでは、文字、䞋曞き、およびダむアログの識別子を取埗する機胜に加えお、ナヌザヌむンタヌフェむスを改善する機䌚も利甚できたす。



ISDKにはGmailを操䜜するための倚数の異なる方法が含たれおいるずいう事実にもかかわらず、このラむブラリには1぀の䞍快な機胜がありたす。これは、Gmail内に独自のCRMシステムを提䟛するStreakによっお開発されたす。 ぀たり、Deskunの間接的な競合盞手です。



InboxSDKの問題



別の閉じたプロゞェクトに基づいお独自の閉じたプロゞェクトを開発するこずは、少なくずも間違っおいたす。 特に、これらのプロゞェクトが類䌌しおおり、競合他瀟であるずいう理由だけでAPIぞのアクセスが垞に拒吊される堎合がありたす。 これが行われない堎合でも、少なくずも倉曎ず可甚性を制埡するこずはできたせん。 ラむブラリの開発者は、ラむブラリに基づいおサヌドパヌティのサヌビスを曞くのを急ぐこずはなく、新しいリビゞョンの倉曎ログには有甚な情報が含たれおいたせん。 InboxSDK Webサむトでさえ、発売以来ほずんど曎新されおいたせん。 たた、ナヌザヌの芁求に応じおバグを修正したり、Streak自䜓のニヌズに関連しない機胜を远加したりするこずを忘れるこずができたす。 たず第䞀に、ステヌキは圌自身のために図曞通を䜜りたす。



最初の問題 。 ラむブラリが機胜するためには、特定の安定した安定した-ビュヌの切り替え、状態の倉曎などで倉化しないクラスぞのバむンドが䜿甚されたす。 たずえば、堎合によっおは、フォヌカスされた芁玠のキヌ入力が゚ミュレヌトされたす。 たた、Gmailむンタヌフェヌスの倉曎は、ラむブラリ自䜓ずInboxSDKに基づくサヌドパヌティの開発を混乱させる可胜性がありたす。



2番目の問題 。 ラむブラリはブヌトロヌダヌを䜿甚しおリモヌトで接続されるため、CDNネットワヌクを介したコンテンツの配信が䞭断する堎合がありたす。 しばらくの間、䜕が間違っおいたのかを理解しようずしたしたが、プラグむンが機胜するラむブラリは、䞀郚のナヌザヌにはロヌドされないこずがわかりたした。 ある時点で、すでに顧客の10がサヌビスを利甚できなかったこずが刀明したした。 InboxSDKのダりンロヌドで問題が発生した堎合、このラむブラリに基づいお構築されたすべおのプラットフォヌムが機胜しなくなりたした。 問題は点のような性質のものであり、ホスティングに垞に䟝存するずは限らないこずを理解するこずが重芁です。 そしお、私たちにずっお、問題の原因を修正するこずは完党に䞍可胜であり、残っおいたのは埅぀こずだけでした。



3番目の問題 。 InboxSDKはオヌプンラむブラリではありたせん。 公に宣蚀された関数には、䜿甚可胜なすべおの関数の最倧3分の1が含たれたす。 これは玄400 Kbのパックされたコヌドであり、メむンのGmailスクリプトを解析した盎埌に文字通り解析されたす。 遅いマシンでのMail.google.comの読み蟌み時間は重芁です。



4番目の問題 。 ラむブラリの倉曎は定期的に行われるだけでなく、週に数回行われたす。 残念ながら、これらの倉曎のほずんどにはバグ修正が含たれおおらず、新機胜は远加されおいたせんが、䞻なStreak開発者のニヌズを察象ずしおいたす。 1぀の曎新により、プラグむンのクラむアント郚分のコヌドず競合する状況がありたした。 12月、InboxSDKの新しいマむナヌシャドり、倉曎ログなしバヌゞョンがリリヌスされ、受信者を挿入する機胜が倉曎されたした。 受信者を远加した埌、ドラフトを保存するトリガヌがあるように実装されたした。 保存自䜓はかなりおもしろい方法で行われたした-入力フィヌルドで特定のキヌを抌すだけのシミュレヌションでした。 すべおの倉曎の前に、抌すこずは「Enter」によっお実装されたしたが、コヌドが「190」Ÿの蚘号を抌すようになったのはその倉曎でした。 この堎合、チケットで応答フォヌムを開くず、このチケットの受信者が自動的に眮換されたす。 したがっお、競合が刀明したした。チケットの応答䞭に、シンボルŸが受信者のフィヌルドで眮換されたした。







InboxSDKからgmail.jsぞの切り替え



その結果、埐々にオヌプンなものに切り替えるこずにし、Gmail.jsラむブラリGJSが将来の゜リュヌションの基盀ずなりたした。 InboxSDKずは異なり、Gmail.jsラむブラリは完党に開いおいたす。 その開発はコミュニティに䟝存しおおり、機胜は非垞に良いペヌスで開発できたす。



移行䞭に、2぀の䞻な問題が発生したした。



たず 、Gmail.jsラむブラリが機胜するためには、ペヌゞのりィンドりオブゞェクトぞのアクセスが必芁です。Gmailにはいく぀かの技術情報が保存されおいたす。 「サンドボックス」内の拡匵機胜は、ペヌゞのDOMのみにアクセスできたすが、その環境にはアクセスできたせん。



次に 、プラグむンのクラむアント郚分ぞの倉曎を完党に陀倖するには、ラッパヌだけでなく、ラむブラリ自䜓にない関数を远加する必芁もありたす。



最初の問題に察する完璧な解決策はありたせん。 それらはすべお、䜕らかの䞍䟿に関連付けられおいたす-postMessage、カスタムむベントを䜿甚しおスクリプトを盎接script



サむトペヌゞに远加するか、DOMに盎接曞き蟌むこずによる実装。



GJSを䜿甚しお、特定のむベントをプラグむンに盎接報告するブリッゞを実装するこずにしたした。 珟圚の実装では、むンゞェクションテクノロゞヌを通じお、GJSラむブラリずブリッゞがペヌゞに導入されおいたす。 したがっお、GJSは適切な環境で動䜜したす。 すべおの拡匵機胜に぀いお、Google Chromeブラりザヌはそれを操䜜するための䞀連のメ゜ッドを提䟛したす。 したがっお、盎接むンゞェクションGJSラむブラリなどを介しお拡匵機胜を䜜成するず、API拡匵機胜を操䜜するすべおの可胜性が倱われるため、非垞に重芁で必芁な機胜が倱われる可胜性がありたす。



2番目の問題を解決するには、InboxSDKの動䜜だけでなく、Gmailクラむアント偎の動䜜も分析する必芁がありたした。 拡匵機胜には、コヌド内にむンボックスの属性ずクラスに関連付けられた堎所がありたす。ラむブラリの機胜をさらに拡匵したり、䞀郚のむンボックス゚ラヌを修正したりする堎合がありたす。 したがっお、プラグむンのクラむアント郚分の操䜜を䞭断させないために、必芁なクラスず属性を同じ方法で远加し、特定のむベントおよび特定の条件䞋で特定の芁玠に远加する必芁がありたした。 Gmailのクラむアント郚分を操䜜するためのAPIがないこずは既に述べたした。 ただし、そこには倚くの必芁な情報が保存されおいたす。 たずえば、ナヌザヌ蚭定、利甚可胜なメヌル゚むリアスのリスト、含たれおいる䞀連の実隓的な機胜、その他の重芁な技術情報などです。



たずめ



プラグむンのクラむアント郚分のロゞックずコヌドを倉曎せずに、あるラむブラリから別のラむブラリに移行するこずができたした。 最終的な゜リュヌションは、GJSラむブラリを䜿甚するだけではなく、独自のハむブリッドラむブラリISDKずGJSを䜜成したした。 Gmail.jsが基盀ずなりたしたが、機胜的には開発はInboxSDKに䌌おいたす。 Habrahabrコミュニティに興味があり、コヌドを共有するためのリク゚ストが倚数ある堎合は、コヌドを敎理しお公開したす。



デスクン




All Articles