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 つのリスナーで両方のサーフェスを扱う場合は、ready の network を防御的に読み取ってください。ウィジェットは、このサーフェスが決して送らない cancelled の reason も 1 つ追加します:
superseded — 2 回目の popup() 呼び出しが進行中の試行を置き換えた場合です。ここでは
ウィンドウは 1 つ、結末も 1 つなので、置き換えられるものがありません。
接続ごとに、
connect:success、connect:error、connect:cancelled のうちちょうど 1 つが届き
ます。connect:closed はそのうちの 1 つではありません — その後に続いて、ポップアップが意図的に
閉じたことを伝えます。
connect:success はアカウントが保存された後にのみ送信されるため、その直後の
GET /user には接続されたアカウントがすでに反映されています。
connect:error の後、ポップアップはユーザーが何が問題だったかを読めるように開いたままになり
ます。connect:success と connect:cancelled の後は自ら閉じます。デバッグ中にすべてのケースで
開いたままにするには、URL に &autoClose=false を追加してください。リッスンする
このスニペットが行っていることのうち、抜けやすいものが 2 つあります。event.origin をチェックする
ことと、ユーザーが手動で閉じたポップアップを監視することです — 閉じたウィンドウは何も送信できない
ため、気づく方法はポーリングだけです。
エラー
connect:error は API の他の部分と同じコードを伴うため、ここで見るコードは他の場所と同じ意味を
持ちます。このサーフェスに固有のものは 1 つです:
それ以外はソーシャルネットワーク自身の失敗であり、その失敗がすでに持っているコードで報告されます —
たとえば Instagram の認可の問題は
322 で、これには Professional ではなくまだ Personal のままの
アカウントも含まれます。
無効なリンクは別の形で届く
期限切れ、失効済み、または不明なリンクは、ページがイベントの送信先を知る前に拒否される ため、イベントを送信できません。ユーザーには理由とコードが画面に表示され、貴社のページはユーザーが ウィンドウを閉じたときにconnect:cancelled を受け取ります。
これらを区別するには、Link Session の取得をポーリングして
ください: expired と revoked を確定的に報告し、存在しないリンクには 502 を返します。
ポップアップを管理したくない場合
選択肢は 2 つあり、イベントを諦めるのは 2 つ目だけです。 ウィジェットにウィンドウを所有させる。 埋め込みウィジェットが 代わりにウィンドウを開いて監視し、上記のすべてのイベントを貴社のハンドラーに届けます。アカウントが 保存された瞬間のsuccess は変わらず受け取れます。配管を書かなくてよくなるだけです。さらに
ウィジェットのフレームなら、ほとんどのネットワークでネットワーク自身のログインまでポップアップが
まったく開きません。
代わりにポーリングする。 ポップアップが本当に使えない場合 — サーバーレンダリングされるアプリや、
システムブラウザでリンクを開くモバイルアプリ — は、
Link Session の取得をポーリングしてください。アカウントが保存
されると同時に completedAt と completedNetworks を報告します。これは connect:success が送信
されたはずの瞬間と同じです。Telegram は帯域外で完了しブラウザコールバックがまったくないため、常に
この方法で完了します。