2016-04-13 5 views
1

Я работаю в Unity3D для Android, использующ SDK Facebook Unity, чтобы хранить, извлекать оценки и делать таблицы лидеров, но я нашел проблемы, и я не могу понять, причина.Не могу опубликовать оценку пользователя в Facebook SDK для Unity

Я использую:

  • Unity Pro 5.3.3f1.
  • Facebook Unity SDK 7.4.0.
  • Graph API 2.5.

Я разместил код, который, как я думаю, создает проблемы. Иногда это работает, но в основном это происходит из-за отсутствия требуемых разрешений или путем указания ошибки «не найден».

Игра правильно настроена на веб-странице разработчиков Facebook.

-

public void RequestSetScore(FacebookScore facebookScore) 
{ 
    if (FacebookManager.Instance.accessToken == null) 
    { 
     FacebookManager.Instance.OnRequestSetScoreError("Application has not logged in to Facebook yet."); 
     return; 
    } 

    if (this.PermissionIsGranted("publish_actions")) 
    { 
     string requestUri; 
     requestUri = string.Format("{0}/scores?score={1}", 
      FacebookManager.Instance.accessToken.UserId, 
      facebookScore.ScoreValue.ToString()); 

     FB.API(requestUri, HttpMethod.POST, 
      scoreSetRequestresult => 
      { 
       // Esto se ejecuta cuando la respuesta se ha recibido, no inmediatamente 
       if (scoreSetRequestresult.Error != null) 
       { 
        // This is an event of my class 
        FacebookManager.Instance.OnRequestSetScoreError(scoreSetRequestresult.Error); 
       } 
       else 
       { 
        // This is an event of my class 
        FacebookManager.Instance.OnRequestSetScoreSuccess(); 
       } 
      } 
     ); 
    } 
    else 
    { 
     // Pedir permisos para publicar puntuaciones 
     FB.LogInWithPublishPermissions(FacebookManager.Instance.publishPermissions, 
      permissionRequestresult => 
      { 
       // Esto se ejecuta cuando la respuesta se ha recibido, no inmediatamente 
       if (permissionRequestresult.Error != null) 
       { 
        string requestUri; 
        requestUri = string.Format("{0}/scores?score={1}", 
         FacebookManager.Instance.accessToken.UserId, 
         facebookScore.ScoreValue.ToString()); 

        FB.API(requestUri, HttpMethod.POST, 
         scoreSetRequestresult => 
         { 
          // Esto se ejecuta cuando la respuesta se ha recibido, no inmediatamente 
          if (scoreSetRequestresult.Error != null) 
          { 
           // This is an event of my class 
           FacebookManager.Instance.OnRequestSetScoreError(scoreSetRequestresult.Error); 
          } 
          else 
          { 
           // This is an event of my class 
           FacebookManager.Instance.OnRequestSetScoreSuccess(); 
          } 
         } 
        ); 
       } 
       else 
       { 
        // This is an event of my class 
        FacebookManager.Instance.OnRequestSetScoreError(permissionRequestresult.Error); 
       } 
      } 
     ); 
    } 
} 

// Métodos auxiliares 
private bool PermissionIsGranted(string permission) 
{ 
    AccessToken token = Facebook.Unity.AccessToken.CurrentAccessToken; 
    foreach (string grantedPermission in token.Permissions) 
    { 
     if (grantedPermission == permission) 
      return true; 
    } 

    return false; 
} 

-

Комментарии о коде: Тип FacebookScore является структурой, которая инкапсулирует долго, и позволяет мне работать с ним побитовым для хранения более одного номера. Эти методы относятся к одноэлементному классу, который доступен в каждой точке игры и сохраняется посредством смены сцены.

Любая идея была бы очень ценной для меня, спасибо заранее.

+0

чисто примечание, многие используют плагины prime31, чтобы добиться успеха с помощью FB. – Fattie

+0

Проблема решена. Я отправлял 64-битное целое число, но API-интерфейс Facebook может принимать только 32-разрядное целое число без знака. – lmgginspace

+0

вы должны принять это как ответ, это поможет людям. – Fattie

ответ

0

Проблема решена. Я отправлял 64-битное целое число, но API-интерфейс Facebook может принимать только 32-разрядное целое число без знака.

Смежные вопросы