Skip to main content
Khi bạn mở một trang liên kết trong một cửa sổ bật lên, trang của chính bạn có thể lắng nghe những gì xảy ra trong đó: người dùng của bạn đã kết nối Reddit, họ rút lui, kết nối thất bại. Bạn nhận một sự kiện cho mỗi kết cục, nên UI của bạn cập nhật ngay khoảnh khắc nó xảy ra thay vì theo một bộ đếm thời gian. Đặt origin khi bạn tạo liên kết, mở url được trả về trong một cửa sổ bật lên, và lắng nghe. Không cần gì khác, và không có gì thay đổi với các liên kết được tạo mà không có origin — chúng hành xử đúng như trước nay.
Đang dùng widget nhúng? Điều này đã được nối dây sẵn cho bạn. Script nhận các sự kiện này và chuyển chúng cho connect.on("success", …) với tiền tố connect: được lược bỏ — không cần viết message listener, không cần kiểm tra origin, không cần poll popup.closed. Trang này là giao thức truyền tải bên dưới, và là thứ bạn xây dựng dựa trên khi bạn sở hữu cửa sổ: chế độ trực tiếp, hoặc một cửa sổ bật lên bạn tự mở.
Các sự kiện chỉ được gửi đến đúng origin bạn đặt trên liên kết, và chỉ đến cửa sổ đã mở cửa sổ bật lên. Dù vậy hãy luôn kiểm tra event.origin trong listener của bạn: bất kỳ trang nào cũng có thể gửi một message đến cửa sổ của bạn, và origin là phần duy nhất của một message không thể bị giả mạo.

Các Sự kiện

Mỗi message được gửi đến trang của bạn là một object có dạng { source: "ayrshare", version: 1, event, ... }, và mang network bất cứ khi nào sự kiện liên quan đến một mạng. Hai sự kiện thì không: một connect:closed từ trang liên kết được lưu trữ, nơi nó có nghĩa là người dùng của bạn đã nhấn Done chứ không phải là một kết nối đã kết thúc, và connect:ready của widget (xem bên dưới). Các kết cục mà mã của chính bạn tổng hợp — một cửa sổ bật lên bị chặn, hoặc một cửa sổ người dùng của bạn đã đóng — không đến từ chúng tôi và chỉ mang những gì bạn đưa cho chúng.
Widget nhúng khác biệt ở một sự kiện. ready của nó thông báo rằng một slot đã sẵn sàng chứ không nói gì về một mạng, nên nó không mang network — trong khi ready của cửa sổ bật lên nêu tên mạng mà nó được mở cho. Nếu bạn xử lý cả hai bề mặt từ một listener, hãy đọc network một cách phòng thủ trên ready.Widget cũng thêm một reason cho cancelled mà bề mặt này không bao giờ gửi: superseded, khi một lệnh gọi popup() thứ hai thay thế một lần thử vẫn đang diễn ra. Ở đây chỉ có một cửa sổ và một kết cục, nên không có gì để thay thế.
Đúng một trong connect:success, connect:error hoặc connect:cancelled đến cho mỗi lần kết nối. connect:closed không phải một trong số đó — nó đến sau, để cho bạn biết cửa sổ bật lên đã đóng một cách có chủ đích. connect:success chỉ được gửi sau khi tài khoản đã được lưu, nên một GET /user ngay sau nó đã hiển thị tài khoản được kết nối.
Cửa sổ bật lên giữ nguyên mở sau connect:error để người dùng của bạn có thể đọc điều gì đã sai. Nó tự đóng sau connect:success và connect:cancelled. Thêm &autoClose=false vào URL để giữ nó mở trong mọi trường hợp trong khi bạn đang gỡ lỗi.

Lắng nghe

Hai điều đoạn mã này làm mà dễ bị bỏ sót. Nó kiểm tra event.origin, và nó theo dõi một cửa sổ bật lên mà người dùng của bạn tự tay đóng — một cửa sổ đã đóng không thể gửi gì cả, nên polling là cách duy nhất để nhận ra.

Lỗi

connect:error mang cùng các mã như phần còn lại của API, nên một mã bạn thấy ở đây có nghĩa đúng như nó có nghĩa ở mọi nơi khác. Mã dành riêng cho bề mặt này: Bất cứ thứ gì khác là thất bại của chính mạng xã hội, được báo cáo với mã mà thất bại đó vốn có — ví dụ 322 cho một vấn đề ủy quyền Instagram, bao gồm cả một tài khoản vẫn là Personal thay vì Professional.

Một liên kết đã chết đến theo cách khác

Một liên kết đã hết hạn, bị thu hồi hoặc không tồn tại bị từ chối trước khi trang có thể biết nơi gửi sự kiện, nên nó không thể gửi sự kiện nào. Người dùng của bạn thấy lý do và mã của nó trên màn hình, và trang của bạn nghe được connect:cancelled khi họ đóng cửa sổ. Để phân biệt chúng, hãy poll Lấy một Link Session: nó báo cáo expired và revoked một cách xác thực, và trả về 502 cho một liên kết không tồn tại.

Nếu Bạn Không Muốn Quản lý Cửa sổ Bật lên

Hai lựa chọn, và chỉ lựa chọn thứ hai từ bỏ các sự kiện. Để widget sở hữu cửa sổ. Widget nhúng mở và theo dõi nó giúp bạn và giao mọi sự kiện ở trên đến các handler của bạn. Bạn vẫn nhận được success ngay khoảnh khắc một tài khoản được lưu; bạn chỉ không phải viết phần đường ống. Các khung của nó cũng có nghĩa là hầu hết các mạng không bao giờ mở một cửa sổ bật lên nào cho đến màn hình đăng nhập của chính mạng xã hội. Poll thay thế. Nếu một cửa sổ bật lên thực sự không khả dụng — một ứng dụng render phía máy chủ, hoặc một ứng dụng mobile mở liên kết trong trình duyệt hệ thống — hãy poll Lấy một Link Session. Nó báo cáo completedAt và completedNetworks ngay khi một tài khoản được lưu, đó là cùng khoảnh khắc connect:success lẽ ra sẽ được gửi. Telegram luôn hoàn tất theo cách này, vì nó hoàn tất ngoài luồng mà không có callback trình duyệt nào cả.