天天看点

unity微信分享及回调

上次给大家分享了unity接入微信登录的步骤详见https://blog.csdn.net/qq_37857934/article/details/79316289,之前有网友反馈微信登录旋转屏幕后就闪退的问题,这是AndroidManifest文件中默认为了竖屏的缘故,大家可根据需要,自行加入屏幕方向的相关代码,就可以解决旋转方向时闪退的问题。

下面这个是自动旋转的代码

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"          android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale|layoutDirection"
           

OK,进入正题---------------------------------------

本次咱们说一说微信分享吧,首先Mainactivity继承UnityPlayerActivity 并将APPID注册到微信中这点是不变的,然后咱们unity肯定要调用java里面的微信分享方法了,怎么调用大家应该清楚了吧,主要给大家讲一下微信分享的方法吧。

下面贴出一段代码

//微信分享

public void share(boolean friendsCircle)
  {
    WXWebpageObject webpage = new WXWebpageObject();
    webpage.webpageUrl = "https://www.xxx.com;//微信分享后可点击进入的链接,分享url
    WXMediaMessage msg = new WXMediaMessage(webpage);
    msg.title = "分享内容的标题";
    msg.description = "分享内容的描述";
    msg.thumbData = getThumbData();//封面图片byte数组
    SendMessageToWX.Req req = new SendMessageToWX.Req();
    req.transaction = String.valueOf(System.currentTimeMillis());
    req.message = msg;
    if (friendsCircle)
    {
      req.scene = (friendsCircle ? 1 : 0);
      this.api.sendReq(req);
    }
    if (!friendsCircle)
    {
      req.scene = (friendsCircle ? 0 : 0);
      this.api.sendReq(req);
    }
  }
           

//获取分享封面byte数组 我们这边取的是软件启动icon

private byte[] getThumbData()
  {
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inSampleSize = 2;
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), 2130903040, options);
    ByteArrayOutputStream output = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, output);
    int quality = 100;
    while ((output.toByteArray().length > 32768) && (quality != 10))
    {
      output.reset();
      bitmap.compress(Bitmap.CompressFormat.JPEG, quality, output);
      quality -= 10;
    }
    bitmap.recycle();
    byte[] result = output.toByteArray();
    try
    {
      output.close();
    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
    return result;

  }
           

//那么分享朋友圈和分享给好友就可以这样调用了

public void share_friend_circle()
  {
    share(true);//为true表示分享给朋友圈
  }
  
  public void share_friend()
  {
    share(false);//为true表示分享给朋友或者微信群

  }
           

微信分享的回调仍然写在WXEntryActivity中,与微信登录的回调相似,resp.getType()==1表示微信登录结果的回调,resp.getType()==2,表示微信分享结果的回调,大家可以根据自己的需求使用到项目当中去。

public void onReq(BaseReq arg0) {}
  
  public void onResp(BaseResp resp)
  {
    if (resp.getType() == 1)
    {
      String result;
      switch (resp.errCode)
      {
      case 0: 
        Bundle bundle = new Bundle();
        resp.toBundle(bundle);
        SendAuth.Resp sp = new SendAuth.Resp(bundle);
        String token = sp.code;
        requestOpenId(token);
        
        result = "授权成功!";
        break;
      case -2: 
        result = "发送取消";
        break;
      case -4: 
        result = "发送拒绝";
        break;
      case -3: 
      case -1: 
      default: 
        result = "发送返回";
      }
      Toast.makeText(this, result, 1).show();
      finish();
    }
    if (resp.getType() == 2)
    {
      String result;
      switch (resp.errCode)
      {
      case 0: 
        result = "分享成功";
        UnityPlayer.UnitySendMessage("脚本所挂载的gameobject名", "脚本中的方法名", "");//分享成功后回调给unity
        break;
      case -2: 
        result = "取消分享";
        break;
      case -3: 
        result = "分享失败";
        break;
      case -1: 
      default: 
        result = "未知原因";
      }
      Toast.makeText(this, result, 1).show();
      finish();
    }
  }
           

有不太清楚的可以在下方评论留言,可以在此基础上修改http://download.csdn.net/download/qq_37857934/10250295,欢迎广大开发者批评指正

继续阅读