Unity3D中使用ShareSDK的WeChat与QQ分享

写在前面

想一款免费的Unity中能使用的分享与登录为主要功能的插件, ShareSDK 并不是唯一选择,毕竟微信和QQ官方都是有提供IOS与Android端的接入相关资料的。

这篇文章中,我会介绍微信登录、分享 和QQ分享的接入方式

我为什么用

我想着如果单独去接入一套Android和IOS的Unity端代码,工时不少,以我的聪明才智我保证两周内无缝接入到Unity中,但是,我的时间并不是太丰富;

再加上ShareSDK还提供了:新浪、易信、支付宝、百度、FaceBook等等差不多十几个平台的支持,开发者的选择就更多了,话是这么说,但是这些平台对我的项目来说一点luan用都没有,甚至还影响了代码引用的纯洁性,搞不好最终包多出来的那十几M就是这里面的。

关于使用

1、后台的申请

QQ的申请:https://connect.qq.com —- 文档中心

微信的申请:https://open.weixin.qq.com — 文档中心

两个网站对开发者均有资质相关的认证,如果开发者在这一步遇到困难,可以联系你们的商务去申请,开发阶段我们可以使用ShareSDK Demo里面自带的进行开发调试工作。平台的技术支持还是很到位的,一般情况你后台注册留了QQ,那边平台就会主动来加上,拉QQ讨论组,技术支持,然后不懂的在组里问,如果有需要直接上嘴。

2、Unity的接入

ShareSDK官方Git地址请点击这一整段,在官方网址也可以找到下载,在官方的开发文档可以查询到接入的大致流程。

IOS:ShareSDKIOSAutoPackage文件夹的ShareSDKPostProcessBuild.cs这个文件中,配置Xcode工程的UrlScheme:

  1. QQ+appID(注意:appID原本是10进制的,需要先转换16进制,网址:点击转换16进制),不足8位的前面补0。
  2. 微信appid
  3. tencent+appID

另外在你场景中的ShareSDK.cs里面设置微信和QQ的App的id和Secret,值得注意的是里面有个WeChatSeries,也得填上微信的,我X它大爷,我在上面吃过细节亏。加上朋友圈和收藏,这尼玛有4处地方要填一样的参数,F**k。QQ也同理

另外工程下的ShareSDKUnity3DBridge.m文件:把不要的都注了。

ManagePlatforms.cs这个文件选择启用的平台,它会影响到Xcode里面库引用。

Android:按照文档上的做就行。

打完包后,不需要在Xcode或者Android工程上做任务操作了,说明你就接好了。

3、回调

登录和分享什么的可以直接调,也会直接有回调函数。帖出一点ShareSDK.cs代码

登录回调的内容:ssdk 是我场景中引用的ShareSDK

打印的内容

User—- authorize success !result:

{“access_token”:”8_tzoJDezL1nlbsUP2y1TcT0okD5pMlM7NlGq83dbXQdkmsltgFmeYQpZNn_fyUQLES8qF3Iu7f7ArCiRXdz8IR6AvXYcZfNsEs4T-_X4Rixs”, “openid”:”ooc5r1j_h3pf9F_iQNZOGNUt7EL0″, “scope”:”snsapi_userinfo”, “refresh_token”:”8_bZTP7HgJ86UbrB6g7tpPn7EAWa4ku4Z9uGRkkVNj4_aNuYE66TqQ7y-RY4G7Plez7g5HK-i_yg4kRfc6JrKp9a7R6KptPM0opM_YPwEk5Yc”, “expires_in”:7200, “unionid”:”omobmw7E3Xn7LoxDhL3Gzybw17bs”}

我在获取用户唯一标识时遇到了困惑,这里openid和unionid在网上已经存有很多解释:知乎博客博客2其它。等等,我在这里使用了2个微信appid来进行实验,上面是第1个,下面是第2个,见Log:

User—- authorize success !result:

{“access_token”:”8_a7wtJUUjIPRyBGTHu2R1l6B8Jvo1Vn0D_xIWcHPhIuqfuKnzjyqshBswAJx0eTmJBcobZvzJqgu2eJk-Pnyw6YQB7ZddZPYpjV8p30rl4Rs”, “openid”:”o3LILj8tT4pK9bQrwoGosYOnSZ_k”, “scope”:”snsapi_userinfo”, “refresh_token”:”8_-BfOmpnB1YBufMsJUcWTPb8sCvC7euwWQXUBVIQwb2s3WBILRdSFzkskMZAgqYLrIgoS-4bBG4b40d6-cihmNqhfZWb26trQTYbXmF4G4Ro”, “expires_in”:7200, “unionid”:”oHRAHuIIc8ft8T6WoQhOrTlU1ZkQ”}

发现openid和unionid都变了,完全没有参考价值,如果看了官文文档对两个参数的解释的话,会发现文档的矛盾之处,以下是我去摘录的(手动换行):

我使用了下面的这个网址去手动获取(同一个微信号),仍然得出了不同的unionid,我X它大爷。退而求其次的情况下,只要保证用户在当前这个应用授权的唯一标识也行,你MB我要求很简单了,我删了包在看看Log?或者明天再看看Log?哪个一样就用哪个呗。

次日更新—-:我决定使用unionid,别问我为什么。

N天后更新:使用unionId在两个不同的App上互通了。之前打的包不知道出了什么问题。

能发现回调并没有用户相关的信息,因为ShareSDK提供了单独的方法去获取用户的一系列信息,比如 sex 为性别,1是男性 headimgurl 是头像的地址 province 和 city 是城市 country 是国家等等。这里不一一列举。

QQ的我只使用到分享功能,大部分游戏或者应用,主流的都只接上了微信,为了不必要的工作量,我觉得只用微信的比较好。

4、其它问题

我在一次下载了Demo后,打IOS包时编译错误,说是易信的SDK没有引用到,提示中包含了BitEnable,结果把BitEnable设置成No就OK了。