0

SimCity BuildIt, HayDay и Paradise Bay (рядом, насколько я могу судить) все делают FB логин через server based authentication. (FB API версии 2.2, 2.2 и 2.6 соответственно)Как именно популярные игры делают серверный вход через OAuth?

Все они используют «response_type=token,signed_request», и все они используют некоторый вариант «redirect_uri=fbXXXXXXXXXXXXXXX://authorize», где XXX - это идентификатор приложения FB. Это очень запутанно, потому что я понятия не имею, как на самом деле получить токен, если перенаправление вернется в Facebook.

Было бы разумно, если бы существовал «разрешающий URI обратного вызова», но FB предоставляет только «URI отказа от авторизации».

Я не хочу использовать другой тип токена или другую стратегию перенаправления. Это для мобильной игры, и я думаю, что есть веская причина, почему все основные игры делают это так. Я также не могу использовать SDK для Facebook из-за дополнительной суммы, которую он добавляет к бинарному размеру в эфире; Apple по-прежнему ограничивает OTA до 100 МБ.

+0

Сколько огромный раздувание? – WizKid

+0

50 МБ до нашего размера. Наш текущий размер составляет чуть более 100 МБ, поэтому это будет 50% -ное увеличение только для того, что можно сделать с помощью веб-подхода без стоимости двоичного размера. Я, в основном, понял это. Отправляюсь обратно, когда у меня будет полный ответ. – Wisteso

+0

Нет, нет. Измерить двоичный файл, а не SDK, который вы загрузили – WizKid

ответ

0

Понял это окончательно. Таким образом, fbXXXXXXXXXXXXXXXXX: // разрешает перенаправление, предполагается использовать в сочетании с iOS URL Scheme, где вы регистрируете схему, используя ваш APP ID, добавленный с «fb». Затем Facebook добавит немного данных в конец URL-адреса переадресации. Таким образом, ваш окончательный результат выглядит примерно так: fbXXXXXXXXXXXXXXX://authorize/#signed_request=<user_token>&expires_in=1234567, где <user_token> - это длинное закодированное значение SHA256 (используя секрет вашего приложения).

Это означает, что URL-адрес должен быть передан как аргумент вашего приложения, где вы можете декодировать и распаковывать аргументы по мере необходимости, а затем использовать токен для последующих запросов, таких как https://graph.facebook.com/v2.8/me/friends?access_token=<user_token>. Поскольку мы используем Unity 5, это означало добавление небольшого фрагмента кода в пользовательский подкласс UnityAppController.

Хотя это несколько выходит за рамки этого вопроса, чтобы, возможно, спасти других УБС единства некоторые головные боли, код подкласса UnityAppController должен был бы быть что-то вроде ...

#import "UnityAppController.h" 

@interface MyAppController: UnityAppController {} 
@end 

@implementation MyAppController 
- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation 
{ 
    const char *URLString = [[url absoluteString] UTF8String]; 
    UnitySendMessage("_MyUnityObject", "MyMethod", URLString); 
    return [super application:application openURL:url sourceApplication:sourceApplication annotation:annotation]; 
} 
@end 

IMPL_APP_CONTROLLER_SUBCLASS(MyAppController) 
Смежные вопросы