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))
,我给它们两个。
答
使用ES6 arrow function
=>
否则你将无法使用this
一个函数内部。的ng2-facebook-sdk
returns
如果你读一个promise
的README.md你会看到ui(params: FacebookUiParams): Promise
。的
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)
);
}
}
你是正确的,但它仍然不起作用。看起来函数的回调没有触发,我点击NEXT,对话框关闭而没有反馈。 –
刚刚看了一下ng2-facebook-sdk API,它返回一个承诺,我会更新代码。 –
@CristianSepulveda我已经更新了我的答案,并找到了我找到的问题和更正后的代码。 –