现在几乎所有的APP都集成了向微博,微信等社交平台分享的功能。这些社交平台官方也提供了SDK让开发者使用,对于Android和IOS平台而言,只需要下载官方的SDK,按照官方说明文档进行集成就可以轻松实现了。

但是对于Xamarin来说,并没有官方的SDK,这个时候就需要我们手动进行绑定了,首先从Android层开始,让我们一步步实现如何在你自己的APP中集成微信SDK实现分享功能。

1. 在微信开放平台官网https://open.weixin.qq.com/ 申请一个开发者账号,填写公司APP信息,通过审核。申请成功的APPID在项目中会使用到。然后下载官方的Android_SDK 下载地址

2. 新建一个Android绑定库项目

3. 把下载的官方SDK中的Jar包放在项目中的Jars文件夹中

记得修改Jar包的属性为嵌入的Jar包,否则在真实项目中编译时会报错。

4. 这个时候进行编译会报错,不过别害怕我们定位到错误的地方发现,原来是编译器在把Jar包转换为C#代码时出现了重名的情况,这个类中有两个ErrCode了。这样可能是因为原来的Java代码属性的名字是errCode,在转换为C#代码时编译器自动把首字母变为大写,所以和后面的类ErrCode起了冲突。

5. 出现了重名我们给他改个名字就可以了,打开项目文件Metadata.xml。这个文件是在把Jar包转换成C#代码时的配置文件,可以进行移除类,移除方法,修改字段名等操作,具体功能这里就不细说了有兴趣的朋友可以研究一下Xamarin的官方文档。

6. 添加如下代码,在转换时就会把名称修改为我们指定的名字了。

<metadata>
<!--
This sample removes the class: android.support.v4.content.AsyncTaskLoader.LoadTask:
<remove-node path="/api/package[@name='android.support.v4.content']/class[@name='AsyncTaskLoader.LoadTask']" /> This sample removes the method: android.support.v4.content.CursorLoader.loadInBackground:
<remove-node path="/api/package[@name='android.support.v4.content']/class[@name='CursorLoader']/method[@name='loadInBackground']" />
--> <attr path="/api/package[@name='com.tencent.mm.opensdk.modelmsg']/class[@name='WXMediaMessage']/field[@name='mediaObject']"
name="managedName">MyMediaObject</attr> <attr path="/api/package[@name='com.tencent.mm.opensdk.modelbase']/class[@name='BaseResp']/field[@name='errCode']"
name="managedName">MyErrCode</attr>
</metadata>

再编译一下,OK已经成功生成了Android的绑定库。接下来建立一个Android项目试一试效果。

7. 添加引用刚才的Android绑定库,然后修改MainActivity.cs代码

using Android.App;
using Android.Widget;
using Android.OS;
using Com.Tencent.MM.Opensdk.Openapi;
using Com.Tencent.MM.Opensdk.Modelbase;
using Com.Tencent.MM.Opensdk.Modelmsg;
using System;
using Android.Graphics;
using System.IO; namespace WeChat.Android.Samples
{
[Activity(Label = "WeChat.Android.Samples", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity, IWXAPIEventHandler
{
// IWXAPI 是第三方app和微信通信的openapi接口
private IWXAPI api; // APP_ID 替换为你的应用从官方网站申请到的合法appId
public const string APP_ID = "wxd930ea5d5a258f4f"; //最小支持朋友圈的版本
private const int TIMELINE_SUPPORTED_VERSION = 0x21020001; public void OnReq(BaseReq p0)
{
throw new NotImplementedException();
} public void OnResp(BaseResp p0)
{
throw new NotImplementedException();
} protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle); // Set our view from the "main" layout resource
SetContentView (Resource.Layout.Main); // 通过WXAPIFactory工厂,获取IWXAPI的实例
api = WXAPIFactory.CreateWXAPI(this, APP_ID, false); Button btnRegister = FindViewById<Button>(Resource.Id.btnRegister);
btnRegister.Click += BtnRegister_Click;
Button btnText = FindViewById<Button>(Resource.Id.btnText);
btnText.Click += BtnText_Click;
Button btnHtml = FindViewById<Button>(Resource.Id.btnHtml);
btnHtml.Click += BtnHtml_Click;
Button btnOpenWeChat = FindViewById<Button>(Resource.Id.btnOpenWeChat);
btnOpenWeChat.Click += BtnOpenWeChat_Click;
Button btnIsMoments = FindViewById<Button>(Resource.Id.btnIsMoments);
btnIsMoments.Click += BtnIsMoments_Click;
} //是否支持朋友圈
private void BtnIsMoments_Click(object sender, EventArgs e)
{
int wxSdkVersion = api.WXAppSupportAPI;
if (wxSdkVersion >= TIMELINE_SUPPORTED_VERSION)
{
Toast.MakeText(this, "wxSdkVersion = " + wxSdkVersion + "\n支持", ToastLength.Long).Show();
}
else
{
Toast.MakeText(this, "wxSdkVersion = " + wxSdkVersion + "\n不支持", ToastLength.Long).Show();
}
} //打开微信APP
private void BtnOpenWeChat_Click(object sender, EventArgs e)
{
Toast.MakeText(this, "launch result = " + api.OpenWXApp(), ToastLength.Long).Show();
} //网页类型分享
private void BtnHtml_Click(object sender, EventArgs e)
{
WXWebpageObject webObj = new WXWebpageObject();
webObj.WebpageUrl = "https://www.xamarin.com/"; WXMediaMessage msg = new WXMediaMessage(webObj);
msg.Title = "Xamarin官网";
msg.Description = "官方网站描述"; //分享的缩略图
Bitmap thumb = BitmapFactory.DecodeResource(this.Resources, Resource.Drawable.Icon);
MemoryStream ms = new MemoryStream();
thumb.Compress(Bitmap.CompressFormat.Png, , ms);
byte[] bytes = ms.ToArray(); //构造一个Req请求
SendMessageToWX.Req req = new SendMessageToWX.Req();
//唯一的请求标志
req.Transaction = System.Guid.NewGuid().ToString();
req.Message = msg;
req.Scene = SendMessageToWX.Req.WXSceneTimeline; //发送数据
api.SendReq(req);
} //文字类型分享
private void BtnText_Click(object sender, EventArgs e)
{
//初始化一个WXTextObject对象,填写分享的文本内容
WXTextObject textObj = new WXTextObject();
textObj.Text = "Hello Xamarin"; //用WXTextObject对象初始化一个WXMediaMessage对象
WXMediaMessage msg = new WXMediaMessage();
msg.MyMediaObject = textObj;
msg.Description = "Hello World"; //构造一个Req请求
SendMessageToWX.Req req = new SendMessageToWX.Req();
//唯一的请求标志
req.Transaction = System.Guid.NewGuid().ToString();
req.Message = msg;
req.Scene = SendMessageToWX.Req.WXSceneSession; //发送数据
api.SendReq(req);
} // 将该app注册到微信
private void BtnRegister_Click(object sender, EventArgs e)
{
var result = api.RegisterApp(APP_ID);
Toast.MakeText(this, "注册结果:" + result, ToastLength.Short).Show();
}
}
}

界面文件Main.axml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/btnRegister"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="将app注册到微信" />
<Button
android:id="@+id/btnText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="发送文字" />
<Button
android:id="@+id/btnHtml"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="发送网页" />
<Button
android:id="@+id/btnOpenWeChat"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="打开微信" />
<Button
android:id="@+id/btnIsMoments"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="是否支持朋友圈" />
</LinearLayout>

8. 到现在为止工作都完成了,现在来调试一下,如果分享时出现闪退的话只需要将APP_ID修改为你在微信开放平台注册的就可以了。

最后附上Github源码地址:https://github.com/vilyo/WeChatDemo

Xamarin Android绑定微信SDK的更多相关文章

  1. xamarin.android 绑定百度地图SDK遇到的问题

    在 xamarin.android 绑定项目中,绑定 百度地图的LBS地图SDK,参考 https://developer.xamarin.com/guides/android/advanced_to ...

  2. Xamarin.Android 绑定友盟社会化分享组件

    Xamarin.Android 绑定友盟社会化分享组件 最近在开发博客园Android App的时候需要用到友盟社会化分享组件,在github上搜了一下都没有找到最新版本绑定好的项目,就自己动手来绑定 ...

  3. Xamarin.Android绑定库分享

    使用Xamarin.Android时,会用到各种第三方库,而这些库基本上是java编写的,要在Xamarin.Android中使用这些库,就需要通过Android Binding Project绑定对 ...

  4. Xamarin Android项目提示SDK版本太老

    Xamarin Android项目提示SDK版本太老 错误信息:The installed Android SDK is too old.Version 24.3.4 or newer is requ ...

  5. Xamarin绑定微信SDK 实现分享功能

    从开始做这一块的工作开始,就开始找各种的资料,最后还是老老实实的去看官方文档. 对于Xamarin.Android的绑定属于纯jar的绑定,这个难度较小,添加Bindings Library,将lib ...

  6. 大叔也说Xamarin~Android篇~支付宝SDK的集成

    回到目录 首先做为支付宝SDK它提供了多种平台,网页版,wap版,IOS版,android版等等,今天主要说一下在xamarin里使用android平台的sdk的方法,在网上介绍这块的文章不多,大叔本 ...

  7. Xamarin Android 绑定 UVCCamera

    这段时间工作上需要在Android设备上读取视频.摄像头用的是奥比中光的3D摄像头.我手上的摄像头的彩色通道使用的的UVC协议的. 在Xamarin上可用的UVC的封装基本上没有,只有一个小伙在Xam ...

  8. Xamarin Android 绑定jar库同时将so库打包进去

    1.在创建的Bindings Library项目中,新建Assets目录: 2.Assets目录下再分别创建armeabi,armeabi-v7a,x86三个目录: 3.将so文件分布copy到三个目 ...

  9. Android接入微信SDK之一:发起微信授权登录

    1.重要的事情首先说! 包名.应用签名.app id 三者都必须和在腾讯上申请的一致!!!否则将不能成功. 包名:就是在腾讯上申请的包名 应用签名:使用微信官网提供的<签名生成工具>(这个 ...

随机推荐

  1. Java常用类之String类、Stringbuffer和Random类练习

    定义一个StringBuffer类对象, 1)使用append方法向对象中添加26个字母,并倒序遍历输入 2)删除前五个字符 package 第十一章常用类; /** * 定义一个StringBuff ...

  2. 基于范围的for循环(STL)

    1. ]={4.99,5.99,6.99,7.99,8.99}; for (double x : prices) cout<<x<<endl; //////////////// ...

  3. 创建对象的N种模式

    1 new Object() 先创建一个Object实例,然后为它添加属性和方法 var Person = new Object() Person.name = 'hl' Person.sayName ...

  4. 前端基于JQgrid实现自定义列头展示

    先上效果图   因为公司项目的需要,并且公司只有我这一个能写js的前端,这个自定义展示jqgrid列选项的需求依然是交由我写,辣么就分享一下我的工作成果. //初始化函数 multiSelectCol ...

  5. 高性能队列Disruptor系列2--浅析Disruptor

    1. Disruptor简单介绍 Disruptor是一个由LMAX开源的Java并发框架.LMAX是一种新型零售金融交易平台,这个系统是建立在 JVM 平台上,核心是一个业务逻辑处理器,它能够在一个 ...

  6. net core 程序docker打包镜像并发布到官方store

    学习一个技术的第一步,总是要先打印或显示一个hello world的.当然,学习docker也不例外.上一篇文章已经简单的介绍了环境的安装和配置.接下来就要打印我们的hello world了. 首先我 ...

  7. css3特效详解

    好吧,CSS3 3D transform变换,不过如此! 这篇文章发布于 2012年09月7日,星期五,01:05,归类于 css相关. 阅读 408042 次, 今日 34 次 一.写在前面的秋裤 ...

  8. UML简要

    一 概述 1.什么是UML? Unified Modeling Language,统一建模语言,用图形化的语言展示事物的结构,为交流与开发提供了便利. 2.UML分类 UML图形主要有用例图.类图.顺 ...

  9. zoom与scale的异同

    zoom与scale的异同点 作为一名前端,尤其是页面要兼容ie浏览器的前端,肯定对着两个属性都很熟悉. zoom和scale都是css中常用的放大和缩小一个元素的方法,在scale还没有成为css3 ...

  10. PHP加密解密数字

    <?php /** * 加密解密类,PHP加密解密数字,适用于URL加密 * 该算法仅支持加密数字.比较适用于数据库中id字段的加密解密,以及根据数字显示url的加密. * @version a ...