2016-05-23 5 views
17

Przeczytałem dokument, zarówno pod numerami github, jak i Facebook developers docs.
Jest tylko próbka, nic więcej. Brak dokumentu API.
Jak korzystać z interfejsu API wykresów z react-native-fbsdk?

kod, aby złożyć zamówienie Graph API jest

const infoRequest = new GraphRequest(
    '/me', 
    null, 
    this._responseInfoCallback, 
); 

A zwrotna

_responseInfoCallback(error: ?Object, result: ?Object) { 
    if (error) { 
    alert('Error fetching data: ' + error.toString()); 
    } else { 
    alert('Success fetching data: ' + result.toString()); 
    } 
} 

I tu jest funkcja, aby złożyć zamówienie Graph api

testRequestGraphAPI(){ 
    const infoRequest = new GraphRequest(
    '/me', 
    null, 
    this._responseInfoCallback, 
); 
    new GraphRequestManager().addRequest(infoRequest).start(); 
} 

Jednak Nie mogę znaleźć żadnego kolejnego dokumentu. Nie mam pojęcia, co robią poszczególne parametry.

Wynik powyższych kodów jest następujący.
Success Nie wiem też, jak uzyskać wynik.

Jednak, gdy próbuję zmienić "\ me" na "mnie? Pola = id, nazwa", to się nie udało. Chociaż poprosiłem o pozwolenie

<LoginButton 
    publishPermissions={["publish_actions,user_birthday, user_religion_politics, user_relationships, user_relationship_details, user_hometown, user_location, user_likes, user_education_history, user_work_history, user_website, user_managed_groups, user_events, user_photos, user_videos, user_friends, user_about_me, user_status, user_games_activity, user_tagged_places, user_posts, user_actions.video, user_actions.news, user_actions.books, user_actions.music, user_actions.fitness, public_profile, basic_info"]} 
    onLoginFinished={ 
    (error, result) => { 
     if (error) { 
     alert("login has error: " + result.error); 
     } else if (result.isCancelled) { 
     alert("login is cancelled."); 
     } else { 
     AccessToken.getCurrentAccessToken().then(
      (data) => { 
      meow_accesstoken = data.accessToken 
      alert(meow_accesstoken.toString()) 
      } 
     ) 
     } 
    } 
    } 
    onLogoutFinished={() => alert("logout.")}/> 

Failed
Ale to nie drukuje się, jaki błąd, po prostu object Object.

Problem polega na tym, że nie rozumiem przykładowego kodu dostarczanego przez Facebooka bez żadnego wyjaśnienia.

Oto moje pytanie, że naprawdę potrzeba mi pomóc:
pierwsze w ogóle, proszę sprawdzić javascript code że aktualnie patrzysz?
Jak korzystać wykres API w reagować-native fbsdk odzyskać trochę Informacja o użytkowniku (przykład: pełna nazwa) i skutecznie wyświetlacz to (powiadomienie użytku)?
Co robią poszczególne parametry w GraphRequest()?
Jaka jest struktura błędu obiektów i wynik obiektu w _responseInfoCallback?

ROZWIĄZANIE
Dzięki @Samuel odpowiedź, mam zaktualizowany mój kod

testRequestGraphAPI: function(){  
     const infoRequest = new GraphRequest(
      '/me', 
      { 
      parameters: { 
       fields: { 
       string: 'email,name,first_name,middle_name,last_name' // what you want to get 
       }, 
       access_token: { 
       string: meow_accesstoken.toString() // put your accessToken here 
       } 
      } 
      }, 
      this._responseInfoCallback // make sure you define _responseInfoCallback in same class 
     ); 
    new GraphRequestManager().addRequest(infoRequest).start(); 
    } 

a zwrotnego

_responseInfoCallback: function(error: ?Object, result: ?Object) { 
    alert("meow response"); 
    if (error) { 
     alert('Error fetching data: ' + error.toString()); 
     console.log(Object.keys(error));// print all enumerable 
     console.log(error.errorMessage); // print error message 
     // error.toString() will not work correctly in this case 
     // so let use JSON.stringify() 
     meow_json = JSON.stringify(error); // error object => json 
     console.log(meow_json); // print JSON 
    } else { 
     alert('Success fetching data: ' + result.toString()); 
     console.log(Object.keys(result)); 
     meow_json = JSON.stringify(result); // result => JSON 
     console.log(meow_json); // print JSON 
    } 
    } 

* Uwaga: Dla console.log(), trzeba użyj "Zdalnej debugowania JS", a następnie otwórz narzędzia programistyczne Chrome, aby wyświetlić dziennik.

Odpowiedz

24

Niestety, dokumentacja react-native-fbsdk nie jest aktualizowana, a przykłady nie działają poprawnie.

Mam ten sam problem i rozwiązałem go, próbując i pomyłkę.

Aby rozwiązać problem, musisz zmienić swoje GraphRequest dodanie params i pola do niego tak:

<LoginButton 
    onLoginFinished={ 
     (error, result) => { 
     if (error) { 
      alert("login has error: " + result.error); 
     } else if (result.isCancelled) { 
      alert("login is cancelled."); 
     } else { 

      AccessToken.getCurrentAccessToken().then(
      (data) => { 
       let accessToken = data.accessToken 
       alert(accessToken.toString()) 

       const responseInfoCallback = (error, result) => { 
       if (error) { 
        console.log(error) 
        alert('Error fetching data: ' + error.toString()); 
       } else { 
        console.log(result) 
        alert('Success fetching data: ' + result.toString()); 
       } 
       } 

       const infoRequest = new GraphRequest(
       '/me', 
       { 
        accessToken: accessToken, 
        parameters: { 
        fields: { 
         string: 'email,name,first_name,middle_name,last_name' 
        } 
        } 
       }, 
       responseInfoCallback 
      ); 

       // Start the graph request. 
       new GraphRequestManager().addRequest(infoRequest).start() 

      } 
     ) 

     } 
     } 
    } 
    onLogoutFinished={() => alert("logout.")}/> 

Będziesz potrzebę umożliwienia zdalnego JS Debug aby zobaczyć informacje o console.log(). https://facebook.github.io/react-native/docs/debugging.html

I prawdopodobnie trzeba uzyskać pewne uprawnienia, aby uzyskać więcej informacji niż nazwiska i e-mail, więc jest to dobry pomysł, aby spojrzeć na Facebook Graph API Dokumentacja: https://developers.facebook.com/docs/graph-api/overview/

referencyjny:

https://github.com/facebook/react-native-fbsdk/issues/105#issuecomment-206501550

+0

Drogi @Samuel, dziękuję za odpowiedź. Zastanawiam się, gdzie powinienem użyć parametru meow_accesstoken. Jak wiem, te żądania interfejsu API wykresu wymagają tokenu dostępu, ale nie widzę go w kodzie. –

+1

Niestety, mój kod miał kilka błędów, zaktualizowałem go i przetestowałem, a teraz działa poprawnie. Przeniosłem bloki Graph wewnątrz obietnicy AccessToken i dodałem parametr accessToken w GraphRequest. Proszę spojrzeć na historię edycji, aby lepiej zrozumieć, co zrobiłem :) –

+1

Dzięki za post. Nie wiem, dlaczego obiekt parametrów nie jest udokumentowany na Facebooku. Nie znalazłem, że potrzebuję AccessToken na moim GraphRequest przy użyciu v0.3.0. – AndrewHenderson

4

Oto przykład niestandardowego przycisku, jeśli chcesz go wykonać :)

FbLoginButton() { 
LoginManager 
    .logInWithReadPermissions(['public_profile']) 
    .then(function (result) { 
    if (result.isCancelled) { 
     alert('Login cancelled'); 
    } else { 
     AccessToken 
     .getCurrentAccessToken() 
     .then((data) => { 
      let accessToken = data.accessToken 
      alert(accessToken.toString()) 

      const responseInfoCallback = (error, result) => { 
      if (error) { 
       console.log(error) 
       alert('Error fetching data: ' + error.toString()); 
      } else { 
       console.log(result) 
       alert('Success fetching data: ' + result.toString()); 
      } 
      } 

      const infoRequest = new GraphRequest('/me', { 
      accessToken: accessToken, 
      parameters: { 
       fields: { 
       string: 'email,name,first_name,middle_name,last_name' 
       } 
      } 
      }, responseInfoCallback); 

      // Start the graph request. 
      new GraphRequestManager() 
      .addRequest(infoRequest) 
      .start() 

     }) 
    } 
    }, function (error) { 
    alert('Login fail with error: ' + error); 
    }); 
    } 
+0

Działa dobrze. Dziwne, mają tak mało dokumentacji. –