Unity中实现接入ShareSDK的微信登陆和分享功能

一:安卓端

——到MobTech官网和微信开发者平台获取shareSDK的AppKey、AppSecret和微信的AppID、AppSecret

——在MobTech官网上下载Unity的ShareSDK并导入unitypackage文件:http://www.mob.com/download

——File—BuildSettings—PlayerSettings—Publishing Settings—勾选上Custom Gradle Template(集成的核心文件)和User Proguard File

——File—BuildSettings—PlayerSettings—Publishing Settings—创建并选择签名

——打开Plugins—Android—ShareSDK—AndroidManifest文件,修改Activity的name,就是在.wxapi.WXEntryActivity的activity前加上包名

——删除这两块不必要的内容

——微信规定WXEntryActivity.java类的位置必须放到 “项目包包名.wxapi” 路径下,需要生成新的jar包,熟悉Android Studio可以自己生成,不熟悉的跟客服说帮忙生成一个新的DemoCallback.jar,然后报上package的名字,等几分钟就可以收到新的jar
进入到目录Plugins—Android—ShareSDK—libs下,将新的jar包替换原有的DemoCallback.jar包

——微信登录实现
首先shareSDK.Authorize(PlatformType.WeChat)拉取微信(授权)
拉取成功后(shareSDK.authHandler = AuthResultHandler)执行AuthResultHandler回调
在AuthResultHandler回调返回成功后去获得用户信息shareSDK.GetUserInfo(PlatformType.WeChat)
获得用户信息成功后(shareSDK.showUserHandler = GetUserInfoResultHandler)执行GetUserInfoResultHandler回调GetUserInfoResultHandler回调返回成功表示登录成功

using System;
using System.Collections;
using UnityEngine;
using cn.sharesdk.unity3d;
using UnityEngine.SceneManagement;

public class Login : MonoBehaviour
{
    private ShareSDK shareSDK; //ShareSDK脚本

    private void Awake()
    {
        shareSDK = FindObjectOfType<ShareSDK>();

        shareSDK.authHandler = AuthResultHandler;
        shareSDK.showUserHandler = GetUserInfoResultHandler;
    }

    /// <summary>
    /// 按下登陆按钮
    /// </summary>
    public void OnLoginButtonDown()
    {
        //拉起微信
        shareSDK.Authorize(PlatformType.WeChat);
    }

    //拉取微信成功的回调
    private void AuthResultHandler(int reqID, ResponseState state, PlatformType type, Hashtable result)
    {
        if (state == ResponseState.Success)
        {
            shareSDK.GetUserInfo(PlatformType.WeChat);

            Debug.Log("authorize success !");
        }
        else if (state == ResponseState.Fail)
        {
            Debug.Log("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);
        }
        else if (state == ResponseState.Cancel)
        {
            Debug.Log("cancel !");
        }
    }

    //得到用户信息成功的回调
    private void GetUserInfoResultHandler(int reqID, ResponseState state, PlatformType type, Hashtable result)
    {
        if (state == ResponseState.Success)
        {
            Debug.Log("get user info result :");
            Debug.Log(MiniJSON.jsonEncode(result));

            //保存用户信息
            PlayerPrefs.SetString("userInfo", MiniJSON.jsonEncode(result));

            //切换场景
            SceneManager.LoadScene("Main");
        }
        else if (state == ResponseState.Fail)
        {
            Debug.Log("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);
        }
        else if (state == ResponseState.Cancel)
        {
            Debug.Log("cancel !");
        }
    }
}

/// <summary>
/// 用户信息类
/// </summary>
[Serializable]
public class Root
{
    public string nickname;

    public string headimgurl;
}

——微信分享实现
——勾选掉ShareSDK的Bypass Approval,否则分享不能显示


——微信分享代码
设置shareSDK.shareHandler = ShareResultHandler回调,分享成功后执行ShareResultHandler回调

using UnityEngine;
using cn.sharesdk.unity3d;
using System.Collections;

public class Share : MonoBehaviour
{
    private ShareSDK shareSDK; //ShareSDK脚本

    private void Awake()
    {
        shareSDK = FindObjectOfType<ShareSDK>();

        shareSDK.shareHandler = ShareResultHandler;
    }

    /// <summary>
    /// 分享的回调
    /// </summary>
    private void ShareResultHandler(int reqID, ResponseState state, PlatformType type, Hashtable result)
    {
        if (state == ResponseState.Success)
        {
            Debug.Log("share result :");
            Debug.Log(MiniJSON.jsonEncode(result));
        }
        else if (state == ResponseState.Fail)
        {
            Debug.Log("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);
        }
        else if (state == ResponseState.Cancel)
        {
            Debug.Log("cancel !");
        }
    }

    /// <summary>
    /// 按下分享按钮
    /// </summary>
    public void OnShareButtonDown()
    {
        ShareContent content = new ShareContent();
        content.SetText("邀请的文字");
        content.SetShareType(ContentType.Text);

        //WeChat:微信朋友 WeChatMoments:朋友圈
        shareSDK.ShareContent(PlatformType.WeChat, content);
    }
}

二:IOS端


三:从服务器下载头像

    /// <summary>
    /// 下载头像
    /// </summary>
    /// <param name="url">头像的url</param>
    public IEnumerator DownloadHeadicon(string url)
    {
        if (url == null)
        {
            yield return null;
        }

        UnityWebRequest uwr = UnityWebRequest.Get(url);
        DownloadHandlerTexture downloadTexture = new DownloadHandlerTexture(true);
        uwr.downloadHandler = downloadTexture;

        yield return uwr.SendWebRequest();

        Texture2D _texture = null;
        if (!(uwr.isNetworkError || uwr.isHttpError))
        {
            _texture = downloadTexture.texture;
            headicon_img.texture = _texture;
        }
        else
        {
            Debug.Log("download Texture Error");
        }
    }

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hello Bug.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值