現在幾乎所有的APP都集成了向微博,微信等社交平臺分享的功能。這些社交平臺官方也提供了SDK讓開發者使用,對於Android和IOS平臺而言,只需要下載官方的SDK,按照官方說明文檔進行集成就可以輕鬆實現了。 但是對於Xamarin來說,並沒有官方的SDK,這個時候就需要我們手動進行綁定了,首先從A ...
現在幾乎所有的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, 0, 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