Создание запросов от приложений к пользователям в Facebook с помощью Unity Facebook SDK

#facebook #facebook-graph-api #facebook-unity-sdk #facebook-app-requests

Вопрос:

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

Я создаю мобильную игру в Unity и использую SDK для Facebook Unity (версия 9.0.0).

Мне удалось отправить запросы от приложения к пользователю с помощью HTTP POST в конечную точку /{идентификатор пользователя}/apprequests, как описано в документах.

Однако единственный способ, которым мне удалось это сделать, — это использовать следующий код, который я объясняю ниже:

 var previousToken = AccessToken.CurrentAccessToken;

AccessToken.CurrentAccessToken = new AccessToken(APP_ACCESS_TOKEN, previousToken.UserId, previousToken.ExpirationTime, previousToken.Permissions, previousToken.LastRefresh,
previousToken.GraphDomain);

string query = "/USER_ID/apprequests";

var fields = new Dictionary<string, string>(); 
fields["data"] = "LIFE";
fields["message"] = "hakuna matata!";

FB.API(query, HttpMethod.POST, callback, fields);

AccessToken.CurrentAccessToken = previousToken; 

Когда игрок входит в систему, генерируется маркер доступа пользователя, и все последующие вызовы API неявно используют этот маркер доступа. Вот почему, если я хочу использовать токен доступа к приложению, я думаю, что мне нужно создать новый токен доступа и использовать его для FB.Вызов API. В конце я сбрасываю текущий токен доступа на токен доступа пользователя.

Как я уже упоминал, это работает. Запрос отправляется и может быть HTTP GET. Проблема в том, что, согласно документам: «в целях безопасности маркер доступа к приложению никогда не должен быть жестко закодирован в код на стороне клиента, это даст всем, кто загрузил вашу веб-страницу или декомпилировал ваше приложение, полный доступ к вашему секрету приложения и, следовательно, возможность изменять ваше приложение. Это означает, что большую часть времени вы будете использовать токены доступа к приложениям только при вызовах с сервера на сервер».

И все же я не нашел другого способа сделать это. Есть какие-нибудь предложения?

Комментарии:

1. Затем вам придется добавить серверный компонент в свое приложение. Unity с внешнего интерфейса отправляет запрос на ваш сервер, а затем серверная часть выполняет вызов API FB, предоставляя маркер доступа к приложению, который хранится только в серверной части …