Skip to main content
Lorsque vous ouvrez une page de liaison dans une popup, votre propre page peut écouter ce qui s’y passe : votre utilisateur a connecté Reddit, il a renoncé, la connexion a échoué. Vous recevez un événement par résultat, donc votre UI se met à jour au moment où cela se produit plutôt que sur un timer. Définissez origin lorsque vous créez le lien, ouvrez l’url retournée dans une popup, et écoutez. Rien d’autre n’est requis, et rien ne change pour les liens créés sans origin — ils se comportent exactement comme ils l’ont toujours fait.
Vous utilisez le widget intégré ? Tout cela est déjà câblé pour vous. Le script reçoit ces événements et les transmet à connect.on("success", …) avec le préfixe connect: retiré — pas de listener message, pas de vérification d’origine, pas de polling de popup.closed à écrire. Cette page est le protocole de câblage sous-jacent, et ce sur quoi vous construisez lorsque c’est vous qui possédez la fenêtre : le mode direct, ou une popup que vous ouvrez vous-même.
Les événements ne sont envoyés qu’à l’origin exacte que vous avez définie sur le lien, et seulement à la fenêtre qui a ouvert la popup. Vérifiez quand même toujours event.origin dans votre listener : n’importe quelle page peut poster un message à votre fenêtre, et l’origine est la seule partie d’un message qui ne peut pas être falsifiée.

Les événements

Chaque message posté à votre page est un objet de la forme { source: "ayrshare", version: 1, event, ... }, et porte network chaque fois que l’événement concerne un réseau. Deux événements n’en portent pas : un connect:closed provenant de la page de liaison hébergée, où il signifie que votre utilisateur a appuyé sur Done plutôt que la fin d’une connexion, et le connect:ready du widget (voir ci-dessous). Les résultats que votre propre code synthétise — une popup bloquée, ou une fenêtre que votre utilisateur a fermée — ne viennent pas de nous et ne portent que ce que vous leur donnez.
Le widget intégré diffère sur un événement. Son ready annonce qu’un emplacement est actif plutôt que quoi que ce soit à propos d’un réseau, donc il ne porte pas de network — tandis que le ready de la popup nomme le réseau pour lequel elle a été ouverte. Si vous gérez les deux surfaces depuis un seul listener, lisez network de manière défensive sur ready.Le widget ajoute aussi une raison de cancelled que cette surface n’envoie jamais : superseded, lorsqu’un second appel à popup() remplace une tentative encore en cours. Ici, il y a une fenêtre et un résultat, donc il n’y a rien à remplacer.
Exactement l’un de connect:success, connect:error ou connect:cancelled arrive par connexion. connect:closed n’en fait pas partie — il suit, pour vous dire que la popup s’est fermée volontairement. connect:success n’est envoyé qu’une fois le compte enregistré, donc un GET /user immédiatement après affiche déjà le compte connecté.
La popup reste ouverte après connect:error pour que votre utilisateur puisse lire ce qui s’est mal passé. Elle se ferme d’elle-même après connect:success et connect:cancelled. Ajoutez &autoClose=false à l’URL pour la garder ouverte dans tous les cas pendant le débogage.

Écouter

Deux choses que fait ce snippet et qui sont faciles à omettre. Il vérifie event.origin, et il surveille une popup que votre utilisateur a fermée à la main — une fenêtre fermée ne peut rien envoyer, donc le polling est le seul moyen de s’en apercevoir.

Erreurs

connect:error porte les mêmes codes que le reste de l’API, donc un code que vous voyez ici signifie ce qu’il signifie partout ailleurs. Le seul spécifique à cette surface : Tout le reste est l’échec propre au réseau social, rapporté avec le code que cet échec possède déjà — par exemple 322 pour un problème d’autorisation Instagram, ce qui inclut un compte encore Personnel plutôt que Professionnel.

Un lien mort arrive différemment

Un lien expiré, révoqué ou inconnu est refusé avant que la page ne puisse apprendre où envoyer les événements, donc il ne peut pas en envoyer. Votre utilisateur voit la raison et son code à l’écran, et votre page entend connect:cancelled lorsqu’il ferme la fenêtre. Pour les distinguer, pollez Obtenir une session de liaison : il rapporte expired et revoked de manière fiable, et retourne 502 pour un lien qui n’existe pas.

Si vous préférez ne pas gérer de popup

Deux options, et seule la seconde renonce aux événements. Laissez le widget posséder la fenêtre. Le widget intégré l’ouvre et la surveille pour vous et délivre chaque événement ci-dessus à vos handlers. Vous recevez toujours success au moment où un compte est enregistré ; vous n’écrivez simplement pas la plomberie. Ses frames font aussi que la plupart des réseaux n’ouvrent jamais de popup du tout avant la connexion propre du réseau. Pollez à la place. Si une popup n’est réellement pas disponible — une application rendue côté serveur, ou une application mobile ouvrant le lien dans le navigateur système — pollez Obtenir une session de liaison. Il rapporte completedAt et completedNetworks dès qu’un compte est enregistré, ce qui est le même moment où connect:success aurait été envoyé. Telegram se termine toujours de cette manière, puisqu’il se conclut hors bande sans aucun callback navigateur.