Angular2和Facebook SDK FB.ui对话框在点击下一步后关闭

问题描述:

我试图在angular2应用上使用Facebook Go Live Dialog来实现Facebook直播。 我有SDK工作,它使得API调用正常,但是当试图使用FB.ui时,对话框并不好,因为对话框的第一个屏幕出现并询问在哪里发布,但是当单击Next时,对话框消失,我对发生的事情没有反馈。 (点击下一步应该会显示第二步的另一个对话框)Angular2和Facebook SDK FB.ui对话框在点击下一步后关闭

任何提示要解决这个问题?

facebooklive.ts

import {Component, OnInit} from '@angular/core'; 
import {FacebookService, FacebookLoginResponse, FacebookInitParams, 
FacebookApiMethod} from 'ng2-facebook-sdk/dist'; 

@Component({ 
... 
template : '<button (click)="FBDialog()">Dialog</button>' 
providers: [...FacebookService] 
}) 
export class Facebook_live implements OnInit { 
constructor(private fb:FacebookService) { 
let fbParams:FacebookInitParams = { 
appId: 'xxxxx', 
xfbml: false, 
version: 'v2.8' 
}; 
this.fb.init(fbParams); 
} 

FBDialog() { 
this.fb.ui(
    { 
     display: 'popup', 
     method: 'live_broadcast', 
     phase: 'create', 
    }, function (response) { 
     console.log(response); 

     if (!response.id) { 
      console.log('dialog canceled'); 
      return; 
     } 
     console.log('stream url:' + response.secure_stream_url); 

     this.fb.ui(
      { 
       display: 'popup', 
       method: 'live_broadcast', 
       phase: 'publish', 
       broadcast_data: response, 
      }, 
      function (response) { 
       console.log("video status: \n" + response.status); 
      }); 
    }); 


} 

编辑1:角CLI说 的WebPack现在有效

但几秒钟后显示: [默认]提供的参数不匹配任何签名呼叫目标。

我检查了FB SDK的fb.ui,它只要求2个参数:FB.ui(params, function(response)),我给它们两个。

  1. 使用ES6 arrow function =>否则你将无法使用this一个函数内部。

  2. ng2-facebook-sdkreturns如果你读一个promiseREADME.md你会看到ui(params: FacebookUiParams): Promise

  3. fb.init在构造函数中不需要this


import {Component, OnInit} from '@angular/core'; 
import {FacebookService, FacebookLoginResponse, FacebookInitParams, 
    FacebookApiMethod} from 'ng2-facebook-sdk/dist'; 

@Component({ 
    ... 
    template : '<button (click)="FBDialog()">Dialog</button>' 
    providers: [...FacebookService] 
}) 
export class Facebook_live implements OnInit { 


    constructor(private fb:FacebookService) { 
    let fbParams:FacebookInitParams = { 
     appId: 'xxxxx', 
     xfbml: false, 
     version: 'v2.8' 
    }; 
    fb.init(fbParams); 
    } 

    FBDialog() { 
    this.fb.ui(
     { 
     display: 'popup', 
     method: 'live_broadcast', 
     phase: 'create', 
     }) 
     .then(
     (response) => { 
      if (!response.id) { 
      console.log('dialog canceled'); 
      return; 
      } 

      console.log('stream url:' + response.secure_stream_url); 

      this.fb.ui(
      { 
       display: 'popup', 
       method: 'live_broadcast', 
       phase: 'publish', 
       broadcast_data: response, 
      }).then(
      (response) => { 
      console.log("video status: \n" + response.status); 
      }, 
      (error: any) => console.error(error) 
     ); 


     }, 
     (error: any) => console.error(error) 
    ); 
    } 

} 
+0

你是正确的,但它仍然不起作用。看起来函数的回调没有触发,我点击NEXT,对话框关闭而没有反馈。 –

+1

刚刚看了一下ng2-facebook-sdk API,它返回一个承诺,我会更新代码。 –

+0

@CristianSepulveda我已经更新了我的答案,并找到了我找到的问题和更正后的代码。 –