Диалоговое окно Angular2 и Facebook SDK FB.ui закрывается после нажатия кнопки «Далее»

Я пытаюсь реализовать Facebook в прямом эфире с помощью Go Live Dialog в приложениях angular2. У меня работает SDK, и он делает вызовы API в порядке, но при попытке использовать FB.ui диалоговое окно не работает, потому что появляется первый экран диалогового окна и спрашивают, где опубликовать, но при нажатии «Далее» диалоговое окно исчезает, и у меня есть нет обратной связи о том, что происходит. (нажатие «Далее» должно показать другое диалоговое окно со 2-м шагом)

Любые намеки на работу над этим?

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: Angular-cli говорит, что Webpack теперь действителен

но через несколько секунд появляется: [по умолчанию] Предоставленные параметры не соответствуют ни одной сигнатуре цели вызова.

Я проверил FB SDK для fb.ui, и он запрашивает только 2 параметра: FB.ui(params, function(response)), и я даю оба.


person Cristian Sepulveda    schedule 20.12.2016    source источник


Ответы (1)


  1. Используйте =>, иначе вы не нельзя использовать this внутри функции.

  2. ng2-facebook-sdk returns и promise, если вы читали README.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)
    );
  }

}
person J J B    schedule 20.12.2016
comment
вы правы, но это все еще не работает. кажется, что обратный вызов функции не запускается, я нажимаю NEXT, и диалоговое окно закрывается без обратной связи. - person Cristian Sepulveda; 20.12.2016
comment
Только что посмотрел API ng2-facebook-sdk, и он возвращает обещание, я обновлю код. - person J J B; 20.12.2016
comment
@CristianSepulveda Я обновил свой ответ, указав обнаруженные проблемы и исправленный код. - person J J B; 20.12.2016
comment
отлично, теперь с использованием промисов диалог работает и показывает 2-й шаг, но ng-cli показывает новую ошибку: Argument of type '{ display: string; method: string; phase: string; }' is not assignable to parameter of type 'FacebookUiParams'. чтение readme ng2-facebook-sdk нет спецификации для FacebookUiParams< /б>. также я все еще не могу получить значение ответа, мне нужен response.secure_stream_url, который должен прийти в ответе. - person Cristian Sepulveda; 20.12.2016
comment
Где вы прочитали, что вы должны использовать этот объект в вызове fb.ui? Я вижу, что в документах нет такого кода. Откуда вы взяли код в первую очередь? - person J J B; 20.12.2016
comment
в диалоговом окне Go Live: [ссылка] (developers.facebook. com/docs/videos/live-video/) - person Cristian Sepulveda; 20.12.2016
comment
Можете ли вы запустить npm list ng2-facebook-sdk и сказать мне, какая версия у вас установлена? - person J J B; 20.12.2016
comment
Я просто отправляю запрос на вытягивание с обновлениями, необходимыми для интерфейса, вы можете добавлять их вручную, пока они не примут фиксацию. - person J J B; 20.12.2016
comment
Вы можете увидеть запрос на вытягивание здесь github.com/zyramedia/ng2-facebook-sdk /pull/33 и коммит изменен здесь github .com/zyramedia/ng2-facebook-sdk/pull/33/commits/ - person J J B; 20.12.2016
comment
так быстро!!! Поменял интерфейс локально и работает, теперь ошибки нет. но я все еще не могу поймать данные ответа :/ (я использую [email protected].) - person Cristian Sepulveda; 20.12.2016
comment
Давайте продолжим обсуждение в чате. - person J J B; 20.12.2016