技术标签: unity Unity android 其他 SDK
https://developers.facebook.com/apps/
https://developers.facebook.com/docs/unity/
下载的Unity package包包含sdk和demo工程。根据demo工程可以很容易进行代码移植。
各种示例和API详细解说:Facebook SDK for Unity Reference
Facebook–>Edit Settings打开配置界面
AppName可以随便写
Facebook App Id为后台的应用编号
ClientToken为 后台中:设置–>高级页面 客户端口令
使用默认即可
这部分的设置内容是自动生成的,无法手动输入,为了能够自动生成信息,需要配置好本地的环境,有以下需要注意的点:
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名字。这里笔者用的默认的,暂时没有发现什么问题。
<meta-data android:name="com.facebook.sdk.ClientToken" android:value="ClientToken值"/>
笔者把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
这个报错原因是引入打包之前没有引入FB相关的依赖库,相关依赖在FacebookSDK/Plugins/Editor/Dependencies.xml
中有配置,可以通过AndroidResolver工具来自动引入。
建议处理方式:
step1:“/Assets/Play Service Resolver/Android Resolver/Delete Resolved Libraries”
step2:“/Assets/Play Service Resolver/Android Resolver/Resolve”
即,先把库清掉,再重新引入。
FB.Init()
初始化成功后,FB.IsInitialized为true
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后台已不需要,且已经没有发布按钮!!!
更多登录相关参考:Facebook Login For Gaming
集成文档
API文档
注意:埋点不要求用户登录FB,但是需要完成SDK初始化,函数:
public static void LogAppEvent(
string logEventName,
float valueToSum,
Dictionary<string, object> parameters = null
)
分享不要求用户登录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后台,否则会报错
笔者使用meizu的一款手机测试FB SDK,登录没问题。分享遇到各种问题,包括以下情形:
笔者后用Google手机测试,一切正常。这个应该是国产手机魔改导致FB SDK无法兼容。可以参考这个博文Android App接入Facebook分享SDK时,无法启动Facebook客户端的问题分析
文章浏览阅读1w次,点赞2次,收藏10次。一个灰常简单的脚本,懂前端的人都能写出来代码地址及使用方法:https://github.com/xiongyizhu/auto-danmu_直播自动发弹幕脚本
文章浏览阅读1.4k次。VM通过页表转换成PM,MMU、Cache、TLB在转换过程中发挥作用:(1)PTE和PA都在Cache或者Memory中:(2)将Cache和Memory拆开描述,PTE和PA是否在Cache中命中:(3)PTE在Cache或Memory中,但是PA不在Cache或Memory中,只能访问Disk:(_mmu与tlb和cache的交互
文章浏览阅读4.7k次。刚打算新建hadoop用户,发现居然有了,可是我也不知道密码呀...改也改不了。想着那总能让我删了吧,嗯哼,不行。如图:行吧,总有法子治你,比如:首先,进入home,执行命令vipw找到之前创建的用户,用dd删除该行(:wq保存退出)执行命令vipw -s 找到那个用户所属组,dd删掉即可(:wq保存退出)这时候修改密码检测一下就可以知道有没有删除了好..._cannot remove entry 'chuqianyun' from /etc/passwd
文章浏览阅读791次。这两天利用bandgridview做表头,希望做成如下形状在制作过程中发现如果想实现动态表头,代码的书写顺序需要稍加注意实例化gridband绑定gridband至bandgridviewgridband属性设置实例化bandgridcolumn绑定bandgridcolumn至gridbandbandgridcolumn属性设置 绑定数..._gridband 设置visibleindex
文章浏览阅读174次。proxmark3 Easy问题及PM3重新连接的方法PM3软件界面如下:连接状态: 已连接(这是在自动识别串口号的方式下)如果有有问题就是下图:(这也是在自动识别串口号的方式下)在手动设置串口号的情况下:好了,下面说说遇到的情况:时间长了没用那个PM3,今天拿出来说使用下,结果用不了,环境:在WIN10的环境下,直接用桌面上的PM3程序,结果直接打不开,试了很多多方法都不行, 记得这是当时从原来另一台能用的电脑(win7)上直接复制过来的,重新装好..._请把程序拷贝到“官方软件固件\pm3-bin-2.0.0\win32 (client+gui)”根目录下再打
文章浏览阅读2.3k次。原标题:网络安全就业前景怎么样?现在无论是企业还是个人,都会注意网络安全。21世纪是信息化时代,我们的生活越来越离不开网络,但是与此同时,网页篡改、计算机病毒、系统非法入侵、数据泄密、网站欺骗、服务瘫痪、漏洞非法利用等信息安全事件时有发生,网络安全越来越被重视。但是由于我国网络安全起步晚,所以现在网络安全工程师十分紧缺。根据职友集的数据显示,当前市场上需求量较大的几类网络安全岗位,如安全运维、渗透..._网络安全博士就业
文章浏览阅读480次。layui简介layui是一种采用自身模块规范编写的前端UI框架,遵循原生HTML/CSS/JS的书写组织形式,门槛极低,拿来即用. 无需涉足各种前端工具的复杂配置,只需面对浏览器本身.使用layui获取layui将其完整地部署到项目目录引用css文件和js文件初始化模块 //一般直接写在一个js文件中 layui.use(['layer'..._layui lay-affix="eye
文章浏览阅读536次。在使用dnf进行软件安装的时候,有时候会遇到软件安装的特别慢的情况,这时候可以使用国内一些镜像很好的解决这一问题。配置阿里云镜像备份mv /etc/yum.repos.d/fedora.repo /etc/yum.repos.d/fedora.repo.backupmv /etc/yum.repos.d/fedora-updates.repo /etc/yum.repos.d/fedora-updates.repo.backup下载新的文件下载新的fedora.repo和fedora-_fedora 阿里云
文章浏览阅读223次。Nginx(一)Nginx 的主要应用场景Nginx 的主要优点Nginx 的主要优点Nginx 的版本介绍 Nginx 目录并编译下载NginxautoCHANGES文件conf文件configure脚本contrib文件html目录man目录src 目录编译NginxNginx 配置语法Nginx 命令:重载,热部署,日志切割重载配置文件热部署日志切割Nginx 的主要应用场景静态资源服务反向代理服务API服务Nginx 的主要优点高并发,高性能可扩展性 - 模块化设计高可靠性 -_nginx重载语句
文章浏览阅读364次。广度优先遍历原理及代码实现、求最短路及对比两种遍历算法_c#:实现广度优先搜索遍历图算法
文章浏览阅读575次。程序猿是啥?我的理解是脑子灵活思维li
文章浏览阅读8.2k次,点赞13次,收藏41次。Wsl2 Ubuntu18.04图形化界面,亲测成功Windows端Linux端最后抖抖索索搞了两天,差点Windows系统都重装,终于搞成功了。参考文献:一定要看非常感谢这个哥们,成功搞出来了。Windows端powershell内管理员模式运行wsl --list --verbose确保Version是22. ipconfig记wsl的IPv4地址:192.168.233.193.每个人不一样3.下载VcXSrv X server for Windows.提供给你们一个下载链_wsl ubuntu图形界面