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 三者都必须和在腾讯上申请的一致!!!否则将不能成功. 包名:就是在腾讯上申请的包名 应用签名:使用微信官网提供的<签名生成工具>(这个 ...
随机推荐
- centos rabbitmq 安装
MQ 的一个产品[消息队列] rabbitmq 的本质<1>rabbitmq 是用什么语言编写的? => erlang<2>rabbitmq 其实是遵循amqp 协议的一 ...
- 基于谱聚类的三维网格分割算法(Spectral Clustering)
谱聚类(Spectral Clustering)是一种广泛使用的数据聚类算法,[Liu et al. 2004]基于谱聚类算法首次提出了一种三维网格分割方法.该方法首先构建一个相似矩阵用于记录网格上相 ...
- uibutton颜色设置
UIColor *color = [UIColor colorWithRed:100 / 255.0 green:20 / 255.0 blue:50 / 255.0 alpha:1.0];
- openvpn实现内网 映射到 外网
openvpn实现内网 映射到 外网 场景介绍: 机器介绍 本地一台Ubuntu服务器A , 处于内网中 , 无外网IP 外网一台Ubuntu服务器B , 外网地址139.199.4.205 目标 : ...
- 搭建rtmp直播流服务之4:videojs和ckPlayer开源播放器二次开发(播放rtmp、hls直播流及普通视频)
前面几章讲解了使用 nginx-rtmp搭建直播流媒体服务器; ffmpeg推流到nginx-rtmp服务器; java通过命令行调用ffmpeg实现推流服务; 从数据源获取,到使用ffmpeg推流, ...
- EntityFramework Core迁移时出现数据库已存在对象问题解决方案
前言 刚开始接触EF Core时本着探索的精神去搞,搞着搞着发现出问题了,后来就一直没解决,觉得很是不爽,借着周末好好看看这块内容. EntityFramework Core迁移出现对象在数据库中已存 ...
- node.js零基础详细教程(7):node.js操作mongodb,及操作方法的封装
第七章 建议学习时间4小时 课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑. ...
- jq瀑布流代码
<style> #zh{ position:fixed; width:100%; height:100%; background:url(images/bgblack.png); top: ...
- Linux网络编程“惊群”问题总结
1.前言 我从事Linux系统下网络开发将近4年了,经常还是遇到一些问题,只是知其然而不知其所以然,有时候和其他人交流,搞得非常尴尬.如今计算机都是多核了,网络编程框架也逐步丰富多了,我所知道的有多进 ...
- 开源Inno Setup官网下载、安装、打包教程(官网安装向导中文语言包)
安装Inno Setup篇 1.搜索Inno Setup 2.下载Inno Setup 3.选择下载最新 innosetup-5.5.9-unicode.exe 版本(innosetup-5.5.9. ...