| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- 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<boolean>((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<IFBLoginRes>((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<boolean>((resolve, reject) => {
- //@ts-ignore
- FB.logout(response => {
- this._isLogined = false;
- console.log('[Facebook] logout: ', response);
- resolve(true);
- })
- })
- }
- async share(options: IFBShareOptions): Promise<IFBShareRes> {
- return new Promise<IFBShareRes>((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 onLogEvent(
- eventName: string,
- parameters: IFBEventParams = {},
- valueToSum?: number,
- ): Promise<boolean> {
- 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<boolean> {
- try {
- //@ts-ignore
- FB.AppEvents.logPurchase(amount, currency, parameters);
- return true;
- } catch (error) {
- console.error('[Facebook][Web] 购买事件记录失败:', error);
- return false;
- }
- }
- async flushEvents(): Promise<boolean> {
- // Facebook JavaScript SDK 没有公开的手动 flush API,由 SDK 自行批量上报。
- return true;
- }
- }
|