赞
踩
最近博主也是开始找大四实习了,由于工作需要,需要接海外的sdk,例如admob
、twitter
、facebook
等等,由于以前在校都是所作的项目都是跟taptap sdk
打交道,以至于接入这些sdk这块造成了挺久的困惑,所以在这里先记录一下Unity如何接facebook
的sdk。
在现如今的数字时代,社交媒体的影响力越来越大。作为全球最受欢迎的社交媒体平台之一,Facebook
拥有数十亿的用户,为开发者提供了与用户互动和推广游戏的机会。接入Facebook SDK
,开发者可以实现诸如社交分享、邀请好友、登录验证等功能,进一步增强游戏的互动性和推广效果。
这里博主下载的是最新的16.0.2版本的SDK,下载完成后解压得到一个unitypackage
新建一个Unity项目把unitypackage
拖进去进行导入
…下播!抢救一下
导入完成插件后导航栏会多出一个Facebook
的选项,
点击Facebook → Edit Settings后会在Inspector下会显示一个asset文件的内容:
这时候的知识点就要涉及到
其中:应用名称
对应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里面把包名改一下
切换至Android
平台后会弹出一个自动解析的一个框,需要点击Enable
等待下载一些依赖完成。可能挂梯子会比较好,不过如果失败了也没事,直接关掉。
确保 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.1
的android.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.3 | 2.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"
所引起的程序崩溃闪退。
至此,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); }); }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。