2018-11-09更新
跳转至Facebook App登录坑点总结
- IOS: 如果前期接入过微信,需要注意重载的openURL函数,该函数会导致跳转报错。
- 安卓: Unity插件中的Debug Android Key Hash(密钥散列)有误,需要从代码中获取后填写至Facebook后台。
环境信息:
Unity 5.6.6
Facebook SDK 7.13.0
Facebook后台
- 登录Facebook开发者后台
-
创建自己的应用
-
记录AppId并进入设置界面
-
点击添加平台,添加IOS和Android
-
填写信息
IOS: BundleId
Android:Google Play 包名、类名、密钥散列
其中类名与密钥散列可以通过Unity中导入的Facebook SDK中获得。
- 添加完信息后,点击页面下方的保存更改
导入Facebook SDK
- 下载Facebook SDK的Unity版本,下载地址
-
双击导入Unity
注:截图中删除了Example目录
-
点击菜单Facebook->Edit Settings
- 将Facebook后台生成的AppId添加入设置
- 在Android设置中的ClassName(类名)、Debug Android Key Hash(密钥散列)填入Facebook后台
注意坑点: 在Unity中生成的散列是错误的,需要通过代码的方式获取,具体参考StackOverflow的讨论
- 点击Regenerate Android Manifest生成安卓工程所需要的manifest文件
代码集成
- 启动时初始化Facebook SDK
public void Init ()
{
if (!FB.IsInitialized) {
// Initialize the Facebook SDK
FB.Init(InitCallback, OnHideUnity);
} else {
// Already initialized, signal an app activation App Event
FB.ActivateApp();
}
}
初始化函数中用到的回调函数如下
private void InitCallback ()
{
if (FB.IsInitialized) {
// Signal an app activation App Event
FB.ActivateApp();
// Continue with Facebook SDK
} else {
Debug.Log("Failed to Initialize the Facebook SDK");
}
}
private void OnHideUnity (bool isGameShown)
{
if (!isGameShown) {
// Pause the game - we will need to hide
Time.timeScale = 0;
} else {
// Resume the game - we're getting focus again
Time.timeScale = 1;
}
}
- 执行登录
public void Login()
{
var perms = new List<string>(){"public_profile", "email"};
FB.LogInWithReadPermissions(perms, AuthCallback);
}
登录回调如下
private void AuthCallback (ILoginResult result)
{
if (FB.IsLoggedIn) {
// AccessToken class will have session details
// 在这里添加我们登录成功的逻辑
// 比如获取token
var aToken = Facebook.Unity.AccessToken.CurrentAccessToken;
// ......
} else {
Debug.Log("User cancelled login");
}
}