现在几乎所有的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. cpp(第十一章)

    1. std::istream & operator>>(std::istream &is,complex_c &t) { std::cout<<&qu ...

  2. 使用类似于中介者模式实现不同VC之间的跳转

    在2013年的时候,我们就已经实现了类似于http地址进行页面跳转, 那个时候,主要是用继承ViewController和给 UIViewController和UINavigationControll ...

  3. Spring学习(14)--- 基于Java类的配置Bean 之 @ImportResource & @Value 注解

    学习如何使用@ImportResource 和 @Value 注解进行资源文件读取 例子: 先创建一个MyDriverManager类(模拟读取数据库配置信息) package com.beanann ...

  4. 通过JSP+servlet实现文件上传功能

    在TCP/IP中,最早出现的文件上传机制是FTP.它将文件由客户端到服务器的标准机制. 但是在JSP中不能使用FTP来上传文件,这是有JSP的运行机制所决定的. 通过为表单元素设置Method=&qu ...

  5. Java通过jxl解析Excel文件入库,及日期格式处理方式 (附源代码)

    JAVA可以利用jxl简单快速的读取文件的内容,但是由于版本限制,只能读取97-03  xls格式的Excel. 本文是项目中用到的一个实例,先通过上传xls文件(包含日期),再通过jxl进行读取上传 ...

  6. Rhythmbox音乐播放器常见问题

    一.歌名中文乱码 对于所有用gstreamer做后端的播放器,如Rhythmbox, 设置如下的环境变量后即可正确读取mp3中GBK编码的id3 tag. export GST_ID3_TAG_ENC ...

  7. linux 下用renameTo方法修改java web项目中文件夹名称问题

    经测试,在Linux环境中安装tomcat,然后启动其中的项目,在项目中使用java.io.File.renameTo(File dest)方法可行. 之前在本地运行代码可以修改,然后传到Linux服 ...

  8. 用Nodejs做一个简单的小爬虫

    Nodejs将JavaScript语言带到了服务器端,作为js主力用户的前端们,因此获得了服务器端的开发能力,但除了用express搭建一个博客外,还有什么好玩的项目可以做呢?不如就做一个网络爬虫吧. ...

  9. python 自定义回调函数

    回调函数用起来比较爽.特别是在js中,满世界全是回调,那么在python中,怎么来优雅地实现自己的回调函数呢 下面贴一个我写的例子 class BaseHandler(object): def cra ...

  10. 关于HTML学习整理(一)

    新人,自己整理,第一次发,以后慢慢整理,欢迎指点,那些链接怎么做的,希望有人告知一下,谢谢! HTML页面写法,标签成对出现,可嵌套使用 <html> <head> <t ...