Xamarin Android绑定微信SDK
现在几乎所有的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的更多相关文章
- xamarin.android 绑定百度地图SDK遇到的问题
在 xamarin.android 绑定项目中,绑定 百度地图的LBS地图SDK,参考 https://developer.xamarin.com/guides/android/advanced_to ...
- Xamarin.Android 绑定友盟社会化分享组件
Xamarin.Android 绑定友盟社会化分享组件 最近在开发博客园Android App的时候需要用到友盟社会化分享组件,在github上搜了一下都没有找到最新版本绑定好的项目,就自己动手来绑定 ...
- Xamarin.Android绑定库分享
使用Xamarin.Android时,会用到各种第三方库,而这些库基本上是java编写的,要在Xamarin.Android中使用这些库,就需要通过Android Binding Project绑定对 ...
- Xamarin Android项目提示SDK版本太老
Xamarin Android项目提示SDK版本太老 错误信息:The installed Android SDK is too old.Version 24.3.4 or newer is requ ...
- Xamarin绑定微信SDK 实现分享功能
从开始做这一块的工作开始,就开始找各种的资料,最后还是老老实实的去看官方文档. 对于Xamarin.Android的绑定属于纯jar的绑定,这个难度较小,添加Bindings Library,将lib ...
- 大叔也说Xamarin~Android篇~支付宝SDK的集成
回到目录 首先做为支付宝SDK它提供了多种平台,网页版,wap版,IOS版,android版等等,今天主要说一下在xamarin里使用android平台的sdk的方法,在网上介绍这块的文章不多,大叔本 ...
- Xamarin Android 绑定 UVCCamera
这段时间工作上需要在Android设备上读取视频.摄像头用的是奥比中光的3D摄像头.我手上的摄像头的彩色通道使用的的UVC协议的. 在Xamarin上可用的UVC的封装基本上没有,只有一个小伙在Xam ...
- Xamarin Android 绑定jar库同时将so库打包进去
1.在创建的Bindings Library项目中,新建Assets目录: 2.Assets目录下再分别创建armeabi,armeabi-v7a,x86三个目录: 3.将so文件分布copy到三个目 ...
- Android接入微信SDK之一:发起微信授权登录
1.重要的事情首先说! 包名.应用签名.app id 三者都必须和在腾讯上申请的一致!!!否则将不能成功. 包名:就是在腾讯上申请的包名 应用签名:使用微信官网提供的<签名生成工具>(这个 ...
随机推荐
- Java File类应用:递归遍历文件夹和递归删除文件
要求: 1)采用递归遍历文件夹下的所有文件,包括子文件夹下的文件 2)采用递归删除文件下的所有文件 注意: 以下递归删除文件的方法,只能删除文件,所有的文件夹都还会存在 若要删除正文文件夹,可以在递归 ...
- 小白审计JACKSON反序列化漏洞
1. JACKSON漏洞解析 poc代码:main.java import com.fasterxml.jackson.databind.ObjectMapper; import com.sun.or ...
- Vulkan Tutorial 16 Command buffers
操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 诸如绘制和内存操作相关命令,在Vulkan中不是通过函数直接调用的.我们需要在命令缓 ...
- guoshiyv 数据结构与算法2-1 线性链式存储
线性链式存储: 包含两部分:1.存储的单个元素 2.指针,指向下一个的地址 typedef struct() { ElementType Data; struct Node *Next; }Lis ...
- 将数据库从服务器移到浏览器--indexedDB基本操作封装
数据库是属于服务器的,这是天经地义的事,但是有时候数据也许并非需要存储在服务器,但是这些数据也是一条一条的记录,怎么办?今天来带领你领略一下H5的一个新特性--indexedDB的风骚.你会情不自禁的 ...
- [编织消息框架][netty源码分析]7 Unsafe 实现类NioSocketChannelUnsafe职责与实现
Unsafe 是channel的内部接口,从书写跟命名上看是不公开给开发者使用的,直到最后实现NioSocketChannelUnsafe也没有公开出去 public interface Channe ...
- Redis 数据类型介绍
http://qifuguang.me/2015/09/29/Redis%E4%BA%94%E7%A7%8D%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B%E4%BB%8B% ...
- 利用python将mysql中的数据导入excel
Python对Excel的读写主要有xlrd.xlwt.xlutils.openpyxl.xlsxwriter几种. 如下分别利用xlwt和openpyxl将mysql数据库中查询的数据保存到exce ...
- 【CC2530入门教程-06】CC2530的ADC工作原理与应用
第6课 CC2530的ADC工作原理与应用 广东职业技术学院 欧浩源 一.A/D转换的基本工作原理 将时间上连续变化的模拟量转化为脉冲有无的数字量,这一过程就叫做数字化,实现数字化的关键设备是AD ...
- Hibernate基础知识总结
Hibernate是JDBC的轻量级的对象封装(encapsulation),它是一个独立的对象持久persistence层框架. hibernate要做的事,就是让对象投影到关系数据库中,然后实施化 ...