1. 程式人生 > 其它 >如何在 Xamarin 中快速整合 Android 版遠端配置

如何在 Xamarin 中快速整合 Android 版遠端配置

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開發了。

在AGC頁面開通遠端配置並建立相應的配置項

具體配置步驟可以參考遠端配置官方文件:

https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-remoteconfig-android-cloudconfig-0000001056587179

建立Xamarin工程

1、在Visual Studio中建立新專案

選擇移動應用(Xamarin.Forms),將應用的名稱等資訊設定好後,建立專案

2、將遠端配置的Xamarin包整合到新的專案中

有兩種方式整合Xamarin包

第一種是雲端方式整合,在目錄欄右擊選擇管理NuGet程式包

在瀏覽選項中搜索Huawei.Agconnect.RemoteConfiguration,點選安裝即可

第二種方式是本地整合NuGet包,首先需要將所有需要的NuGet包放入本地的一個資料夾中

我們按照第一種的方式開啟NuGet包管理器,點選程式包源邊上的設定圖示,開啟選項目錄

點選綠色的加號新增新的包源,在源的地方輸入剛剛存放NuGet本地包的資料夾目錄即可。

3、新增 AGC 配置檔案

AGC為開發者準備了一個存放所有應用相關資訊的配置json檔案,我們需要將這個檔案整合到專案中以便後續呼叫介面時使用,我們的SDK會自動讀取裡面的內容,無需開發者呼叫時手動傳入了,具體步驟如下

3.1 從AGC管理臺中下載agconnect-services.json檔案,將檔案放入專案的Assets目錄下

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清單頁籤找到程式包名稱,設定應用的包名。

4、新增本地預設配置

遠端配置支援開發者在本地配置一個預設值。這種配置有兩種方式,

第一種是通過xml檔案設定相關配置,我們可以在Resource資料夾下的Xml資料夾建立一個xml檔案,存放配置項和預設值

在程式碼中呼叫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,我也會給大家帶來更多的接入教程。