Xamarin作為微軟提供的移動服務多系統開發平臺,成為很多開發者首選的應用開發平臺。AppGallery Connect(以下簡稱AGC)也在逐步的支持Xamarin的SDK。今天就手把手教大家如何快速接入Xamarin版遠程配置服務。 接入步驟 安裝Xamarin環境 Xamarin的御用開發平 ...
Xamarin作為微軟提供的移動服務多系統開發平臺,成為很多開發者首選的應用開發平臺。AppGallery Connect(以下簡稱AGC)也在逐步的支持Xamarin的SDK。今天就手把手教大家如何快速接入Xamarin版遠程配置服務。
接入步驟
安裝Xamarin環境
Xamarin的御用開發平臺是Visual Studio,所以我們需要首先安裝Visual Studio 2019.
下載地址:https://visualstudio.microsoft.com/zh-hans/downloads/
下載好後進行安裝,我們還需要安裝Xamarin配套的插件,Mobile development with .NET,中文叫“使用.NET的移動開發”,安裝完成後就可以通過Visual Studio進行Xamarin的Android和iOS開發了。
![cke_13819.png](https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtybbs/150/224/722/0900086000150224722.20210702192611.62001160265448560308108120698017:50530418031037:2800:4B363FAC4A5D0DC371526A2FB90123E032F0DA0955A337109A8D9AD75370CD38.png)
在AGC頁面開通遠程配置並創建相應的配置項
具體配置步驟可以參考遠程配置官方文檔:
創建Xamarin工程
1、在Visual Studio中創建新項目
選擇移動應用(Xamarin.Forms),將應用的名稱等信息設置好後,創建項目
![cke_13820.png](https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtybbs/150/224/722/0900086000150224722.20210702192611.41236982574962743883162584826246:50530418031037:2800:D41A5FA0DDBC784E8B269E8AAD23C37BD0276A76AC0D61CFACB8339C407410BA.png)
2、將遠程配置的Xamarin包集成到新的項目中
有兩種方式集成Xamarin包
第一種是雲端方式集成,在目錄欄右擊選擇管理NuGet程式包
![cke_13821.png](https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtybbs/150/224/722/0900086000150224722.20210702192611.74625465740057804200370882187030:50530418031037:2800:0D07EF86670C70AB2FAE7E1642BA44638A4A315D163F05B62DB80B3B75D09A52.png)
在瀏覽選項中搜索Huawei.Agconnect.RemoteConfiguration,點擊安裝即可
![cke_13822.png](https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtybbs/150/224/722/0900086000150224722.20210702192611.50765369609555701449513651599184:50530418031037:2800:922FB70445900E36CBE61DFA7EF0FFA8D34A87B803B668A6A22B635A62331D7C.png)
第二種方式是本地集成NuGet包,首先需要將所有需要的NuGet包放入本地的一個文件夾中
![cke_13823.png](https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtybbs/150/224/722/0900086000150224722.20210702192611.97550906193085003558208436288657:50530418031037:2800:8131DC45A1095C4BEF3810F6B439B63AF9FD97F7E7ABAFAE32F25332CA02D048.png)
我們按照第一種的方式打開NuGet包管理器,點擊程式包源邊上的設置圖標,打開選項目錄
![cke_13824.png](https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtybbs/150/224/722/0900086000150224722.20210702192611.02226671569416093956649528131252:50530418031037:2800:9CC96B9C19B4ED60871C19B0B75612C341494DE0F4EC046A0AE93DC3BD9EAD68.png)
點擊綠色的加號添加新的包源,在源的地方輸入剛剛存放NuGet本地包的文件夾目錄即可。
![cke_13825.png](https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtybbs/150/224/722/0900086000150224722.20210702192611.64399581107511821084760909868935:50530418031037:2800:86652E1F7C24238BA7F8DAABC61A65618E5B48EC1D371CFBFCBC05E92C35C048.png)
3、添加 AGC 配置文件
AGC為開發者準備了一個存放所有應用相關信息的配置json文件,我們需要將這個文件集成到項目中以便後續調用介面時使用,我們的SDK會自動讀取裡面的內容,無需開發者調用時手動傳入了,具體步驟如下
3.1 從AGC管理臺中下載agconnect-services.json文件,將文件放入項目的Assets目錄下
![cke_13826.png](https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtybbs/150/224/722/0900086000150224722.20210702192611.69150927665909385726742773915272:50530418031037:2800:5AE2756429DA2917237EA8548DCF253BD1C89B0037FCFF6F6EE69AED4F3105A3.png)
3.2 在項目中創建一個新的類,HmsLazyInputStreams.cs,將如下代碼寫入進行json文件的內容讀取
using System;
using System.IO;
using Android.Util;
using Android.Content;
using Huawei.Agconnect.Config;
namespace XamarinHmsRemoteConfig
{
class HmsLazyInputStream : LazyInputStream
{
public HmsLazyInputStream(Context context) : base(context)
{
Get(context);
}
public override Stream Get(Context context)
{
try
{
return context.Assets.Open("agconnect-services.json");
}
catch (Exception e)
{
Log.Error(e.ToString(), "Can't open agconnect file");
return null;
}
}
}
}
3.3 再創建一個Content provider類,寫入如下代碼已讓讀取文件可以在啟動應用時進行,要註意,content provider中的包名需要與應用包名一致(包括項目中設置的包名以及在AGC管理臺中設置的包名)。
using System;
using Android.Content;
using Android.Database;
using Huawei.Agconnect.Config;
namespace XamarinHmsRemoteConfig
{
[ContentProvider(new string[] { "com.huawei.cordova.remoteconfig.XamarinCustomProvider" }, InitOrder = 99)]
public class XamarinCustomProvider : ContentProvider
{
public override int Delete(Android.Net.Uri uri, string selection, string[] selectionArgs)
{
throw new NotImplementedException();
}
public override string GetType(Android.Net.Uri uri)
{
throw new NotImplementedException();
}
public override Android.Net.Uri Insert(Android.Net.Uri uri, ContentValues values)
{
throw new NotImplementedException();
}
public override bool OnCreate()
{
AGConnectServicesConfig config = AGConnectServicesConfig.FromContext(Context);
config.OverlayWith(new HmsLazyInputStream(Context));
return false;
}
public override ICursor Query(Android.Net.Uri uri, string[] projection, string selection, string[] selectionArgs, string sortOrder)
{
throw new NotImplementedException();
}
public override int Update(Android.Net.Uri uri, ContentValues values, string selection, string[] selectionArgs)
{
throw new NotImplementedException();
}
}
}
3.4 設置包名
右擊項目找到屬性選項,在Android清單頁簽找到程式包名稱,設置應用的包名。
![cke_13827.png](https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtybbs/150/224/722/0900086000150224722.20210702192611.92374078051370323800056578246981:50530418031037:2800:3E239FF5D4FC966666D1009D2CB002DBDD375BD8F3A295A3F34AC6FB59ED9B41.png)
4、添加本地預設配置
遠程配置支持開發者在本地配置一個預設值。這種配置有兩種方式,
第一種是通過xml文件設置相關配置,我們可以在Resource文件夾下的Xml文件夾創建一個xml文件,存放配置項和預設值
![cke_13828.png](https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtybbs/150/224/722/0900086000150224722.20210702192611.41757745988050401224138695319628:50530418031037:2800:C626795CFCC61F02135F31C227ACA661635827C96F1E48C548D038111B4F4187.png)
在代碼中調用ApplyDefault方法讀取相應的xml文件即可
AGConnectConfig.Instance.ApplyDefault(Resource.Xml.RemoteConfig);
第二種方式實在代碼中動態的設置預設配置,示例如下:
IDictionary<string, Java.Lang.Object> ConfigVariables = new Dictionary<string, Java.Lang.Object>();
ConfigVariables.Add("value1", "Default");
AGConnectConfig.Instance.ApplyDefault(ConfigVariables);
5、Fetch
Fetch功能是遠程配置最核心的功能,fetch介面可以從雲端將最新的配置值下載到本地來進行實時配置。介面有一個參數,代表著介面從雲端獲取值的間隔,如果不傳值,那麼我們就會預設為12小時。
AGConnectConfig.Instance.Fetch(fetchInterval).AddOnSuccessListener(new TaskListener(this)).AddOnFailureListener(new TaskListener(this));
6、MergedAll
其餘的介面都與Android版本一致,但是有一個介面與Android版本名稱上有些許不同,就是MergedAll方法。這個方法在Android上名稱為getMergedAll,作用是返回預設值和雲端值合併後的所有值。
AGConnectConfig.Instance.MergedAll;
以上就是快速接入Xamarin版遠程配置的全部流程,隨著越來越多的服務支持Xamarin,我也會給大家帶來更多的接入教程。