SimCity BuildIt,HayDay和Paradise Bay(据我所知)都是通过server based authentication进行FB登录的。 (FB API版本分别为2.2,2.2和2.6)
他们都使用“response_type=token,signed_request
”并且他们都使用“redirect_uri=fbXXXXXXXXXXXXXXX://authorize
”的变体,其中XXX是FB App ID。这非常令人困惑,因为如果重定向回到Facebook,我不知道如何实际获取令牌。
如果存在“授权回调URI”,但FB仅提供“取消授权回调URI”,则会有意义。
我不打算使用不同的令牌类型或不同的重定向策略。这是一个手机游戏,我想有一个很好的理由为什么所有的主要游戏都以这种方式进行授权。由于它增加了空中二进制大小的额外金额,我也无法使用Facebook SDK; Apple仍将OTA限制为100MB。
答案 0 :(得分:0)
终于搞清楚了。因此,fbXXXXXXXXXXXXXXXX://授权重定向旨在与iOS URL Scheme结合使用,您可以使用前缀为" fb
&#34;的APP ID注册该方案。然后Facebook将在重定向URL的末尾添加一些数据。所以你的最终结果看起来像fbXXXXXXXXXXXXXXX://authorize/#signed_request=<user_token>&expires_in=1234567
,其中<user_token>
是一个长SHA256编码值(使用你的app秘密)。
这意味着URL应该最终作为参数传递给您的应用程序,您可以根据需要解码和解压缩args,然后将令牌用于后续请求,例如https://graph.facebook.com/v2.8/me/friends?access_token=<user_token>
。由于我们使用Unity 5,这意味着在自定义UnityAppController子类中添加一小段代码。
虽然它有点超出了这个问题的范围,但是为了节省其他Unity开发人员的头疼,UnityAppController子类的代码需要像...... < / p>
#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)