Unity接入Facebook登录


2018-11-09更新

跳转至Facebook App登录坑点总结

  1. IOS: 如果前期接入过微信,需要注意重载的openURL函数,该函数会导致跳转报错。
  2. 安卓: Unity插件中的Debug Android Key Hash(密钥散列)有误,需要从代码中获取后填写至Facebook后台。

环境信息:

Unity 5.6.6
Facebook SDK 7.13.0


Facebook后台
  1. 登录Facebook开发者后台
  2. 创建自己的应用


    Unity接入Facebook登录_第1张图片
    创建自己的Facebook应用
  3. 记录AppId并进入设置界面


    Unity接入Facebook登录_第2张图片
    设置界面
  4. 点击添加平台,添加IOS和Android


    Unity接入Facebook登录_第3张图片
    添加平台
  5. 填写信息
    IOS: BundleId


    Unity接入Facebook登录_第4张图片
    IOS设置

Android:Google Play 包名、类名、密钥散列

Unity接入Facebook登录_第5张图片
Android设置

其中 类名密钥散列可以通过Unity中导入的Facebook SDK中获得。

  1. 添加完信息后,点击页面下方的保存更改

导入Facebook SDK
  1. 下载Facebook SDK的Unity版本,下载地址
  2. 双击导入Unity


    Unity接入Facebook登录_第6张图片
    Unity目录

    注:截图中删除了Example目录

  3. 点击菜单Facebook->Edit Settings


    Unity接入Facebook登录_第7张图片
    Unity设置
  • 将Facebook后台生成的AppId添加入设置
  • 在Android设置中的ClassName(类名)Debug Android Key Hash(密钥散列)填入Facebook后台
    注意坑点: 在Unity中生成的散列是错误的,需要通过代码的方式获取,具体参考StackOverflow的讨论
  1. 点击Regenerate Android Manifest生成安卓工程所需要的manifest文件

代码集成
  1. 启动时初始化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;
     }
}
  1. 执行登录
public void Login()
{
    var perms = new List(){"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");
    }
}

END

你可能感兴趣的:(Unity接入Facebook登录)