ShareSDK接入實現微信分享功能(轉)
ShareSDK接入實現微信分享功能
首先需要去Mob官網(http://www.mob.com/)下載shareSDK For Unity3d
下載完成,解壓,將以下plugins資料夾移入Unity專案的Assets資料夾裡,並將專案平臺轉換為安卓平臺
在場景裡建立幾個cube作為場景內容,建立一個button作為分享按鈕,最後建立一個text來顯示分享返回資訊
為場景內的攝像機(或者其他任意gameobject)新增ShareSDK指令碼,同時建立一個demo指令碼掛在攝像機上
ShareSDK指令碼需要填寫AppKey和AppSecret,可以去mob平臺官網註冊一個賬號,新增一個應用後獲得。接下來需要開啟我們想使用的分享平臺關閉我們不需要使用的分享平臺,如圖,當某個平臺不勾選enable時,無法使用這個平臺的分享功能,本例使用微信分享,因此關閉了其他的平臺(注:相關平臺需要Appkey和AppSecret需要註冊獲得,例如微信則需要去註冊微信開放平臺獲得)
上圖中如勾選了BypassApproval,則在分享時會繞過微信驗證,但是功能不全,只能一圖片方式分享圖片(這樣是否就不需要微信提供的Appkey和AppSecret呢?暫時未驗證)。
以上設定準備工作做完就可以開始編輯我們的程式碼了。
using System.Collections; using System.Collections.Generic; using UnityEngine; using cn.sharesdk.unity3d; using UnityEngine.UI; public class demo : MonoBehaviour { public ShareSDK sharesdk; private string objectname; public Text text; public Button button; // Use this for initialization void Start () { //獲取到ShareSDK指令碼元件 sharesdk = GetComponent<ShareSDK>(); //獲取到場景的Text用以顯示資訊 text = GameObject.Find("Text").GetComponent<Text>(); //獲取到場景的button用以執行分享操作 button = GameObject.Find("Button").GetComponent<Button>(); //設定分享後的回撥 sharesdk.shareHandler = OnShareResultHandler; //為button掛載事件 button.onClick.AddListener(delegate { //螢幕截圖,將會儲存在Application.persistentDataPath + "/ScreenShot.png"位置 Application.CaptureScreenshot("Shot.png"); text.text = "正在截圖"; //開啟協程 StartCoroutine(JiePingTime()); }); } //分享操作完成後的回撥函式;引數:請求的id,操作後狀態,分享的平臺,返回的資料 void OnShareResultHandler(int repID,ResponseState state ,PlatformType type,Hashtable response) { //如果分享操作成功 if(state==ResponseState.Success) { text.text = "分享成功!"; } //如果分享操作失敗 else if (state == ResponseState.Fail) { text.text = "失敗!"; } //如果取消了分享操作 else if (state == ResponseState.Cancel) { text.text = "取消!"; } } //協程,執行分享操作 private IEnumerator JiePingTime() { //等待截圖完成,0.5秒後繼續下面的操作 yield return new WaitForSeconds(0.5f); //獲取到剛剛的截圖路徑 string path = Application.persistentDataPath + "/Shot.png"; //建立分享內容例項 ShareContent content = new ShareContent(); //設定分享內容的text content.SetText("這是SetText方法"); //設定分享內容的本地圖片;如果想載入網路上的圖片,可以使用content.SetImageUrl(string URL)方法來設定圖片 content.SetImagePath(path); //設定分享所連結到的網頁地址 content.SetUrl("http://www.baidu.com/"); //設定分享的標題 content.SetTitle("這是SetTitle方法"); //設定分享的內容 //ContentType.Auto為根據以上設定自動設定型別 //也可以ContentType.Image/ContentType.Music/ContentType.Video......等等來自己設定分享的型別 content.SetShareType(ContentType.Auto); //多平臺選擇,以下語句使得按鈕被點選以後會彈出選擇分享平臺的面板, //面板上的顯示的平臺可以使用PlatformType[] platforms來自己定義,如果sharesdk.ShowPlatformList的 //第一個引數為null,則會顯示ShareSDK支援的所有平臺以供選擇 //PlatformType[] platforms = { PlatformType.WeChat, PlatformType.WeChatMoments }; //sharesdk.ShowPlatformList(platforms, content, 0, 0); //單一分享,此語句指示在點選按鈕以後直接彈出微信好友分享,若PlatformType.WeChatMoments則為朋友圈分享 sharesdk.ShowShareContentEditor(PlatformType.WeChat, content); } }
編寫完指令碼以後,就可以把專案釋出成apk進行測試了。注:在釋出apk時使用的包名和簽名,要和專案中所用的微信開放平臺給的appkey所對應的包名和簽名一致。測試結果如下:
上圖中黃圈裡面的“蟲蟲總動員2018”是專案中使用的微信開放平臺的appkey對應的應用名,微信自動給新增。
但是在測試時發現回撥函式並沒有執行,如圖:
螢幕中間的text並沒有顯示回撥函式裡面的資訊,說明回撥函式沒有執行,為此,我們還需要設定安卓配置檔案並且修改DemoCallback.jar包。
首先,修改安卓配置檔案,如圖
將上圖中紅框裡的包名改為使用的微信開放平臺appkey所對應的包名。
然後修改DemoCallback.jar包,如圖:
將這個jar包匯入eclipse,然後修改包名為使用的微信開放平臺appkey所對應的包名,匯出,替換掉專案裡的jar包以後即可實現回撥(注:本例只使用了微信分享功能,故在libs資料夾裡將其他平臺的jar包刪除,只留下了微信分享相關的jar包和shareSDK必須的jar包(結果如圖),不需要的平臺jar包可以刪除,並且有一個telegram平臺分享在使用sharesdk.ShowPlatformList方法時會自己出現,無法在shareSDK元件裡取消enable勾選來關閉,故不想顯示這個平臺的話需要手動刪除telegram平臺的jar包)。