import AppConfig from "@scripts/app/AppConfig"; import { FacebookImpl, IFBLoginRes } from "./FacebookImpl"; export class FBH5Impl extends FacebookImpl { private _isLogined = false; init() { try { //@ts-ignore window.fbAsyncInit = () => { //@ts-ignore FB.init({ appId: AppConfig.FBAppID, cookie: true, xfbml: true, version: 'v26.0' }) //@ts-ignore FB.AppEvents.logPageView(); console.log("fb sdk init!!!"); this.onInited(); }; const script = document.createElement('script'); script.id = 'facebook-jssdk'; script.async = true; script.defer = true; script.crossOrigin = 'anonymous'; script.src = 'https://connect.facebook.net/en_US/sdk.js'; script.onerror = () => { console.error('[FaceBook] Facebook JavaScript SDK 下载失败'); }; document.head.appendChild(script); } catch (e) { console.error("[FaceBook]", e); } this._isLogined = false; } private async getLoginStatus() { return new Promise((resolve, reject) => { //@ts-ignore FB.getLoginStatus(response => { console.log('[Facebook] login status:', response); this._isLogined = response?.status === 'connected'; resolve(response?.status === 'connected'); }); }) } protected async onLogin() { if (this._isLogined) { await this.logOut(); } return new Promise((resolve, reject) => { //@ts-ignore FB.login(response => { console.log('[Facebook] login response: ', response); const res: IFBLoginRes = { accessToken: "", isCancel: false } if (response.authResponse) { res.accessToken = response.authResponse?.accessToken || ""; } this._isLogined = !!res.accessToken; if (!res.accessToken) { res.isCancel = true; } resolve(res); }) }); } async logOut() { if (!this._isLogined) return true; return new Promise((resolve, reject) => { //@ts-ignore FB.logout(response => { this._isLogined = false; console.log('[Facebook] logout: ', response); resolve(true); }) }) } }