import AppConfig from "@scripts/app/AppConfig"; import { FacebookImpl, IFBEventParams, IFBLoginRes, IFBShareOptions, IFBShareRes, } 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); }) }) } async share(options: IFBShareOptions): Promise { return new Promise((resolve) => { //@ts-ignore FB.ui({ method: 'share', href: options.url, hashtag: options.hashtag, quote: options.quote, }, (response) => { resolve({ success: Boolean(response), isCancel: !response, postId: response?.post_id, }); }); }); } async logEvent( eventName: string, parameters: IFBEventParams = {}, valueToSum?: number, ): Promise { try { //@ts-ignore FB.AppEvents.logEvent(eventName, valueToSum, parameters); return true; } catch (error) { console.error(`[Facebook][Web] 事件 ${eventName} 记录失败:`, error); return false; } } async logPurchase( amount: number, currency: string, parameters: IFBEventParams = {}, ): Promise { try { //@ts-ignore FB.AppEvents.logPurchase(amount, currency, parameters); return true; } catch (error) { console.error('[Facebook][Web] 购买事件记录失败:', error); return false; } } async flushEvents(): Promise { // Facebook JavaScript SDK 没有公开的手动 flush API,由 SDK 自行批量上报。 return true; } }