配置流程
1,开发者后台创建应用
https://developers.facebook.com/apps/

2,下载Unity版本SDK,导入Unity
https://developers.facebook.com/docs/unity/
下载的Unity package包包含sdk和demo工程。根据demo工程可以很容易进行代码移植。

3,Facebook SDK for Unity Reference
各种示例和API详细解说:Facebook SDK for Unity Reference

4,配置
Facebook–>Edit Settings打开配置界面

基本设置
AppName可以随便写
Facebook App Id为后台的应用编号
ClientToken为 后台中:设置–>高级页面 客户端口令

FB.Init()
使用默认即可

Android Build Facebook Setting
这部分的设置内容是自动生成的,无法手动输入,为了能够自动生成信息,需要配置好本地的环境,有以下需要注意的点:
1, 这里要求jdk要使用jdk8。且要配置jdk环境变量。
下图为笔者机器jdk设置

一开始红框处是勾选的,即使用unity安装包里面的jdk。报错Keytool not found.Make sure that Java is installed,and that Java tools are in your path:

即要求配置jdk环境变量。
笔者先下载了jdk13,配置好后,Preferences浏览选择jdk目录的时候直接报错提示只支持jdk8。
于是只能换jdk8安装。

2,配置OpenSSL
未配置前,报错OpenSSL not found,Make sure that OpenSSL is installed,and that it is in your path。且无法生成Debug Android Key Hash的值

这里补充一下OpenSSL配置流程
2.1,下载
https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/openssl-for-windows/openssl-0.9.8e_X64.zip
2.2 配置
上述下载的为非安装包,解压后,我直接丢到C盘根目录了。

2.2.1 系统环境变量Path中新建 C:\openssl-0.9.8e_X64\bin

2.2.2 新建系统环境变量OPENSSL_CONF,值为openssl.cnf的路径,笔者的是C:\openssl-0.9.8e_X64\openssl.cnf

上述无论是配置jdk还是OpenSSL,配置好后,重启Unity,便解决之前的报错提示。同时Debug Android Key Hash也会自动生成。需要复制该值,配置到FB开发者后台。
(补充:Android Key Hash的生成,详见该文。上面配置好OpenSSL,自动生成的Debug Android Key Hash其实是默认的keystore文件生成的散列值,当我们用自己的keystore文件出包后,进行FB登录后日志会报错,且会把正确的散列值打印出来,这个时候只需要把这个散列值再配置到开发者后台,就可以正确登录了。当然使用链接中提供的keytool命令也是可以获得正确的散列值的)

都设置好了。点击一下Regenerate Android Manifest。
笔者最终生成的Android Manifest文件如下(涉及到包名和id的地方打了黑马):

上述都配置好后,把Class Name配置到FB后台(默认的是com.facebook.unity.FBUnityDeepLinkingActivity),有朋友说需要配置游戏真正的启动Activity名字。这里笔者用的默认的,暂时没有发现什么问题。

5,打包后闪退
笔者把demo工程打包apk后,闪退,报错如下

02-26 16:01:37.248 15866-15866/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.wildcasino.slotsgame.free.casinoslots, PID: 15866
    java.lang.RuntimeException: Unable to get provider com.facebook.FacebookContentProvider: java.lang.ClassNotFoundException: Didn't find class "com.facebook.FacebookContentProvider" on path: DexPathList[[zip file "/data/app/com.wildcasino.slotsgame.free.casinoslots-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.wildcasino.slotsgame.free.casinoslots-1, /vendor/lib, /system/lib]]
        at android.app.ActivityThread.installProvider(ActivityThread.java:4909)
        at android.app.ActivityThread.installContentProviders(ActivityThread.java:4501)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4436)
        at android.app.ActivityThread.access$1500(ActivityThread.java:147)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1271)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5135)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:798)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:614)
        at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "com.facebook.FacebookContentProvider" on path: DexPathList[[zip file "/data/app/com.wildcasino.slotsgame.free.casinoslots-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.wildcasino.slotsgame.free.casinoslots-1, /vendor/lib, /system/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
        at android.app.ActivityThread.installProvider(ActivityThread.java:4894)
        at android.app.ActivityThread.installContentProviders(ActivityThread.java:4501) 
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4436) 
        at android.app.ActivityThread.access$1500(ActivityThread.java:147) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1271) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:136) 
        at android.app.ActivityThread.main(ActivityThread.java:5135) 
        at java.lang.reflect.Method.invokeNative(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:515) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:798) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:614) 
        at dalvik.system.NativeStart.main(Native Method)

上述报错信息找到关键字Unable to get provider com.facebook.FacebookContentProvider: java.lang.ClassNotFoundException: Didn't find class "com.facebook.FacebookContentProvider" on path: DexPathLis

搜索了一下,找到两处提供的解决方案:
方案1,Android app crash on launch due to ClassNotFoundException for “com.facebook.FacebookContentProvider”
该方案主要是adding -keep class com.facebook.internal.* {;} and -keep class com.facebook. {*;} in your proguard file
没搞懂proguard file是啥。作罢

方案2,Unity Facebook plugin FacebookContentProvider not found runtime exception.
该方案主要是try to make “clear” resolve of packages:

step1:"/Assets/Play Service Resolver/Android Resolver/Delete Resolved Libraries"

step2:"/Assets/Play Service Resolver/Android Resolver/Resolve"
即,先把库清掉,再重新引入。

笔者使用第2种方案,顺利解决 这个报错。

基本功能接入
0,初始化
FB.Init()
初始化成功后,FB.IsInitialized为true

1,登录
Facebook的功能都跟权限挂钩的,提供了两种方式的登录, LogInWithReadPermissions 和 LogInWithPublishPermissions。
你可以根据自己需要的接入的功能选择登录方式,并传入权限参数。
FB权限参考这里

登录成功后,FB.IsLoggedIn为true, 同时IResult的JSON格式数据RawResult包含user_id和access_token。
用户要获得更多信息,需要二次请求(客户端或者服务端取)。
默认情况下可以获得first_name,last_name,gender,email信息
更多的信息,比如location,需要商务权限,需要运营联系facebook客服开通
注意:在测试期间,登录的测试fb账号需要加入到后台,否则登录会报错
2020022更新,新版本FB后台已不需要,且已经没有发布按钮!!!

2,打点,埋点,事件
集成文档
API文档
注意:埋点不要求用户登录FB,但是需要完成SDK初始化,函数:

public static void LogAppEvent(
    string logEventName,
    float valueToSum,
    Dictionary<string, object> parameters = null
)
3.分享
分享不要求用户登录FB,但是需要完成SDK的初始化
官方文档
函数:

public static void ShareLink(
        Uri contentURL = null,
        FacebookDelegate<IShareResult> callback = null)

)

荔枝:

FB.ShareLink(
    new Uri("https://developers.facebook.com/"),
    callback: ShareCallback
);

需要注意的是FB Unity SDK提供的FB.ShareLink函数,依旧支持很多参数,如下:

public static void ShareLink(Uri contentURL = null, string contentTitle = "", string contentDescription = "", Uri photoURL = null, FacebookDelegate<IShareResult> callback = null);

但是传入Title,content等内容后,并不能生效,只有contentURL会生效。因此建议使用命名参数的方式只传两个参数:uri和callback

如若有需求定制Title、Content、Photo的需求,需要自己创建一个web站点,保证web目录下的index文件能够被正确的访问到,设置index文件的meta信息。具体说明可以参考这里:A Guide to Sharing for Webmasters

Facebook爬虫会根据meta信息组合成正确的分享界面。Facebook提供有分享调试器的预览工具,用户输入url即可获得预览效果。

开发者配置index文件,在其header中添加如下meta信息:

<meta property="og:locale" content="en_US" />
<meta property="og:type" content="website" />
<meta property="og:title" content={YOUR TITLE} />
<meta property="og:description" content={YOUR DESCRIPTION} />
<meta property="og:url" content={YOUR URL} />
<meta property="og:image" content={YOUR IMAGE URL} />

比如og:image就是分享显示的图片,我们可以把图片放到第三方网站或者图床上,把地址填在这个meta中。这样最终FB分享中就会有这个图片的显示了。
注意1:测试期间需要把测试分享的fb账号添加到fb后台,否则会报错

3.1 国产手机的坑
笔者使用meizu的一款手机测试FB SDK,登录没问题。分享遇到各种问题,包括以下情形:

机器装了FB客户端,点击分享后有小概率拉不起FB的客户端,日志报错类似于没有FB APP这样子的信息
点击分享后拉起的是FB网页登录
拉起FB客户端后,出现分享页面。点击分享按钮后,会刷新一下,页面不关闭;点击返回按钮的话也一样,刷新一下,页面不关闭,无法回到游戏界面。有时候偶尔还会造成软件重启
笔者后用Google手机测试,一切正常。这个应该是国产手机魔改导致FB SDK无法兼容。可以参考这个博文Android App接入Facebook分享SDK时,无法启动Facebook客户端的问题分析

参考文档
Unity 接入Facebook SDK
————————————————
版权声明:本文为CSDN博主「iningwei」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/iningwei/article/details/104515962

Unity接入Facebook SDK--android篇相关推荐

  1. unity接入facebook SDK时 警告:“OpenSSL not found. Make sure that OpenSSL is installed

    接入facebook的SDK后配置FacebookSettings时警告OpenSSL not found. 解决方法: 1.下载并安装OpenSSL.http://slproweb.com/prod ...

  2. Unity接入Facebook SDK出现的问题

    问题: Android Build Facebook Settings打不开,里面是空白的,并且报以下错误. Win32Exception: ApplicationName='cmd', Comman ...

  3. [SDK]Unity接入Facebook SDK获取用户头像

    官方文档 官方文档:Facebook Login For Gaming 总结如下: 1,你的FB账户内还有一个游戏账户,在Unity中使用FB的官方SDK提供的接口进行登录时,比如 var perms ...

  4. unity 接入 Facebook 登录

    Unity 接入 Facebook 登录 Unity 接入 Facebook 登陆 使用unity sdk 到这 https://developers.facebook.com/docs/unity/ ...

  5. Unity接入微信SDK——iOS(接入微信SDK)

    Unity接入微信SDK--iOS(一 接入微信SDK) 下载微信SDK 下载地址:微信开放平台 导出Unity Xcode项目 导出Unity Xcode项目,并打开 微信SDK导入Xcode项目 ...

  6. Unity 接入Facebook

    最近由于项目需要,接入Fackbook.原先的已经有登录模块了,不过是shaderSDK的,考虑到国内这些插件会对数据动手脚,只有换掉了. 回到正题,接入的过程还是遇到不少问题,先整理下我的资料,以下 ...

  7. Unity 接入第三方SDK打包闪退

    在接入穿山甲sdk的时候,打包apk的时候出现适配部分机型,部分机型闪退,出现如下错误 图中可以看出是.so文件引起的问题. 接入第三方sdk的时候,有时候常常需要导入第三方jar包以及aar包,有些 ...

  8. Unity接入科大讯飞SDK-安卓篇

    最近需要接入sdk,现把接入科大讯飞SDK安卓端的过程整理如下: 接入SDK分成两个大的部分:安卓端 和 Unity端 安卓端主要负责导入科大讯飞的sdk,并编写相关脚本,最后生成aar包,提供给Un ...

  9. cocos creator接入微信登陆sdk android篇

    cocos creator接入微信登陆sdk 背景 项目引擎使用cocos creator,使用android studio集成开发工具,在开发之前先做好准备工作 在微信开放平台上创建好移动应用,拿到 ...

  10. Unity接入安卓sdk查看应用内存占用

    注:若不清楚如何在unity中接入android sdk可先了解下相关流程.项目地址:http://download.csdn.net/download/yhuangher/9976564 在项目后期 ...

最新文章

  1. 翻译:MariaDB RENAME TABLE语句
  2. BitMap的原理和实现
  3. php中控车牌识别push协议,车牌识别一体机的RS485小接口——实现透明传输!
  4. Asp.Net Core IdentityServer4 管理面板集成
  5. HTML ajax控件 目录树
  6. net start mysql 失败_net start mysql出错,显示错误1067
  7. 牛客网暑期ACM多校训练营(第三场): C. Shuffle Cards(splay)
  8. java中StringBuilder为单线程做的,StringBuffer相反
  9. java强制删文件夹_java删除文件或文件夹的方法
  10. 读书行动笔记2013第2本:《整理的艺术》
  11. 共享打印机无法访问计算机,win7系统文件夹和打印机共享后无法访问的解决方法...
  12. 京东广告轮播自动HtML小案例
  13. DNS 动态域名解析
  14. 专题·置换【including 置换,置换快速幂,洛谷·[HNOI2001]洗牌机
  15. 微信Android客户端的卡顿监控方案
  16. 幂级数展开求积分_[干货]---如何利用留数定理计算积分
  17. 计算机视觉方向博后,直播回顾 | 深圳大学龚元浩:比几何流快一万倍的曲率滤波算法(附博后招聘)...
  18. Animation旋转360度
  19. Verilog HDL 学习篇——六位数码管驱动
  20. 红领巾小创客机器人活动计划_争当红领巾小创客--小创客 大梦想

热门文章

  1. 最后7天!阿里云2020云内存数据库峰会现场参会报名中
  2. 1篇文章认识ZCCT在线认证,加入千人在线学习大军领取云计算资料包!
  3. 中国电子技术标准化研究院与Linux基金会战略合作签约仪式圆满落幕
  4. 倒计时按钮_倒计时牌都不会做,妹子何必嫁这货
  5. 【图像边缘检测】基于matlab CNN灰度图像边缘提取【含Matlab源码 490期】
  6. 【人脸识别】基于matlab ksvd字典学习人脸表情识别【含Matlab源码 460期】
  7. http 响应消息解码_响应生成所需的解码策略
  8. Cannot read property 'style' of null 问题
  9. python:拼接多个csv文件
  10. 《Python语言程序设计》二级教程课后编程题及答案