FBH5Impl.ts 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. //@ts-ignore
  7. window.fbAsyncInit = () => {
  8. //@ts-ignore
  9. FB.init({
  10. appId: AppConfig.FBAppID,
  11. cookie: true,
  12. xfbml: true,
  13. version: 'v26.0'
  14. })
  15. //@ts-ignore
  16. FB.AppEvents.logPageView();
  17. console.log("fb sdk init!!!");
  18. this.getLoginStatus();
  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.log(new Error('Facebook JavaScript SDK 下载失败'));
  29. };
  30. document.head.appendChild(script);
  31. this._isLogined = false;
  32. }
  33. private async getLoginStatus() {
  34. return new Promise<boolean>((resolve, reject) => {
  35. //@ts-ignore
  36. FB.getLoginStatus(response => {
  37. console.log('[Facebook] login status:', response);
  38. this._isLogined = response?.status === 'connected';
  39. resolve(response?.status === 'connected');
  40. });
  41. })
  42. }
  43. protected async onLogin() {
  44. if (this._isLogined) {
  45. await this.logOut();
  46. }
  47. return new Promise<IFBLoginRes>((resolve, reject) => {
  48. //@ts-ignore
  49. FB.login(response => {
  50. console.log('[Facebook] login response: ', response);
  51. const res: IFBLoginRes = {
  52. accessToken: "",
  53. isCancel: false
  54. }
  55. if (response.authResponse) {
  56. res.accessToken = response.authResponse?.accessToken || "";
  57. }
  58. this._isLogined = !!res.accessToken;
  59. if (!res.accessToken) {
  60. res.isCancel = true;
  61. }
  62. resolve(res);
  63. })
  64. });
  65. }
  66. async logOut() {
  67. if (!this._isLogined) return true;
  68. return new Promise<boolean>((resolve, reject) => {
  69. //@ts-ignore
  70. FB.logout(response => {
  71. this._isLogined = false;
  72. console.log('[Facebook] logout: ', response);
  73. resolve(true);
  74. })
  75. })
  76. }
  77. }