6000字保姆级大白话教你Unity接入FaceBook SDK


前言

最近博主也是开始找大四实习了,由于工作需要,需要接海外的sdk,例如admobtwitterfacebook等等,由于以前在校都是所作的项目都是跟taptap sdk打交道,以至于接入这些sdk这块造成了挺久的困惑,所以在这里先记录一下Unity如何接facebook的sdk。


一、接入Facebook可以干什么?

在现如今的数字时代,社交媒体的影响力越来越大。作为全球最受欢迎的社交媒体平台之一,Facebook拥有数十亿的用户,为开发者提供了与用户互动和推广游戏的机会。接入Facebook SDK,开发者可以实现诸如社交分享、邀请好友、登录验证等功能,进一步增强游戏的互动性和推广效果。

二、接入步骤

1.下载Facebook对Unity支持的SDK

下载链接:https://developers.facebook.com/docs/unity/downloads

在这里插入图片描述

这里博主下载的是最新的16.0.2版本的SDK,下载完成后解压得到一个unitypackage
在这里插入图片描述


2.导入SDK

新建一个Unity项目把unitypackage拖进去进行导入

在这里插入图片描述

在这里插入图片描述
…下播!抢救一下


导入完成插件后导航栏会多出一个Facebook的选项,
在这里插入图片描述

点击Facebook → Edit Settings后会在Inspector下会显示一个asset文件的内容:

在这里插入图片描述

这时候的知识点就要涉及到Facebook的开发者后台了。

3.Facebook开发者平台创建应用

在这里插入图片描述
其中:应用名称对应App Name应用编号对应Facebook App Id应用密钥对应Client Token,将其复制进对应的位置。

此时来看Android Build Facebook Settings

在这里插入图片描述
这里如果没有安装OpenSSL的话会提示not found OpenSSL,首先需要先去安装下载好OpenSSL。

OpenSSL下载链接:https://slproweb.com/products/Win32OpenSSL.html

下载安装完成之后去到系统变量里面配置OpenSSL的bin目录,如果还是有提示:not found OpenSSL,则看看有没有配置Java的环境变量,如果没有需要配置JDK下面的bin目录为环境变量。

点击Regenerate Android Manifest完成后回到开发者后台的应用内,为测试应用添加一个Android平台,商店选择Google Play

在这里插入图片描述

Package Name赋值到软件包名称处、Class Name复制到类名处、Debug Android Key Hash赋值到密钥散列
注:这里可以先在 Unity Editor的 Player Settings里面把包名改一下

4.切换项目平台

在这里插入图片描述
切换至Android平台后会弹出一个自动解析的一个框,需要点击Enable等待下载一些依赖完成。可能挂梯子会比较好,不过如果失败了也没事,直接关掉。
在这里插入图片描述

5.配置Facebook

确保 Android 最低 API 级别设置为“Android 4.0.3 'Ice Cream Sandwich'(API 级别 15)”或更高版本。
在这里插入图片描述

然后在Publishing Settings下的Build选项下勾选与博主一样的

在这里插入图片描述
然后逐个修改文件:

1.Custom Main Manifest是上面点击了Regenerate Android Manifest后会自动勾上的一个选项


2.Custom Main Gradle Template则是要加上两句

android.useAndroidX=true
android.enableJetifier=true

android.useAndroidX=true 表示你的项目已经迁移为使用AndroidX库。开启这个标示后,Android Studio将不能识别旧的android.support包,只能识别androidx包。

android.enableJetifier=true 表示你的项目中如果有第三方库还在使用旧的android.support包,那么开启这个标示后,Android Studio会自动把第三方库的android.support包转化成androidx包。


3.修改baseProjectTemplate.gradle文件,博主使用的unity是2022.1.10f1对应的android.tools.build:gradle默认为4.0.1,但是博主使用的Gradle是6.7.1的,查找对应表知道对应6.7.1android.tools.build:gradle至少要4.2.0+,所以博主这里将默认的android.tools.build:gradle换成了以下代码:

classpath 'com.android.tools.build:gradle:4.2.0'
插件版本所需的 Gradle 版本
1.0.0 - 1.1.32.2.1 - 2.3
4.2.0+6.7.1+

4.对于mainTemplate.gradle文件首先前提需要点击Assets/Eternal Dependency Manager/Android Resolver/Resolver
在这里插入图片描述

成功后会提示一个Succeeded的提示框

在这里插入图片描述

这时候回看mainTemplate.gradle文件会发现maven使用的是"https://maven.google.com",这会导致构建apk包的时候下载依赖特别缓慢,甚至出一个空场景包都需要四十分钟,挂梯子也不好使

([rootProject] + (rootProject.subprojects as List)).each { project ->
    project.repositories {
        def unityProjectPath = $/file:///**DIR_UNITYPROJECT**/$.replace("\\", "/")
        maven {
            url "https://maven.google.com"
        }
        mavenLocal()
        jcenter()
        mavenCentral()
    }
}

在这里插入图片描述

所以要在mainTemplate.gradle文件下添加使用国内的镜像源,博主这里使用的是阿里的:

// Android Resolver Repos Start
([rootProject] + (rootProject.subprojects as List)).each { project ->
    project.repositories {
        def unityProjectPath = $/file:///**DIR_UNITYPROJECT**/$.replace("\\", "/")

        maven { url 'https://maven.aliyun.com/repository/public' }

        mavenLocal()
        jcenter()
        mavenCentral()
    }
}
buildscript {
    repositories {
        // 其他仓库配置...
        maven { url 'https://maven.aliyun.com/repository/public' }
    }
    // 其他配置...
}

allprojects {
    repositories {
        // 其他仓库配置...
        maven { url 'https://maven.aliyun.com/repository/public' }
    }
}
// Android Resolver Repos End
apply plugin: 'com.android.library'
**APPLY_PLUGINS**


.......

5.最后就是proguard-user.txt文件,添加两句:

-keep public class com.facebook.**{public *; } 
-keep public class com.facebook.internal.**{ public *; }

否则打包出来后应用程序可能会闪退崩溃,使用adb logcat发现是ClassNotFoundException
java.lang.ClassNotFoundException: Didn't find class "com.facebook.FacebookContentProvider"
所引起的程序崩溃闪退。


三、构建APK

在这里插入图片描述


总结

至此,Facebook就算对接完成了!!!,下面贴一个Facebook的登录功能代码:

public class FacebookServices
{
    public delegate void OnFBLoginSucced(Facebook.Unity.AccessToken token);
    public delegate void OnFBLoginFaild(bool isCancel, string errorInfo);
    /// <summary>
    /// 初始化
    /// </summary>
    public static void InitServices()
    {
       // 初始化Facebook
        FB.Init(() =>
        {
            // 打印日志
            string logMessage = string.Format("OnInitCompleteCalled IsLoggedIn='{0}' IsInitialized='{1}'", FB.IsLoggedIn, FB.IsInitialized);
        },(isUnityShutDown) =>
        {
            // 打印日志
            // UnityShutDownCalled IsLoggedIn=' + (FB.IsLoggedIn ? "True" : "False") + " IsInitialized=' + (FB.IsInitialized ? "True" : "False") + " UnityShutDownCalled"
        });
    }
    /// <summary>
    /// 登录
    /// </summary>
    /// <param name="onFBLoginSucced">回调,不需要可不填</param>
    /// <param name="onFBLoginFaild">回调,不需要可不填</param>
    public static void Login(OnFBLoginSucced onFBLoginSucced = null, OnFBLoginFaild onFBLoginFaild = null)
    {
       // 创建一个权限列表
        var perms = new List<string>() { "public_profile" };
        // 使用Facebook登录,并且传入回调函数
        FB.LogInWithReadPermissions(perms, (result) =>
        {
            // 如果登录失败,则调用onFBLoginFaild函数,并传入失败原因和错误信息
            if (result == null)
                return;
            if (FB.IsLoggedIn)
                onFBLoginSucced?.Invoke(Facebook.Unity.AccessToken.CurrentAccessToken);
            else
                onFBLoginFaild?.Invoke(result.Cancelled, result.Error);
        });
    }
  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值