FBH5Impl.ts 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import AppConfig from "@scripts/app/AppConfig";
  2. import { FacebookImpl, IFBLoginRes } from "./FacebookImpl";
  3. export class FBH5Impl extends FacebookImpl {
  4. private _isLogined = false;
  5. init() {
  6. try {
  7. //@ts-ignore
  8. window.fbAsyncInit = () => {
  9. //@ts-ignore
  10. FB.init({
  11. appId: AppConfig.FBAppID,
  12. cookie: true,
  13. xfbml: true,
  14. version: 'v26.0'
  15. })
  16. //@ts-ignore
  17. FB.AppEvents.logPageView();
  18. console.log("fb sdk init!!!");
  19. this.onInited();
  20. };
  21. const script = document.createElement('script');
  22. script.id = 'facebook-jssdk';
  23. script.async = true;
  24. script.defer = true;
  25. script.crossOrigin = 'anonymous';
  26. script.src = 'https://connect.facebook.net/en_US/sdk.js';
  27. script.onerror = () => {
  28. console.error('[FaceBook] Facebook JavaScript SDK 下载失败');
  29. };
  30. document.head.appendChild(script);
  31. } catch (e) {
  32. console.error("[FaceBook]", e);
  33. }
  34. this._isLogined = false;
  35. }
  36. private async getLoginStatus() {
  37. return new Promise<boolean>((resolve, reject) => {
  38. //@ts-ignore
  39. FB.getLoginStatus(response => {
  40. console.log('[Facebook] login status:', response);
  41. this._isLogined = response?.status === 'connected';
  42. resolve(response?.status === 'connected');
  43. });
  44. })
  45. }
  46. protected async onLogin() {
  47. if (this._isLogined) {
  48. await this.logOut();
  49. }
  50. return new Promise<IFBLoginRes>((resolve, reject) => {
  51. //@ts-ignore
  52. FB.login(response => {
  53. console.log('[Facebook] login response: ', response);
  54. const res: IFBLoginRes = {
  55. accessToken: "",
  56. isCancel: false
  57. }
  58. if (response.authResponse) {
  59. res.accessToken = response.authResponse?.accessToken || "";
  60. }
  61. this._isLogined = !!res.accessToken;
  62. if (!res.accessToken) {
  63. res.isCancel = true;
  64. }
  65. resolve(res);
  66. })
  67. });
  68. }
  69. async logOut() {
  70. if (!this._isLogined) return true;
  71. return new Promise<boolean>((resolve, reject) => {
  72. //@ts-ignore
  73. FB.logout(response => {
  74. this._isLogined = false;
  75. console.log('[Facebook] logout: ', response);
  76. resolve(true);
  77. })
  78. })
  79. }
  80. }