Skip to main content
リンクページをポップアップで開くと、その中で起きたことを貴社自身のページでリッスンできます: ユーザーが Reddit を接続した、途中でやめた、接続が失敗した、などです。結末ごとにイベントが 届くため、UI はタイマーではなく、起きた瞬間に更新されます。 リンクの作成時に origin を設定し、返された url を ポップアップで開いて、リッスンしてください。それ以外に必要なものはなく、origin なしで作成された リンクには何の変更もありません — これまでとまったく同じように動作します。
埋め込みウィジェットをお使いですか? これはすでに配線済み です。 スクリプトがこれらのイベントを受け取り、connect: プレフィックスを取り除いて connect.on("success", …) に渡します — message リスナーも、オリジンチェックも、書くべき popup.closed のポーリングもありません。このページはその土台となるワイヤープロトコルであり、 貴社がウィンドウを所有する場合 — ダイレクトモードや、自分で開くポップアップ — に対して 構築するものです。
イベントは、リンクに設定した正確な origin に対してのみ、そしてポップアップを開いたウィンドウに 対してのみ送信されます。それでもリスナーでは必ず event.origin をチェックしてください: どの ページでも貴社のウィンドウにメッセージを post でき、偽装できないのはメッセージのうちオリジン だけです。

イベント一覧

貴社のページに post されるすべてのメッセージは { source: "ayrshare", version: 1, event, ... } の 形のオブジェクトで、イベントがネットワークに関するものであれば network を伴います。伴わない イベントは 2 つあります: ホスト型リンクページからの connect:closed(接続が 1 つ終わったのでは なく、ユーザーが Done を押したことを意味します)と、ウィジェットの connect:ready(下記参照)です。 貴社のコードが合成する結末 — ブロックされたポップアップや、ユーザーが閉じたウィンドウ — は当社 からのものではなく、貴社が与えたものだけを保持します。
埋め込みウィジェットは 1 つのイベントで異なります。その ready はネットワークに関することではなくスロットが立ち上がったことを告げるため、network を 伴いません — 一方、ポップアップの ready は、それが開かれた対象のネットワークを示します。 1 つのリスナーで両方のサーフェスを扱う場合は、readynetwork を防御的に読み取ってください。ウィジェットは、このサーフェスが決して送らない cancelled の reason も 1 つ追加します: superseded — 2 回目の popup() 呼び出しが進行中の試行を置き換えた場合です。ここでは ウィンドウは 1 つ、結末も 1 つなので、置き換えられるものがありません。
接続ごとに、connect:successconnect:errorconnect:cancelled のうちちょうど 1 つが届き ます。connect:closed はそのうちの 1 つではありません — その後に続いて、ポップアップが意図的に 閉じたことを伝えます。 connect:success はアカウントが保存された後にのみ送信されるため、その直後の GET /user には接続されたアカウントがすでに反映されています。
connect:error の後、ポップアップはユーザーが何が問題だったかを読めるように開いたままになり ます。connect:successconnect:cancelled の後は自ら閉じます。デバッグ中にすべてのケースで 開いたままにするには、URL に &autoClose=false を追加してください。

リッスンする

このスニペットが行っていることのうち、抜けやすいものが 2 つあります。event.origin をチェックする ことと、ユーザーが手動で閉じたポップアップを監視することです — 閉じたウィンドウは何も送信できない ため、気づく方法はポーリングだけです。

エラー

connect:error は API の他の部分と同じコードを伴うため、ここで見るコードは他の場所と同じ意味を 持ちます。このサーフェスに固有のものは 1 つです: それ以外はソーシャルネットワーク自身の失敗であり、その失敗がすでに持っているコードで報告されます — たとえば Instagram の認可の問題は 322 で、これには Professional ではなくまだ Personal のままの アカウントも含まれます。

無効なリンクは別の形で届く

期限切れ失効済み、または不明なリンクは、ページがイベントの送信先を知る前に拒否される ため、イベントを送信できません。ユーザーには理由とコードが画面に表示され、貴社のページはユーザーが ウィンドウを閉じたときに connect:cancelled を受け取ります。 これらを区別するには、Link Session の取得をポーリングして ください: expiredrevoked を確定的に報告し、存在しないリンクには 502 を返します。

ポップアップを管理したくない場合

選択肢は 2 つあり、イベントを諦めるのは 2 つ目だけです。 ウィジェットにウィンドウを所有させる。 埋め込みウィジェットが 代わりにウィンドウを開いて監視し、上記のすべてのイベントを貴社のハンドラーに届けます。アカウントが 保存された瞬間の success は変わらず受け取れます。配管を書かなくてよくなるだけです。さらに ウィジェットのフレームなら、ほとんどのネットワークでネットワーク自身のログインまでポップアップが まったく開きません。 代わりにポーリングする。 ポップアップが本当に使えない場合 — サーバーレンダリングされるアプリや、 システムブラウザでリンクを開くモバイルアプリ — は、 Link Session の取得をポーリングしてください。アカウントが保存 されると同時に completedAtcompletedNetworks を報告します。これは connect:success が送信 されたはずの瞬間と同じです。Telegram は帯域外で完了しブラウザコールバックがまったくないため、常に この方法で完了します。