unity 接入MOB ShareSDk流程

每个U3D程序都要面临着接入第三方SDK的问题,之前接入的原生微信登录那套,这两天公司因为某种原因放弃了,准备接入Share SDK 的登录 和分享。
关于如何去Share官网注册,和去对应平台获取生产对应的秘钥。可以先阅读下这篇文章Unity 之MOB >ShareSDK流程详解 - 简书。(里面已经详细介绍了接入前的准备工作流程)
我写这篇文章是怕我以后一忙,自己忘记,毕竟这块技术含量很低,就是注意下配置的几个地方,如果是高手请忽略此文章。 不啰嗦,进入正题。
首先说下去官网下载画unity的继承 SDK,这里MOB 做的就是傻瓜式接入,这里贴上下载地址 免费SDK下载_第>三方SDK接口_Mob移动开发者平台
下载后的文件夹里找到ShareSDk.unitypackage,这个资源包含了所需要的安卓资源和ios资源,这样小白也就可以不用去关心资源摆放的问题。只需要关心接下来的几个配置的步骤,之后的版本虽有变化,但差别不大。

image
首先,在Scene中新建一个空物体,并挂上SDK提供的 ShareSDK脚本,填入ShareSDk 的App KeyApp Secret。打开折叠的Dev info修改里面,所需要的平台秘钥,最后挂上ShareSDKManager,这个是要我自己写的。
image.png

接着,是修改 AndrondManifest 配置表,将package=后面的包名换成自己项目的

image.png

最下面填入shareSDK的秘钥,这个配置表就修改好了


image.png

再来是导出对应包名的jar包,这个可以联系客服获取,然后客服给我返回了一个工具 PackUnity放到ta导给我的jar包列表里,让我以后可以自己修改包名。导好的jar包放到../Android/ShareSDK/libs文件夹下

image.png

我摘取了demo脚本里需要的代码部分放到ShareSDKManager

image.png

贴上代ShareSDKManager代码码
 using System;
 using System.Collections;
 using cn.sharesdk.unity3d;
 using UnityEngine;
 using UnityEngine.UI;

public class ShareSDKManager : MonoBehaviour
{
    public Button ShareMenuButton;               //微信菜单分享按钮
    public Button WeChatShareButton;             //微信分享按钮
    public Button LoginButton;                   //登录微信按钮
    public Text TipsText;                        //提示文本
    public Button CopyButton;                    //复制按钮
    public ShareSDK Ssdk;                        //shareSDK
    public Image Image;           

 private void Start ()
{   
    //注册shareSDK需要的回调函数
    Ssdk = gameObject.GetComponent<ShareSDK>();
    Ssdk.authHandler = OnAuthResultHandler;
    Ssdk.shareHandler = OnShareResultHandler; 
    Ssdk.showUserHandler = OnGetUserInfoResultHandler;   
    Ssdk.getFriendsHandler = OnGetFriendsResultHandler;
    Ssdk.followFriendHandler = OnFollowFriendResultHandler;
    ShareMenuButton.onClick.AddListener(OnShareMeuaOnClick);   
    WeChatShareButton.onClick.AddListener(weChatShareButtonOnClick);
    LoginButton.onClick.AddListener(LoginButtonClick);   
    CopyButton.onClick.AddListener(CopyButtonOnClick);
}

  /// <summary>
  /// 复制按钮处理事件
  /// </summary>
 private void CopyButtonOnClick()
 {
    GUIUtility.systemCopyBuffer = TipsText.text;
 }

/// <summary>
/// 微信菜单分享按钮
/// </summary>
 public void OnShareMeuaOnClick()
 {
  ShareContent content = new ShareContent();

  //(Android only) 隐藏九宫格里面不需要用到的平台(仅仅是不显示平台)
  //(Android only) 也可以把jar包删除或者把Enabl属性e改成false(对应平台的全部功能将用不了)
  String[] platfsList = {((int)PlatformType.QQ).ToString(), ((int)PlatformType.Facebook).ToString(), ((int)PlatformType.TencentWeibo).ToString()};
  content.SetHidePlatforms (platfsList);

  content.SetText("这是微信菜单分享测试");
  content.SetImageUrl("http://ww3.sinaimg.cn/mw690/be159dedgw1evgxdt9h3fj218g0xctod.jpg");
  content.SetTitle("测试微信菜单分享");

  //(Android only) 针对Android绕过审核的多图分享,传图片String数组 
  String[] imageArray =  {"/sdcard/test.jpg", "http://f1.webshare.mob.com/dimgs/1c950a7b02087bf41bc56f07f7d3572c11dfcf36.jpg", "/sdcard/test.jpg"};
  content.SetImageArray (imageArray);

  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.Image);

  //不同平台分享不同内容
  ShareContent customizeShareParams = new ShareContent();
  customizeShareParams.SetText("Sina share content");
  customizeShareParams.SetImageUrl("http://git.oschina.net/alexyu.yxj/MyTmpFiles/raw/master/kmk_pic_fld/small/107.JPG");
  customizeShareParams.SetShareType(ContentType.Text);
  customizeShareParams.SetObjectID("SinaID");
  content.SetShareContentCustomize(PlatformType.SinaWeibo, customizeShareParams);
  
  //优先客户端分享
  // content.SetEnableClientShare(true);

  //使用微博API接口应用内分享 iOS only
  // content.SetEnableSinaWeiboAPIShare(true);

  //通过分享菜单分享
  Ssdk.ShowPlatformList (null, content, 100, 100);
 }

 /// <summary>
 /// 登录按钮
 /// </summary>
 public void LoginButtonClick()
 {
    print("----------------------->>>>>>>>>"+Ssdk.IsAuthorized(PlatformType.WeChat));

    TipsText.text = "点击授权返回的值:" + Ssdk.IsAuthorized(PlatformType.WeChat);
    
    Ssdk.GetUserInfo(PlatformType.WeChat);
  }

   /// <summary>
   /// 授权回调
   /// </summary>
   /// <param name="reqID"></param>
   /// <param name="state"></param>
   /// <param name="type"></param>
   /// <param name="result"></param>
   void OnAuthResultHandler(int reqID, ResponseState state, PlatformType type, Hashtable result)
  {
    if (state == ResponseState.Success)
    {
        if (result != null && result.Count > 0) 
        {
            print ("authorize success !" + "Platform :" + type + "result:" + MiniJSON.jsonEncode(result));
        } else
        {
            print ("authorize success !" + "Platform :" + type);
        }
    }
    else if (state == ResponseState.Fail)
    {
        #if UNITY_ANDROID
        print ("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);
        #elif UNITY_IPHONE
        print ("fail! error code = " + result["error_code"] + "; error msg = " + result["error_msg"]);
        #endif
    }
    else if (state == ResponseState.Cancel) 
    {
        print ("cancel !");
    }
}
 /// <summary>
 /// 获取用户信息回调
 /// </summary>
 /// <param name="reqID"></param>
 /// <param name="state"></param>
 /// <param name="type"></param>
 /// <param name="result"></param>
void  OnGetUserInfoResultHandler (int reqID, ResponseState state, PlatformType type, Hashtable result)
{
    if (state == ResponseState.Success)
    {
        
        print ("get user info result :");
        print (MiniJSON.jsonEncode(result));
        print ("AuthInfo:" + MiniJSON.jsonEncode (Ssdk.GetAuthInfo (PlatformType.WeChat)));

        var infoJson = MiniJSON.jsonEncode(Ssdk.GetAuthInfo(PlatformType.WeChat));
    
        TipsText.text = "开始解析json数据";
        
        var  weChatUserData = JsonUtility.FromJson<Root>(infoJson);

        StartCoroutine(LoadUserIcon(weChatUserData.UserIcon));

 //     tipsText.text = "AuthInfo:" + MiniJSON.jsonEncode(ssdk.GetAuthInfo(PlatformType.WeChat));
 //         
//      print ("Get userInfo success !Platform :" + type ); 
    }  
    else if (state == ResponseState.Fail)
    {
        #if UNITY_ANDROID
        TipsText.text = "fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"];
        print ("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);
        #elif UNITY_IPHONE
        tipsText.text = "fail! error code = " + result["error_code"] + "; error msg = " + result["error_msg"]];
        print ("fail! error code = " + result["error_code"] + "; error msg = " + result["error_msg"]);
        #endif
    }
    else if (state == ResponseState.Cancel)
    {
        TipsText.text = "cancel !";
        print ("cancel !");
    }
}

    /// <summary>
    /// 分享回调
    /// </summary>
    /// <param name="reqID"></param>
    /// <param name="state"></param>
    /// <param name="type"></param>
    /// <param name="result"></param>
void OnShareResultHandler (int reqID, ResponseState state, PlatformType type, Hashtable result)
{
    if (state == ResponseState.Success)
    {
        TipsText.text = "share successfully - share result :";
        print ("share successfully - share result :");
        print (MiniJSON.jsonEncode(result));
    }
    else if (state == ResponseState.Fail)
    {
        #if UNITY_ANDROID
        TipsText.text = "fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"] ;
        print ("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);
        #elif UNITY_IPHONE
        print ("fail! error code = " + result["error_code"] + "; error msg = " + result["error_msg"]);
        #endif
    }
    else if (state == ResponseState.Cancel)
    {
        TipsText.text = "cancel !";
        print ("cancel !");
    }
}


    void OnGetFriendsResultHandler (int reqID, ResponseState state, PlatformType type, Hashtable result)
{
    if (state == ResponseState.Success)
    {           
        print ("get friend list result :");
        print (MiniJSON.jsonEncode(result));
    }
    else if (state == ResponseState.Fail)
    {
        #if UNITY_ANDROID
        print ("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);
        #elif UNITY_IPHONE
        print ("fail! error code = " + result["error_code"] + "; error msg = " + result["error_msg"]);
        #endif
    }
    else if (state == ResponseState.Cancel) 
    {
        print ("cancel !");
    }
}




void OnFollowFriendResultHandler (int reqID, ResponseState state, PlatformType type, Hashtable result)
{
    if (state == ResponseState.Success)
    {
        print ("Follow friend successfully !");
    }
    else if (state == ResponseState.Fail)
    {
        #if UNITY_ANDROID
        print ("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);
        #elif UNITY_IPHONE
        print ("fail! error code = " + result["error_code"] + "; error msg = " + result["error_msg"]);
        #endif
    }
    else if (state == ResponseState.Cancel) 
    {
        print ("cancel !");
    }
}


   /// <summary>
   /// 下载头像
   /// </summary>
   /// <param name="url"></param>
   /// <returns></returns>
public IEnumerator LoadUserIcon(string url)
{
    TipsText.text = url;
    
    if (url == null)
    {
        TipsText.text = "输入的下载地址为空";
        yield return null;
    }

    using (WWW www = new WWW(url))
    {
        yield return www;
        
        if (string.IsNullOrEmpty(www.error))
        {
            var texture = www.texture;
            
            Image.sprite=Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));
        }
        else
        {
            TipsText.text = "头像获取为空";
        }
    }
  } 
} 

 [System.Serializable]
 public class Root
{
 /// <summary>
 ///验证令牌
 /// </summary>
 public string RefreshToken;

 /// <summary>
 /// 打开id
 /// </summary>
 public string OpenId;

 /// <summary>
 /// ExpiresIn
 /// </summary>
 public int ExpiresIn;

 /// <summary>
 /// 用户性别
 /// </summary>
 public string UserGender;

  /// <summary>
  /// 令牌秘钥匙
  /// </summary>
  public string TokenSecret;

  /// <summary>
  /// 用户ID
  /// </summary>
  public string UserId;

  /// <summary>
  /// 工会ID 
  /// </summary>
  public string UnionId;

  /// <summary>
  ///延时
  /// </summary>
  public int ExpiresTime;

  /// <summary>
  /// 用户名
  /// </summary>
  public string UserName;

  /// <summary>
  ///令牌
  /// </summary>
  public string Token;

  /// <summary>
  ///头像地址
  /// </summary>   
  public string UserIcon;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容