【Android】第4章(1) Android項目的基本結構

来源:http://www.cnblogs.com/rainmj/archive/2016/02/06/5184064.html
-Advertisement-
Play Games

分類:C#、Android、VS2015;創建日期:2016-02-06 第4章 UI設計基礎 第3章雖然通過百度地圖應用展示了你可能感興趣的內容,但是,如果你是一個初學者,一開始就看懂和理解代碼可能會非常費勁。為瞭解決此問題,從這一章開始,本模塊將從最基本的內容講起,帶你逐步進入用C#進行Andr


分類:C#、Android、VS2015;創建日期:2016-02-06

第4章 UI設計基礎

第3章雖然通過百度地圖應用展示了你可能感興趣的內容,但是,如果你是一個初學者,一開始就看懂和理解代碼可能會非常費勁。為瞭解決此問題,從這一章開始,本模塊將從最基本的內容講起,帶你逐步進入用C#進行Android應用開發的樂園。

4.1 Android項目的基本結構

要用C#開發Android應用程式,首先需要對項目的基本結構有一個感性認識。如下圖所示:

image

1、AndroidApp入口

Android應用程式使用的是單一入口,源程式中並不能一眼看出程式從哪開始運行,當應用程式載入到記憶體中時,Android操作系統會自動從內部自定義的入口處開始運行該應用程式。這種獨特的架構可讓程式員設計的代碼直接和Android操作系統交互,但其缺點也很明顯:即使一個非常簡單的程式,也會變得很複雜。

為了方便找到程式入口點,當新建一個Android項目時,預設情況下,在MainActivity.cs文件的特性聲明中通過“MainLauncher = true”表示程式從這個Activity開始執行:

[Activity(Label = "myDemos", MainLauncher = true)]

public class MainActivity : Activity

{

     //……

}

註意MainActivity.cs的首碼,一般表示它控制的是佈局文件Main.axml(但不是必須這樣做)。比如,如果把Main.axml改為First.axml,那麼它對應的Activity類最好命名為FirstActivity.cs,換言之,首碼只是為了方便查看它和界面的對應關係而已,這僅僅是一種命名習慣,而不是對文件命名的必然要求。

實際上,你可以把“MainLauncher = true”放到任何一個繼承自Activity的類中。總之,你將其放到哪個類的特性聲明中,程式就從哪個Activity開始執行。

2、組件(Components)

在Android應用程式中,每個組件都是一個獨立的模塊,但並不是所有組件都是用戶進入程式的真實入口,其中一些要依賴於其它組件。

Android內置了四種不同的應用程式組件:Activity、Service、Content Provider和Broadcast recevicer。除此之外,還可以自定義組件並將其保存到項目的Components文件夾下。

在後面的章節中,還會專門介紹這些內容,這裡你只需要記住真正掌握Android應用開發技術,必須理解這些組件的含義和具體使用場合即可。

3、附件(Assets)

Assets文件夾包含了運行App需要的所有原始文件。該文件夾下可保存任意類型的文件:text、xml、fonts、music、video、……等。

下麵的代碼演示瞭如何讀取Assets下的.txt文件:

using Android.App;
using Android.OS;
using Android.Widget;
using System.IO;
namespace MyTestProj
{
    [Activity(Label = "Activity1")]
    public class Activity1 : Activity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            base.OnCreate(savedInstanceState);
            var textView1 = new TextView(this);
            string content;
            using (StreamReader sr = new StreamReader(Assets.Open("readme.txt")))
            {
                content = sr.ReadToEnd();
            }
            textView1.Text = content;
            SetContentView(textView1);
        }
    }
}

 

4、資源(Resources)

一個Android App由代碼、資源文件以及自定義的組件構成。

資源文件保存到Resources文件夾下,包括圖片,音頻文件,以及任何與程式可見內容相關的東西。例如,自定義的動畫、菜單、風格、顏色以及由.axml文件(帶設計界面)或.xml文件(不帶設計界面)描述的用戶交互頁面的佈局等。

(1)基本概念

Resources文件夾下保存的資源不包括代碼文件,而是指隨項目一起編譯和打包的除了代碼文件之外的其他文件,如聲音、視頻、圖像、字元串、佈局文件等。

image

將資源單獨組織的優點是:代碼分離,這樣就可以適用於多平臺,同時也能在編譯時進行檢查,併在編譯通過後為鍵入C#代碼提供智能提示。

使用資源可使修改程式的特征變得很容易,同時不必修改代碼。而且通過可選擇的資源集合,能為不同的設備配置優化程式(例如不同的國家語言和不同的屏幕尺寸等)。

系統搭建工具會自動為Android項目使用的每一個資源都定義一個唯一的整型ID,程式通過ID獲得代碼中的資源或者.xml或.axml中的其它資源的引用。例如,程式包含了一個名叫logo.png (保存在 Resources/drawable/ 目錄下)的圖片文件,工具就會生成一個叫做Resource.drawable.logo的資源ID,程式中可以用這個ID引用該圖片。

分隔資源的一個重要能力是為不同的設備配置提供可選擇的資源文件。例如,在XML中定義UI字元串,就可以把這些字元串翻譯成其它的國家語言,併在分隔的文件中分別保存。然後,根據追加到資源目錄名中的國家語言修飾符(例如res/values-fr/是法語字元串的值)和用戶對國家語言的設置,Android系統就會提供適當的國家語言字元串到UI中。

Android支持很多不同的修飾符以支持可選的資源。這些修飾符都是被加入到資源目錄名中的簡短字元串。這樣定義是為了定義設備的特定配置,以保證這個目錄下的資源可能會被使用到。

(2)常用資源

項目中常用的資源文件夾如下。

(a)圖片資源

Drawable:保存通用的圖片文件。

drawable-ldpi:保存低解析度手機專用的圖片文件。

drawable-mdpi:保存中等解析度手機專用的圖片文件。

drawable-hdpi:保存高解析度手機專用的圖片文件。

drawable-xdpi:保存超高解析度手機專用的圖片文件。

drawable-xxdpi:保存超超高解析度手機專用的圖片文件。

(b)佈局文件

layout文件夾:用於保存所有界面文件(包括帶設計界面的.axml文件和不帶設計界面的.xml文件),如果你高興,可隨時將.xml更換為.axml,反之亦然。

Main.axml:預設的App主窗體佈局文件,有Design和Source兩種模式。

(c)字元串資源文件

Values文件夾:存放用字元串描述的資源文件信息(strings、integers、colors等),這些都是文本資源,在文件夾中有一些約定的文件名稱。(具體內容待以後詳解)

5、預設的資源類型

下表列出了預設的所有資源類型及其描述:

image

下麵用中文介紹一下這些文件夾的含義(用到相關文件時,在項目的Resources文件夾下創建對應的子文件夾即可)。

animator

描述屬性動畫的XML文件。“屬性動畫”是在API level 11 (Android 3.0)開始提供的,這是描述動畫最強大而靈活的方式。

註:Android的屬性動畫和WPF的屬性動畫的用法非常相似,只要學會其中一種,很快就會另一種的用法。

如果你對屬性動畫不熟悉,可參考對“屬性動畫”介紹比較詳細的C# 系列教材:“十二五國家級規劃教材《C#程式設計及應用教程》(第3版,馬駿主編,人民郵電出版社)”,該書對WPF提供的屬性動畫的用法介紹的非常詳細,也有對應的完整示例,很值得初學者閱讀。

anim

描述補間動畫(tween animations)的XML文件。補間動畫是一系列動畫指令,用於將View對象轉換為動畫。由於旋轉圖像或文本會導致占用的容量快速膨脹,因此補間動畫僅限於對View對象進行處理。

color

描述顏色狀態列表的XML文件。要理解顏色狀態列表,請考慮一個 UI 部件(如按鈕),它可以有不同的狀態(按下、禁用等),要讓按鈕的隨著狀態的變化而引起顏色的改變,就需要定義這樣一個顏色狀態列列表,用它來描述這些顏色狀態的變化。

drawable

Drawable resources(可繪製資源)是編譯到應用程式中的圖像資源,這些資源可通過API去調用或引用其他的XML資源。例如,點陣圖文件 (.png、.gif、.jpg)、可調整大小的9-Patch格式的圖像、在XML文件中定義的狀態列表、通用的形狀定義、……等。

說明:9-Patch圖像(*.9.png)的含義及用法見本博客第5章的圖像示例。

layout

XML文件,用於描述自定義佈局。

如果希望某個文件包含預覽界面,將擴展名“.xml”換名為“.axml”即可,反之亦然。

menu

XML文件,用於描述【應用程式選項】菜單、上下文菜單、子菜單等。

raw

原始的二進位形式保存的任意文件。該文件夾下的這些文件都會被編譯到二進位格式的 Android 應用程式中。

values

XML文件,該文件夾下的這些文件中包含的都是一個或多個簡單的字元串類型的值或列表。比如在一個XML文件中用字元串列表定義一系列顏色等。

xml

XML文件,其功能類似於.NET的XML文件配置。這些配置都可以由應用程式在運行時讀取。

6、引用資源的方式

當將資源文件添加到項目中時,管道會自動將該資源描述添加到資源中,並自動生成對應的類(保存在Resource.designer.cs文件中),自動生成的類會為每個資源自動分配一個唯一的ID。

有兩種存取和管理資源的方式:

  • 用C#代碼引用資源。
  • 用xml或者axml引用資源。
方式1--在C#代碼中引用資源

格式:@[<PackageName>.]Resource.<ResourceType>.<ResourceName>

例如:

SetContentView(Resource.Layout.Main);
EditText phoneNumberText = FindViewById<EditText>(Resource.Id.PhoneNumberText);
方式2--在xml(或者axml)中引用資源

格式:@[<PackageName>:]<ResourceType>/<ResourceName>

例如(見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="fill_parent" 
        android:layout_height="fill_parent">
    <ImageView android:id="@+id/myImage" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/flag" />
</LinearLayout>

7、備用資源(Alternate Resources)

備用資源也是保存在Resources文件夾下,子文件夾的格式為:

<ResourceType>-<Qualifier>

即:<資源類型>-<限定標識符>

例如:drawable-hdpi

當有多個限定符時,各限定符之間用短劃線分隔。

限定符必須按下表列出的順序出現(該表實際是按優先順序從高到低排列):

image

 

 

 

 

image

image

例如,v11的目標是API level 11 (Android 3.0)設備。

下麵是截圖表格中各限定符的含義。

MCC、MNC

手機的國家碼(MCC):手機的SIM卡提供商。

移動網路碼(MNC):手機連接到的網路供應商。

儘管本地化目標可以使用用於移動設備的國家碼,但是仍建議使用資源限定符來限定它。例如:美國(U.S)的資源限定符是 mcc310-mnc026

MCC的完整編碼詳見下麵的網站:http://mcclist.com/

Language

兩字母的ISO 639-1國家語言編碼以及可選的兩字母的ISO-3166-alpha-2區域編碼。 如果同時提供這兩個限定符,用“-r”分隔。

例如:對於French-Canadian locales,使用的資源限定符為:fr-rCA

完整的語言和區域編碼見“Codes for the Representation of Names Of Languages and Country names and code elements”。

Smallest Width

限定屏幕執行時使用的最小寬度。例如:sw320dp 表示目標設備的高和寬最小說320dp。

Available Width、Available Height

Available Width:屏幕最小寬度,格式:w<N>dp,其中N表示與像素無關的寬度。當用戶旋轉屏幕時會改變該值。例如:w720dp 表示目標設備的最小寬度為720dp

Available Height:屏幕最小高度,格式:h<N>dp,其中N表示與像素無關的寬度。當用戶旋轉屏幕時會改變該值。例如:h720dp 表示目標設備的最小高度為720dp

Screen aspect

指屏幕的寬高比,而不是屏幕的放置順序(縱向和橫向)。其值有兩個:long(表示寬屏幕)、notlong(表示非寬屏幕)。

Screen Orientation

屏幕放置順序,Portrait(縱向放置)或者landscape(橫向放置)。該值可在應用程式的生命周期中改變。取值有:port、land

Dock mode

設備在 car dock或者 desk dock 中。API 8(Android 2.2.x)開始提供。取值有:car、desk

Night mode

應用程式是否在夜間模式下運行。此限定可給開發者在應用程式生命周期中提供優化選項。API level 8 (Android 2.2.x)開始提供。

可能的值:night、notnight

Screen pixel density (dpi)

物理屏幕的像素數,通常用dpi表示。可能的值有:

ldpi – 低解析度屏幕

mdpi – 中等解析度屏幕

hdpi – 高解析度屏幕

xhdpi – 超高解析度屏幕

nodpi – 資源不可縮放

tvdpi – 在mdpi和hdpi之間

Touchscreen type

限定設備是哪種觸摸屏。可能的值有:notouch (無觸摸功能)、stylus(適用於手寫筆的電阻式觸摸屏)、finger(手指觸摸)

Keyboard availability

限定哪種鍵盤可用。可在應用程式的生命周期中改變它。可能的值有:

keysexposed – 該設備有可用的鍵盤。如果軟鍵盤不可用,則當【硬體鍵盤】設置打開時僅使用硬鍵盤。

keyshidden – 設備沒有硬鍵盤,而且軟鍵盤也隱藏。即:軟體沒有可以用的鍵盤。

keyssoft –設備有可用的軟鍵盤。

Primary text input method

限定哪種硬體鍵盤可用於輸入。可能的值有:

nokeys – 無可用的用於輸入文本信息的硬體鍵盤。

qwerty – 有可用的qwerty鍵盤。

12key – 有可用的12-鍵(12-key)硬體鍵盤。

Navigation key availability

用於當“5-way”或者“d-pad (directional-pad)”導航鍵可用的情況。可在應用程式生命周期中改變。可能的值有:

navexposed – 用戶可以使用導航鍵。

navhidden – 導航鍵不可用。

Primary non-touch navigation method

設備提供的可用導航鍵。可能的值有:

nonav – 僅能通過觸摸屏幕導航。

dpad – 有可用的“d-pad (directional-pad)”導航。

trackball – 設備有一個“trackball”用於導航。

wheel - (不常見)有一個或多個可用的定向輪

Platform version (API level)

設備支持(supported)的API級別。格式:v<N>

下圖列出了Android的判斷規則:

image

8、許可權設置與管理(AndroidManifest.xml)

清單(Manifest)可以定義應用程式及其組件的結構和元數據。

AndroidManifest.xml文件包含在每個安卓應用程式中,該文件向系統描述了本程式所包括的組件、所實現的功能、所能處理的數據、要請求的資源等。

該文件的功能類似於網站中的Web.conig文件。

在AndroidManifest.xml文件中添加或刪除許可權時,最常用的是通過VS2015主菜單下的項目屬性來設置與許可權(Permissions)相關的屬性:

image

 

設置後,它會自動更新項目中Properties文件夾下的AndroidManifest.xml文件。如果項目的Properties文件夾下不存在該文件,系統會自動創建它。

在Android系統能夠啟動一個程式組件之前, 系統必須通過讀取程式的AndroidManifest.xml文件來知道這個組件是否存在。因此對於Java開發者要求程式必須在這個文件中聲明它所有的組件。

除了聲明程式組件外,這個配置文件還做一些其它的工作,例如:

  • 確定程式需要哪些用戶許可權,例如網路訪問或者讀取用戶的聯繫人。
  • 聲明程式需要的最小的 API Level 這個要參照程式都使用了哪些API。
  • 聲明程式使用或要求的硬體和軟體特性,例如相機,藍牙服務,或者多點觸屏。
  • 程式需要鏈接的API類庫(除Android framework API之外的類庫),例如 Google Map類庫。

但是,如果用C#來開發,“直接在AndroidManifest.xml文件中聲明”並不是必需的,因為用帶有智能提示的特性聲明來聲明它,然後讓編譯器自動生成合適的代碼添加到這個文件中更方便。

當然,如果你希望直接在該文件中添加聲明,也可以這樣做。換言之,C#開發給你提供了多種聲明清單的方式,你只需要按自己的習慣去選擇一種合適的方式即可。這些方式有:

  • 在AndroidManifest.xml文件中直接添加聲明。
  • 通過項目的屬性視窗選擇,然後讓編譯器自動將合適的代碼添加到AndroidManifest.xml文件中。
  • 在AssemblyInfo.cs文件中聲明,然後讓編譯器自動自動將合適的代碼添加到AndroidManifest.xml文件中。
  • 通過在類上方添加特性聲明來聲明,然後讓編譯器自動自動將合適的代碼添加到AndroidManifest.xml文件中。

通過這些方式,你就擁有了最大的靈活性,同時也是代碼看起來簡潔而直觀,

9、CPU架構(CPU Architectures)

VS2015調試模式(Debug)使用的是可適應多種CPU架構的模式,發佈模式(Release)用於選擇某種具體型號的手機,然後部署。

(1)如何指定支持的CPU架構

在調試狀態(Debug)下,下麵的兩個選項預設是選中的:

image

這兩個選項選中後。可防止調試時指定某種具體的CPU架構(CPU Architectures),即在下麵的配置中,下麵這些選項是不可更改的:

image

 

通常情況下,實際發佈應用程式時需要明確配置使用的CPU體繫結構或架構。當更改為發佈(Release)模式時,它會自動不勾選“Use Shared Runtime”和“Use Fast Delployment…”覆選框,這樣一來,上圖中的選項就可選了。

Xamarin.Android提供下麵的架構:

  • armeabi – 基於ARM的CPU系列,提供了不低於ARMv5TE結構的指令集。註意armeabi不是線程安全的而且不能用於多CPU的設備。
  • armeabi-v7a – 這種CPU支持硬體浮點運算和多CPU(SMP)設備。註意armeabi-v7a的機器碼無法在ARMv5設備上運行。
  • arm64-v8a –這是一種基於64-bit ARMv8架構的CPU。
  • x86 – 這種CPU提供x86 (or IA-32)指令集。該指令集等價於奔騰Pro(Pentium Pro),包括MMX, SSE, SSE2,以及SSE3指令集。
  • x86_64 CPUs提供64-bit的x86指令集。

在Release模式下,Xamarin.Android預設指定的是armeabi-v7a,其性能比armeabi高。如果發佈目標是64-bit ARM平臺(例如Nexus 9),此時需要選擇arm64-v8a。如果發佈到x86設備,就選擇x86,如果發佈目標是64-bit的CPU架構,就選擇x86_64。

註意:由於在64位架構上可運行32位程式(例如Nexs 9就是64-bit ARM設備),因此,發佈到64位手機設備上的時候,不是必須選擇arm64-v8a或x86_64,仍然可以繼續選擇32位架構,這樣做的優點是可避免應用程式占用過多的記憶體。

(2)多平臺目標(Targeting Multiple Platforms)

面向多平臺的優點是可同時調試多種CPU,缺點是這會導致.apk文件很大,如果希望減少.apk文件的大小,發佈時只選擇一個平臺就行了。

註意:雖然在Xamarin.Android 5.1.x或更高版本中也可以體驗64位的功能,但實際發佈時並不使用它。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 隨著日常的使用,系統提供的cell已經不能滿足開發的需要,因為系統提供的是單一的,所以 這就引來了自定義cell的出現,可以根據 自己的需要來佈局各個控制項所處的位置。不同位置顯示不同的控制項。 創建一個類,繼承於UITableCell. 自定義cell,簡單的來說可以分為三步 1.將所有cell要顯示
  • UITableView表視圖,是實用的數據展示的基礎控制項,是繼承於UIScrollView,所以也可以滾動。但不同於UIScrollView,UITableView只可以上下滾動,而不能左右滾動。 因為是數據展示,必然少不了數據的存在,嗯,使用plist文件來獲取想要的數據。通過模型來獲取。 說到這
  • 分類:C#、Android、VS2015; 創建日期:2016-02-10 一、簡介 Android應用程式中的佈局控制項都是容器控制項,用於控制子元素的排列和放置方式。Android提供的佈局控制項有: LinearLayout:線性佈局。 GridLayout:網格佈局。 TableLayout:表布
  • 一、屬性傳值 對於屬性傳值而言,相對於其它的三種 方法來說,是最基礎,最簡單的一種 方法,但,屬性傳值 有很大的局限性,因為是適用於第一個界面向第二個界面傳 值,第二個向第三個界面傳值等等。N界面向N + 1界面傳值。而在此基礎上,必須知道跳轉界面的明確位置及所要傳的值的具體類型。在第二個界面中聲明
  • 一般來說scrollView與UIPageControl都是結合使用,因為在使用滾動視圖的時候 ,使用UIPageControl,用戶可以 清楚 的明白顯示的內容有多少頁,如果 沒有的話,總不能讓用戶一個個的去數。用戶體驗效果不理想。 一般來說,在滑動scrollView的時候,UIPageCont
  • 我第一次知道FlatBuffers是因為Facebook寫的這篇Android的技術博客文章。它主要介紹了FlatBuffers對比JSON的優勢,以及Facebook Android App應用了FlatBuffers後,衍生的數據和界面更新的工作流轉模式。建議去讀一讀,作者還是一個中國人哦。 下
  • 關於CAShapeLayer 內容大綱: CAShapeLayer簡介 貝塞爾曲線與CAShapeLayer的關係 strokeStart和strokeEnd 動畫 用CAShapeLayer實現進度條效果,以及更加複雜的效果 1、CAShapeLayer簡介 1、CAShapeLayer繼承自CA
  • 分類:C#、Android、VS2015; 創建日期:2016-02-07 一、簡介 功能描述:用戶單擊按鈕彈出菜單。當用戶選擇一個菜單項,會觸發MenuItemClick事件並讓彈出的菜單消失;如果用戶在菜單外單擊,則直接消失彈出的菜單。當菜單消失時,會引發DismissEvent事件(利用此事件
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...