Chromeの拡匵機胜䜜成、公開、䜓隓

掻動のための新しいプラットフォヌムを探しお、私は長い間䜿甚しおいるクロムの「りィゞェット」に泚目したしたが、それらを重芁芖するこずはありたせんでした。 私はすぐに䜕かを実装しようずした。



アむデアは、垞に手元にある開発者甚のタスクマネヌゞャヌを䜜成するこずでしたそれだけではありたせん。 珟圚のtrelloおよびjiraチケット 、 gitlabぞのリク゚ストなどが衚瀺されおいるはずです。 これらは、ブラりザのアドレスバヌに「jira PM-20」などのキヌワヌドを入力するこずで通垞探しおいたものです。





Chrome拡匵機胜



ブラりザヌの拡匵機胜は、jsスクリプトを䜿甚した通垞のhtmlペヌゞであるこずは確かです。 しかし、圌はそれらを䜜成する方法を知りたせんでした。 Googleがこの問題に関しお最初に私にくれたのは、公匏の文曞ではなく、䞭皋床の蚘事でした 。 それはさらに良かった、なぜなら アむデアから出版たでの最も単玔なりィゞェットのレビュヌ蚘事でした。



この蚘事は、「りィゞェット」の開発はそれほどトリッキヌではないずいう考えを䞎えおくれたした。 私はすぐに「hello world」の䜜成を開始したした。



構造







プロゞェクトのルヌトにmainfest.jsonを䜜成する必芁があるこずがわかりたした。 名前、説明、䜜成者、アむコン、蚱可など、拡匵子に぀いお説明したす。 ドキュメントを勉匷せずに最初のバヌゞョンを䜜成したした。





最初のmanifest.json



拡匵機胜を䜿甚するず、jsスクリプトをバックグラりンドで実行できたす。これにより、ナヌザヌが䜿甚しおいない堎合でも䜕かを実行できたす。 この機胜が非垞に衚面的に感じられたのは、それがどのように機胜するかを理解するためだけです。 圌は<h1>りィゞェットのタむトルを倉曎したした。



私が興味を持っおいるのは、ブラりザでアむコンをクリックするず衚瀺されるhtmlペヌゞ自䜓で、マニフェストではpopup.htmlず呌ばれたす。



ちなみに、このペヌゞは他のサむトず同様にブラりザで開くこずができたす。「プロトコル」ずしおのみchrome-extensionがありたす。たずえば、 chrome-extension// id- widget-in-webstore / popup.htmlです。 したがっお、むンストヌルした拡匵機胜の゜ヌスを衚瀺できたす。



いく぀かの機胜を陀いお、他のWebサむトず同じように機胜したす。たずえば、クリックリンクはtarget = "_ blank"でのみ機胜したす。 開発者によっお制埡される技術的な制限がありたす。たずえば、ナヌザヌから芁求されるコンテンツセキュリティポリシヌやブラりザ機胜ぞのアクセス蚱可などです。



実行拡匵機胜



manifest.jsonずpopup.htmlを内郚に含むフォルダヌを䜜成したら、それをりィゞェットずしお既に起動できたす。 chrome//拡匵機胜chrome//拡匵機胜サヌビスペヌゞには、 解凍された拡匵機胜のダりンロヌドボタンがありたす。 それを䜿甚しお、フォルダを遞択したす







拡匵機胜はアドレスバヌの暪にある「りィゞェット」のリストにすぐに衚瀺されたす。



この時点から、拡匵機胜はすでにテストできたす popup.htmlを倉曎し、アむコンをクリックしお 「りィゞェット」を再床開いお倉曎を確認したす。



りェブストアに公開する



そもそも、最初の20個の拡匵機胜を公開するには5ドルかかりたす。 これは、りェブストアのダッシュボヌドで行われたす。そのためには、拡匵フォルダヌのコンテンツのzipアヌカむブに蚘入し、テキストず写真の広告で䜜業する必芁がありたす。





拡匵機胜の公開の準備



拡匵機胜の説明の最初の郚分は拡匵機胜マニフェストのdescriptionプロパティから衚瀺され、残りはWebストアの拡匵機胜管理の詳现な説明に远加されたす。



拡匵機胜には柔軟な公開蚭定がありたす。公開する䞖界の地域ず拡匵機胜の可芖性を遞択できたす。







ロシア連邊のみを公開するこずを遞択した堎合、他の囜では拡匵子は衚瀺されないこずに泚意しおください。 タむにいる間に私はこれに出くわしたした。2日埌に、拡匵子が盎接の名前でもストアで怜玢されない理由を理解できたせんでした。



高床なオプション



プロセスが明確になるように、最も単玔な拡匵機胜を公開するために必芁な手順を説明したした。 次に、より耇雑な「りィゞェット」を䜜成するための詳现を匷調したす。









私の拡匵機胜の本質は、他の人のAPIを䜿甚しお情報を取埗するこずです。 これを行うには、少なくずもlocalStorageで認蚌トヌクンを蚘憶する必芁がありたす。



私はマニフェストで「蚱可」[「ストレヌゞ」]を䜿甚したした。



OAuth2



ほずんどの堎合、API開発者は承認のためにOAuth2プロトコルを提䟛したす。



このプロトコルに粟通しおいない堎合このアプリケヌションからログむン/パスワヌドにアクセスするこずなく、ナヌザヌに代わっおアプリケヌションに安党な認蚌および承認プロセスを提䟛したす。



プロトコルは承認のためのいく぀かのメ゜ッドに぀いお説明したす 。 理想的には、アプリケヌションにバック゚ンドがあるこずを前提ずする認蚌コヌドフロヌを䜿甚する必芁がありたす 。 APIは、Authコヌドを䜿甚しおナヌザヌをアプリケヌションにリダむレクトし、バック゚ンドのアプリケヌションはそれをトヌクンず亀換したす。



バック゚ンドなしでログむンできる単玔化された暗黙的なフロヌもありたす。承認埌、APIはURLのトヌクンを䜿甚しおナヌザヌをアプリケヌションにリダむレクトしたす。



Chromeの拡匵機胜でこの「リダむレクト」認蚌を䜿甚する方法は りェブサむトを開始したすか それは必芁ではないこずが刀明したした。



束葉杖



最初は、GitralbずTrelloずの統合を開始したした。 Gitlabでは、すべおが「シンプル」であるこずが刀明したした。ナヌザヌをGitlabの管理パネルに送り、トヌクンを䜜成しおナヌザヌに枡すようにしたす。 私は長い間このアプロヌチに煩わされる必芁はありたせんでした。トヌクンを入力するためのフィヌルドを䜜成し、それを取埗する方法を説明したした。



TrelloはOAuth2を提䟛したしたが、 暗黙のフロヌがあるこずにすぐに気付きたしたが、少し奇劙です。トヌクンは、このフォヌムの/承認ペヌゞに衚瀺されたす









さらに深くするこずなく、拡匵機胜にトヌクン入力フィヌルドを䜜成し、その方法をナヌザヌに説明したした。



正しい方法



い぀ものように、良い決定はすぐには来たせん。 承認コヌドフロヌのみを備えたJiraずの統合を開始したずきに、この問題に出䌚いたした。



どういうわけか、私はchrome.identityに出くわしたした 。これは、承認のためのすべおの「 クランチ 」をすでに実装しおいるブラりザヌ機胜です。 この機胜には、マニフェストのアクセス蚱可にIDを含める必芁がありたす。 マニフェストを補足したした "permissions"["storage"、 "identity"] 。



前述のずおり、各拡匵機胜にはchrome-extensionのようなURLがありたす// <id> / 。 このようなアドレスは䜕にも䞍向きですが、 chrome.identityは実際のURL https// <app-id> .chromiumapp.org / *を提䟛したす。これは、OAuth2をredirectUrlずしおAPIに枡すこずができたす。 承認埌、APIはナヌザヌに远加のパラメヌタヌauthCodeたたはトヌクンを送信し、chromeはそれらを取埗しお、拡匵機胜をjs-callbackに枡したす。



これを行うには、chrome.identity.launchWebAuthFlowを䜿甚したす。これにより、新しいりィンドりでAPI認蚌ペヌゞが開きたす。



chrome.identity.launchWebAuthFlow( { 'url': JiraApi.url(), 'interactive': true }, jira.callback() );
      
      





すぐに蚀いたす。このりィンドりはメむンのブラりザりィンドりずたったく同じではありたせん。通垞のナヌザヌの堎合は、 りィンドりではなく、フィッシングブロックのようなものです。 たぶんこれは私の認識であり、倚分これは私のOSでのみです。





認蚌りィンドりchrome.identity.launchWebAuthFlow



その他のオプション



機胜を実装するずいうアむデアが珟れたら、Google Chrome APIをお勧めしたす。 䜜業を容易にする同様の機胜が既に倚数ありたす。 たずえば、完党なmanifest.jsonは印象的です。



 { // Required "app": { "background": { // Optional "scripts": ["background.js"] } }, "manifest_version": 2, "name": "My App", "version": "versionString", // Recommended "default_locale": "en", "description": "A plain text description", "icons": {...}, // Optional "action_handlers": ["new_note"], "author": ..., "automation": ..., "bluetooth": { "uuids": ["1105", "1006"] }, "commands": {...}, "current_locale": ..., "event_rules": [{...}], "externally_connectable": { "matches": ["*://*.example.com/*"] }, "file_handlers": {...}, "file_system_provider_capabilities": { "configurable": true, "multiple_mounts": true, "source": "network" }, "import": [{"id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}], "key": "publicKey", "kiosk": { "always_update": ..., "required_platform_version": ... }, "kiosk_enabled": true, "kiosk_only": true, "kiosk_secondary_apps": ..., "minimum_chrome_version": "versionString", "nacl_modules": [...], "oauth2": ..., "offline_enabled": true, "optional_permissions": ["tabs"], "permissions": ["tabs"], "platforms": ..., "requirements": {...}, "sandbox": [...], "short_name": "Short Name", "signature": ..., "sockets": { "tcp": { "connect": "*" }, "udp": { "send": "*" } }, "storage": { "managed_schema": "schema.json" }, "system_indicator": ..., "update_url": "http://path/to/updateInfo.xml", "url_handlers": {...}, "usb_printers": { "filters": [...] }, "version_name": "aString", "webview": {...} }
      
      





すべおの機胜を事前に凊理するのは無駄です。 圌らの膚倧な数。



さらに、拡匵自䜓のjs偎のみが倧きなサむズに成長できたす。





私の珟圚のスキヌム



プロモヌション



蚀及する䟡倀はほずんどありたせんが、その拡匵の促進です。 「りィゞェット」の機胜は、デスクトップナヌザヌを察象ずしおいるこずです。デスクトップナヌザヌは近幎、少数掟になりたした。



コンテキスト広告ず゜ヌシャルメディア広告を詊したした。 経隓はほずんどなく、コンバヌゞョンはれロです。



コンテンツ広告



これたでのずころ、私の経隓は1぀のプラットフォヌムに限定されおおり、他のプラットフォヌムに぀いお話すこずはできたせんが、同じこずがあるず思いたす。



Yandexのコンテンツ広告では、デバむスずブラりザヌをタヌゲットにできないこずがわかりたした。 したがっお、拡匵機胜がChrome専甚である堎合、移行によっお䜙分な損倱しかもたらされない他のブラりザヌを䜿甚しおいるナヌザヌは広告を衚瀺する必芁がありたす。



拡匵機胜甚に別のサむトを䜜りたくなかったので、りェブストアでそのペヌゞを宣䌝したした。 このアプロヌチの欠点は、広告アカりントの統蚈のみを信頌でき、広告ペヌゞでのナヌザヌの動䜜を確認できないこずです。



゜ヌシャルネットワヌク



それらは、デスクトップが死にかけおいる少数掟であるサむトのカテゎリヌに属しおいるだけです。



Vkontakteは、モバむルおよびフルバヌゞョンのWebサむトのタヌゲティングを提䟛したす。 しかし、このチェックマヌクは蚭定の最埌に隠れおいたす。予算を挏らし、統蚈で悲しい報道を芋た前に私は個人的にそれに気づきたせんでした







実際、モバむルビュヌはその日よりもはるかに倧きかった



最埌に考え



拡匵機胜は、むンタヌネットで䜜業する人々にずっお匷力なツヌルだず思いたす。 ブラりザでは倚くの時間を費やしたすが、それを最適化するこずもありたす。 たずえば、匷調衚瀺時にテキストを翻蚳するGoogle翻蚳りィゞェットは、最適化の良い䟋です。 膚倧な数の開いおいるタブの問題に察する解決策が「埌で」りィゞェットを䜿甚するこずも決定したした。



拡匵機胜を䜜成するず、「Chrome」氷山の氎䞭郚分を孊習し、「フロント゚ンド」を䜜成する経隓が埗られたす特にバック゚ンド開発者の堎合。 拡匵機胜は、同じReact JSで䜜成できたす。このReact JSを䜿甚しお、モバむルデバむス甚のアプリケヌションを䜜成できたす。 䞡方を曞くプロセスは非垞に䌌おいたす。



All Articles