最近一星期在瞭解Android接入SDK的過程,之前用Android Studio生成一個簡單的jar來實現Unity和Android的相互操作,今天嘗試接了下ShareSDK的接入,比預想的容易很多,詳細記錄一下,也希望對大家有所幫助。
環境:
Unity2018.2.41
夜深模擬器
AndroidSDK 29
JDK
android-ndk-r13b
一 新建Unity項目
新建項目,我把它命名爲ShareSDKTest,然後在MainCamera下新建Canvas,幾個Button,一個Text,如下圖結構:
場景中看起來長這樣,
對了,設置一下Canvas->Scale Factor 值爲2,Button座標y軸相隔-50,場景隨便弄,能看到就行
點擊菜單File>Build Settings 切換到Android平臺,修改build system爲Internal(默認是gradle,但是用gradle工具打包時,會報一個錯,修改成internal就可以正常打包,原因未細究)接着修改PlayerSettings,修改這幾個地方,如下所示
package name這個名字很重要,很多地方都要修改保持一致(後面會說改哪裏),這個是app在程序裏面的名字,product name是安裝後icon顯示給用戶看的名字
Unity初步弄完,弄下一步
二 ShareSDK獲得App賬號
打開ShareSDK的官網 http://www.mob.com/developer/register?tag=1,正常的操作進行註冊,登陸,然後申請開發者資質,大概1個小時審覈通過,通過後點擊右上角“產品中心”,點擊立即進入,如下圖
然後創建一個應用,名字的話建議和前面Unity的名字一樣,叫做“ShareSDKTest”,創建後就可以獲得這個應用在ShareSDK的appkey和appsecret
保存這兩個值,隨便放在一個txt文本里,方便待會copy
三 下載,放置ShareSDK
打開這個網址:https://github.com/MobClub/New-Unity-For-ShareSDK,clone下載下來,然後解壓,裏面有個叫ShareSDK.unitypackage的包,回到unity,點擊 Assets=>inprot package 導入這個包。(當然,在git的下載頁下有官方的說明,建議先看一遍)點擊Main Camera,添加Share SDK作爲它的Component,這樣ShareSDK就放進Unity裏了
四 修改ShareSDK的配置
ShareSDK導入後需要修改很多地方,注意不要漏了
(1)點擊MainCamera,找到ShareSDK腳本組件,填入前面在ShareSDK官網獲得的AppKey和AppSecret
(2)點擊ShareSDK.cs,啓動Visual Studio,修改ShareSDK腳本的AppKey和AppSecret
(3)打開AndroidManifest.xml,修改AppKey和AppSecret
(4)打開AndroidManifest.xml,修改包名
(5)打開AndroidManifest.xml,修改版本,因爲我的Android Studio的安裝了這兩個版本,所以就改成16 和 29
(6)打開AndroidManifest.xml,修改Activity的name,就是在.wxapi.WXEntryActivity等3個activity加上package的前綴"com.sdk.sharesdktest"
五 獲得我們app的jar包
官方說:微信規定WXEntryActivity.java類的位置必須放到 “項目包包名.wxapi” 路徑下,需要生成新的jar包,這個可以自己生成,不過我還不太熟悉Android Studio,就找官方客服幫忙了,官方q羣:4006852216,跟客服說幫忙生成一個新的DemoCallback.jar,然後報上packamge的名字(比如 com.sdk.sharesdktest),等幾分鐘就可以收到新的jar,把收到的jar放到Unity項目 Assets=>Plugins=>Android=>libs下
六 編寫C#腳本,實現對ShareSDK的調用
這裏我寫了一個腳本SDKManager來調用接口,腳本掛載在Main Camera上,把前面創建的 button 和 text 拖拽到腳本組件上面,代碼如下:
using System.Collections;
using UnityEngine;
using UnityEngine.UI;
using cn.sharesdk.unity3d;
public class SDKManager : MonoBehaviour {
public Button smsBtn;
public Button weChatBtn;
public Button emailBtn;
public Button smsContentBtn;
public Text infoText;
private ShareSDK ssdk;
ShareContent content;
void Start() {
Init();
InitBtns();
}
//獲得ShareSDK對象,並且註冊分享後的回調
void Init()
{
ssdk = GameObject.Find("Main Camera").GetComponent<ShareSDK>();
ssdk.shareHandler = ShareResultHandler;
}
//初始化按鈕的點擊事件
void InitBtns()
{
smsBtn.onClick.AddListener(OnClickTestMsgBtn);
weChatBtn.onClick.AddListener(OnClickWeChatBtn);
emailBtn.onClick.AddListener(OnClickEmailBtn);
smsContentBtn.onClick.AddListener(OnClickShowContentBtn);
}
//輸出信息到text,這樣才知道發生了什麼
void PrintInfo(string info)
{
infoText.text = info;
}
//測試短信
void OnClickTestMsgBtn()
{
PrintInfo("OnClickTestMsgBtn");
ssdk.ShowPlatformList(new PlatformType[] { PlatformType.SMS }, GetShareInfo(" SMS "), 100, 100);
}
//測試微信
void OnClickWeChatBtn()
{
PrintInfo("OnClickWeChatBtn");
ssdk.ShowPlatformList(new PlatformType[] { PlatformType.WeChat }, GetShareInfo("we chat"), 100, 100);
}
//測試郵件按鈕
void OnClickEmailBtn()
{
PrintInfo("OnClickEmailBtn");
ssdk.ShowPlatformList(new PlatformType[] { PlatformType.Mail }, GetShareInfo("mail"), 100, 100);
}
//測試直接打開
void OnClickShowContentBtn()
{
PrintInfo("OnClickShowContentBtn");
ssdk.ShareContent(PlatformType.SMS, GetShareInfo("SMS"));
}
//獲得分享的內容結構
ShareContent GetShareInfo(string platformType)
{
ShareContent content = new ShareContent();
content.SetText("this is a test string.");
content.SetImageUrl("https://f1.webshare.mob.com/code/demo/img/1.jpg");
content.SetTitle("test title:" + platformType);
content.SetTitleUrl("http://www.mob.com");
content.SetSite("Mob-ShareSDK");
content.SetSiteUrl("http://www.mob.com");
content.SetUrl("http://www.mob.com");
content.SetComment("test description");
content.SetMusicUrl("http://mp3.mwap8.com/destdir/Music/2009/20090601/ZuiXuanMinZuFeng20090601119.mp3");
content.SetShareType(ContentType.Webpage);
return content;
}
//分享後的回調
void ShareResultHandler(int reqID, ResponseState state, PlatformType type, Hashtable result)
{
if (state == ResponseState.Success)
{
PrintInfo("Success" + MiniJSON.jsonEncode(result));
print("share result :");
print(MiniJSON.jsonEncode(result));
}
else if (state == ResponseState.Fail)
{
PrintInfo("Fail" + MiniJSON.jsonEncode(result));
PrintInfo(MiniJSON.jsonEncode(result));
print("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);
}
else if (state == ResponseState.Cancel)
{
PrintInfo("cancel !");
print("cancel !");
}
}
}
七 打包,檢查功能
好了,工作準備完了,執行unity的build打包,把打出來的包拖入夜深模擬器,也可以傳到自己的手機上安裝,最終效果是這樣的
一開始界面
點擊smsButton後
點擊smsContenButton後
回調結果
希望有所幫助,that‘s it !