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 三者都必须和在腾讯上申请的一致!!!否则将不能成功. 包名:就是在腾讯上申请的包名 应用签名:使用微信官网提供的<签名生成工具>(这个 ...
随机推荐
- css3 linear-gradient渐变效果及兼容性处理
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 模板C++ 03图论算法 2最短路之全源最短路(Floyd)
3.2最短路之全源最短路(Floyd) 这个算法用于求所有点对的最短距离.比调用n次SPFA的优点在于代码简单,时间复杂度为O(n^3).[无法计算含有负环的图] 依次扫描每一点(k),并以该点作为中 ...
- 基于angular的route实现单页面cnodejs
Angular ui-router 前言 之前不太理解前端怎么实现路由功能,以前知道有一种方式使用html5的pushState可以操作url才实现路由的功能,在实践项目中也用过一次,后来这种操作叫成 ...
- Python之道1-环境搭建与pycharm的配置django安装及MySQL数据库配置
近期做那个python的开发,今天就来简单的写一下开发路线的安装及配置, 开发路线 Python3.6.1+Pycharm5.0.6+Django1.11+MySQL5.7.18 1-安装Python ...
- rem的js
html { font-size : 20px; } @media only screen and (min-width: 401px){ html { font-size: 25px !import ...
- 移动端响应式布局+rem+calc()
1.媒体查询:@media only screen and (max-width: ) {},在最初做pc端时,使用各种媒体查询,因为pc的屏幕分辨率总共就几种,不嫌麻烦的重复使用类名.有很大的缺陷就 ...
- 读Zepto源码之属性操作
这篇依然是跟 dom 相关的方法,侧重点是操作属性的方法. 读Zepto源码系列文章已经放到了github上,欢迎star: reading-zepto 源码版本 本文阅读的源码为 zepto1.2. ...
- grid栅格布局
前面的话 Grid布局方式借鉴了平面装帧设计中的格线系统,将格线运用在屏幕上,而不再是单一的静态页面,可以称之为真正的栅格.本文将详细介绍grid布局 引入 对于Web开发者来说,网页布局一直是个比较 ...
- Sqlserver 2005 跨数据库 导入数据
--Sqlserver 2005 跨数据库 导入数据:--SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/O ...
- PHP htmlspecialchars和htmlspecialchars_decode(函数)
htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体. 函数原型:htmlspecialchars(string,quotestyle,character-set) 预定 ...