乡城瓜锅 發表於 2019-6-17 17:25:00

如何通过ShareSDK的 Unity3D快速接入Android/iOS分享与授权

<div>
<p>Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎;在游戏中使用分享功能能够有效的帮助游戏运营推广,通过分享回流来提高APP安装量。ShareSDK的Unity3D插件可以帮助开发者快速实现分享与授权功能。</p>
<p>&nbsp;</p>
<p><strong>一、应用注册</strong></p>
<p>获取appkey,操作步骤可参考:《Mob开发者后台使用指南》</p>
<p><strong>二、快速集成</strong></p>
<p>下载ShareSDK的Unity3D工具类,双击或导入ShareSDK.unitypackage导入相关文件。 注意该操作可能会覆盖您原来已经存在的文件。</p>
<p>挂接ShareSDK脚本并配置平台信息</p>
<p>选择好需要挂接的GameObject(例如Main Camera),在右侧栏中点击Add Component,选择Share SDK 进行挂接。</p>
<p><img class="lazyload inited loaded" alt="" data-src="https://user-gold-cdn.xitu.io/2019/6/17/16b64a4fec59d22b?imageView2/0/w/1280/h/960/format/webp/ignore-error/1" data-width="1280" data-height="681"></p>
<p>挂接后会发现提供了当前支持的平台和及其配置信息。可以直接在此处修改你所需要的平台的配置信息。需要注意的是当前的编译环境是Android还是iOS,其字段名称是不同的哦!</p>
<p><strong>Android</strong><strong>编译配置</strong></p>
<p><img class="lazyload inited loaded" alt="" data-src="https://user-gold-cdn.xitu.io/2019/6/17/16b64a54066b98f1?imageView2/0/w/1280/h/960/format/webp/ignore-error/1" data-width="1280" data-height="427"></p>
<p>关键文件:mainTemplate.gradle和proguard-user.txt</p>
<ol>
<li>Unity2017及以上版本,在Build Settings &gt; Player Settings下面,有两个开关,新建项目的话打开这两个开关就可以在Plugins&gt;Android生成对应的两个文件;由于这两个文件ShareSDK都有直接提供,只需导入.unitypackage就好,Unity检测到已经存在这两个文件,自动会更新为勾选状态;</li>
<li>Build的时候有一个Build System选项,此选项默认选择的Internal,切记要改成选择里面的gradle选项(<strong>重要</strong>)</li>
<li>图中所示的mainTemplate.gradle文件,即为集成的核心文件,使用编辑器打开此文件,要点内容如下:</li>
</ol>
<p>此处为区分Unity5.6和Unity2017 gradle插件版本的地方,开发时用到哪个版本就使用哪个,若使用到其他Unity版本,请随意选择一个,然后build,编译的时候会报错的,Console控制台信息报错时会提示插件版本是多少,根据提示修改成需要的版本就好(只修改后面的数字,比如:2.3.0或者2.1.0)</p>
<p><strong>buildscript</strong> {</p>
<p><strong>repositories</strong> {</p>
<p>jcenter()</p>
<p>}</p>
<p><strong>dependencies</strong> {</p>
<p><strong>classpath</strong> 'com.android.tools.build:gradle:2.3.0'<em>//Unity2017</em></p>
<p><em>//classpath 'com.android.tools.build:gradle:2.1.0'//Unity5.6</em></p>
<p><em>// </em><em>注册</em><em>MobSDK</em></p>
<p><strong>classpath</strong> 'com.mob.sdk:MobSDK:+'</p>
<p>}</p>
<p>}</p>
<p>此处为配置签名文件和签名文件的别名和密码(正式发布apk需要的签名文件),可以写绝对路径,也可以写相对路径,相对路径使用”..\”跳出一层目录,跳出多层则连续拼接</p>
<p><strong>signingConfigs</strong> {</p>
<p><strong>release</strong> {</p>
<p>keyAlias 'demokey.keystore'</p>
<p>keyPassword '123456'</p>
<p>storeFile file('F:\\Unitydemo(CJY)\\MobPushForUnity\\Assets\\Plugins\\Android\\demokey.keystore')</p>
<p>storePassword '123456'</p>
<p>}</p>
<p>}</p>
<p>此处为混淆文件的配置,也就是MobPush提供的proguard-user.txt文件,此文件内容不需要更改,按照提供的即可, 如自己代码需要额外增加混淆逻辑,可自行增加混淆规则,如果是Unity2017以下版本,请把注释的代码调换一下即可; (minifyEnabled属性为是否开启代码混淆:true为开启混淆,false为关闭)</p>
<p>buildTypes {</p>
<p><strong>release</strong> {</p>
<p>minifyEnabled <strong>true</strong>// 是否混淆</p>
<p>//shrinkResources <strong>false</strong>// 是否去除无效的资源文件</p>
<p>proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-user.txt' //Unity2017及以上</p>
<p>//proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt' //Unity2017以下</p>
<p>signingConfig signingConfigs.<strong>release</strong></p>
<p>}</p>
<p>&nbsp;</p>
<p><strong>debug</strong> {</p>
<p>minifyEnabled <strong>false</strong></p>
<p>signingConfig signingConfigs.<strong>release</strong></p>
<p>}</p>
<p>}</p>
<ol>
<li>配置第三方key信息</li>
</ol>
<p>ShareSDK提供了一个MobSDK.gradle文件,可以在里面直接将mob的key改成自己的,并且删除不需要的平台,或者修改成自己的第三方key的信息即可;</p>
<p><img class="lazyload inited loaded" alt="" data-src="https://user-gold-cdn.xitu.io/2019/6/17/16b64a8f3d6bfe7d?imageView2/0/w/1280/h/960/format/webp/ignore-error/1" data-width="690" data-height="400"></p>
<p>apply plugin: 'com.mob.sdk'</p>
<p>&nbsp;</p>
<p><strong>MobSDK</strong> {</p>
<p>appKey "moba6b6c6d6"</p>
<p>appSecret "b89d2427a3bc7ad1aea1e1e8c1d36bf3"</p>
<p>&nbsp;</p>
<p>ShareSDK {</p>
<p>version "3.3.0"</p>
<p>&nbsp;</p>
<p>//平台配置信息</p>
<p>devInfo {</p>
<p>SinaWeibo {</p>
<p>id 1</p>
<p>sortId 1</p>
<p>appKey "568898243"</p>
<p>appSecret "38a4f8204cc784f81f9f0daaf31e02e3"</p>
<p>callbackUri "http://www.sharesdk.cn"</p>
<p>shareByAppClient <strong>true</strong></p>
<p>enable <strong>true</strong></p>
<p>}</p>
<p>&nbsp;</p>
<p><strong>Wechat</strong> {</p>
<p>id 4</p>
<p>sortId 4</p>
<p>appId "wx4868b35061f87885"</p>
<p>appSecret "64020361b8ec4c99936c0e3999a9f249"</p>
<p>userName "gh_afb25ac019c9"</p>
<p>path "pages/index/index.html?id=1"</p>
<p>withShareTicket <strong>true</strong></p>
<p>miniprogramType 0</p>
<p>bypassApproval <strong>false</strong></p>
<p>enable <strong>true</strong></p>
<p>}</p>
<p>&nbsp;</p>
<p><strong>WechatMoments</strong> {</p>
<p>id 5</p>
<p>sortId 5</p>
<p>appId "wx4868b35061f87885"</p>
<p>appSecret "64020361b8ec4c99936c0e3999a9f249"</p>
<p>bypassApproval <strong>false</strong></p>
<p>enable <strong>true</strong></p>
<p>}</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>QQ</strong> {</p>
<p>id 7</p>
<p>sortId 7</p>
<p>appId "100371282"</p>
<p>appKey "aed9b0303e3ed1e27bae87c33761161d"</p>
<p>shareByAppClient <strong>true</strong></p>
<p>bypassApproval <strong>false</strong></p>
<p>enable <strong>true</strong></p>
<p>}</p>
<p>&nbsp;</p>
<p><strong>Facebook</strong> {</p>
<p>id 8</p>
<p>sortId 8</p>
<p>appKey "1412473428822331"</p>
<p>appSecret "a42f4f3f867dc947b9ed6020c2e93558"</p>
<p>callbackUri "https://mob.com"</p>
<p>shareByAppClient <strong>true</strong></p>
<p>enable <strong>true</strong></p>
<p>}</p>
<p>&nbsp;</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p><strong>iOS</strong><strong>编译配置</strong></p>
<p>初始化与社交平台信息配置</p>
<p>修改ShareSDKDevInfo.cs文件,配置所需的平台信息</p>
<p>1.配置您自己的ShareSDK的AppKey (通过第一步获取)</p>
<p><strong>public</strong> <strong>class</strong> AppKey</p>
<p>{</p>
<p><em>//</em><em>配置</em><em>ShareSDK AppKey</em></p>
<p><strong>public</strong> string appKey = "a5d9150e8348";</p>
<p>}</p>
<p>2.选择所需要的平台,不想要的可以直接注释或删掉</p>
<p><strong>public</strong> <strong>class</strong> DevInfoSet</p>
<p>&nbsp;</p>
<p>{</p>
<p><strong>public</strong> SinaWeiboDevInfo sinaweibo;</p>
<p><strong>public</strong> TencentWeiboDevInfo tencentweibo;</p>
<p><strong>public</strong> QQ qq;</p>
<p><strong>public</strong> QZone qzone;</p>
<p>}</p>
<p>3.配置对应平台的信息(建议直接修改字符串值即可)</p>
<p><strong>public</strong> <strong>class</strong> <strong>SinaWeiboDevInfo</strong> : DevInfo</p>
<p>{</p>
<p><strong>#if UNITY_ANDROID</strong></p>
<p><strong>public</strong> <strong>const</strong> <strong>int</strong> type = (<strong>int</strong>) PlatformType.SinaWeibo;</p>
<p><strong>public</strong> string SortId = "1";</p>
<p><strong>public</strong> string AppKey = "568898243";</p>
<p><strong>public</strong> string AppSecret = "38a4f8204cc784f81f9f0daaf31e02e3";</p>
<p><strong>public</strong> string RedirectUrl = "http://www.sharesdk.cn";</p>
<p><strong>public</strong> string ShareByAppClient = "false";</p>
<p><strong>#elif UNITY_IPHONE</strong></p>
<p><strong>public</strong> <strong>const</strong> <strong>int</strong> type = (<strong>int</strong>) PlatformType.SinaWeibo;</p>
<p><strong>public</strong> string app_key = "568898243";</p>
<p><strong>public</strong> string app_secret ="38a4f8204cc784f81f9f0daaf31e02e3";</p>
<p><strong>public</strong> string redirect_uri = "http://www.sharesdk.cn";</p>
<p><strong>public</strong> string auth_type = "both"; <em>//can pass "both","sso",or "web"</em></p>
<p><strong>#endif</strong></p>
<p>}</p>
<p><strong>三、接口调用</strong></p>
<p>首先引入命名空间:</p>
<p><strong>using</strong> cn.sharesdk.unity3d;</p>
<p><strong>private</strong> ShareSDK ssdk;</p>
<p><strong>分享</strong></p>
<p>1.定制分享信息</p>
<p>ShareContent content = new ShareContent();</p>
<p>content.SetText("this is a test string.");</p>
<p>content.SetImageUrl("https://f1.webshare.mob.com/code/demo/img/1.jpg");</p>
<p>content.SetTitle("test title");</p>
<p>content.SetTitleUrl("http://www.mob.com");</p>
<p>content.SetSite("Mob-ShareSDK");</p>
<p>content.SetSiteUrl("http://www.mob.com");</p>
<p>content.SetUrl("http://www.mob.com");</p>
<p>content.SetComment("test description");</p>
<p>content.SetMusicUrl("http://mp3.mwap8.com/destdir/Music/2009/20090601/ZuiXuanMinZuFeng20090601119.mp3");</p>
<p>content.SetShareType(ContentType.Webpage);</p>
<p>分享参数可参考:平台参数说明文档</p>
<p>2.设置分享回调</p>
<p>ssdk.shareHandler = ShareResultHandler;</p>
<p><em>//</em><em>以下为回调的定义</em><em>:</em></p>
<p><strong>void</strong> <strong>ShareResultHandler</strong> (<strong>int</strong> reqID, ResponseState state, PlatformType type, Hashtable result)</p>
<p>{</p>
<p><strong>if</strong> (state == ResponseState.Success)</p>
<p>{</p>
<p>print ("share result :");</p>
<p>print (MiniJSON.jsonEncode(result));</p>
<p>}</p>
<p><strong>else</strong> <strong>if</strong> (state == ResponseState.Fail)</p>
<p>{</p>
<p>print ("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);</p>
<p>}</p>
<p><strong>else</strong> <strong>if</strong> (state == ResponseState.Cancel)</p>
<p>{</p>
<p>print ("cancel !");</p>
<p>}</p>
<p>}</p>
<p>3.进行分享</p>
<p><em>//</em><em>通过分享菜单分享</em></p>
<p>ssdk.ShowPlatformList (null, content, 100, 100);</p>
<p>&nbsp;</p>
<p><em>//</em><em>直接通过编辑界面分享</em></p>
<p>ssdk.ShowShareContentEditor (PlatformType.SinaWeibo, content);</p>
<p>&nbsp;</p>
<p><em>//</em><em>直接分享</em></p>
<p>ssdk.ShareContent (PlatformType.SinaWeibo, content);</p>
<p><strong>授权(每次都会跳转到第三方平台进行授权)</strong></p>
<ol>
<li>设置授权回调</li>
</ol>
<p>ssdk.authHandler = AuthResultHandler;</p>
<p><em>//</em><em>以下为回调的定义</em><em>:</em></p>
<p><strong>void</strong> <strong>AuthResultHandler</strong>(<strong>int</strong> reqID, ResponseState state, PlatformType type, Hashtable result)</p>
<p>{</p>
<p><strong>if</strong> (state == ResponseState.Success)</p>
<p>{</p>
<p>print ("authorize success !");</p>
<p>}</p>
<p><strong>else</strong> <strong>if</strong> (state == ResponseState.Fail)</p>
<p>{</p>
<p>print ("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);</p>
<p>}</p>
<p><strong>else</strong> <strong>if</strong> (state == ResponseState.Cancel)</p>
<p>{</p>
<p>print ("cancel !");</p>
<p>}</p>
<p>}</p>
<ol>
<li>进行授权</li>
</ol>
<p><strong>ssdk</strong>.Authorize(<strong>PlatformType</strong>.SinaWeibo);</p>
<p><strong>获取用户信息 (只会在第一次跳转到第三方平台进行授权)</strong></p>
<ol>
<li>指定获取用户信息的回调</li>
</ol>
<p>sdk.showUserHandler = GetUserInfoResultHandler;</p>
<p><em>//</em><em>以下为回调的定义</em><em>:</em></p>
<p><strong>void</strong> <strong>GetUserInfoResultHandler</strong> (<strong>int</strong> reqID, ResponseState state, PlatformType type, Hashtable result)</p>
<p>{</p>
<p><strong>if</strong> (state == ResponseState.Success)</p>
<p>{</p>
<p>print ("get user info result :");</p>
<p>print (MiniJSON.jsonEncode(result));</p>
<p>}</p>
<p><strong>else</strong> <strong>if</strong> (state == ResponseState.Fail)</p>
<p>{</p>
<p>print ("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);</p>
<p>}</p>
<p><strong>else</strong> <strong>if</strong> (state == ResponseState.Cancel)</p>
<p>{</p>
<p>print ("cancel !");</p>
<p>}</p>
<p>}</p>
<ol>
<li>获取用户信息</li>
</ol>
<p><strong>ssdk</strong>.GetUserInfo(<strong>PlatformType</strong>.SinaWeibo);</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>至此,Unity3D插件部分的工作已经完成。如在操作过程中遇到任何问题,欢迎联系技术支持QQ 4006852216随时与我们进行讨论哦~</p>
<p>&nbsp;</p>
</div>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/Mobjun/p/11040994.html
頁: [1]
查看完整版本: 如何通过ShareSDK的 Unity3D快速接入Android/iOS分享与授权