主頁 > 移動端開發 > 支持 PC 、Web 和 Android 的 Compose Multiplatform 進入 Alpha 版本

支持 PC 、Web 和 Android 的 Compose Multiplatform 進入 Alpha 版本

2021-08-15 08:01:20 移動端開發

Compose Multiplatform 的發布標志著使用 Kotlin 開發統一的 UI 支持又邁進了新一步!

基于 Google 發布的 Jetpack Compose Android 1.0 穩定版 的前提 :

  • Compose for Desktop 和 Compose for Web 已經升級為 Alpha 版本,它們的版本控制現在在 Compose Multiplatform 下保持一致,從而可以使用相同的 artifacts 構建 Android、Desktop 和 Web UI,

  • IDE 管理應用 JetBrains Toolbox App 已完成遷移到 Compose for Desktop,

  • IntelliJ IDEA 和 Android Studio 的新插件 通過@Preview注釋可以啟用 Compose for Desktop 的組件預覽,

  • Compose for Desktop 現在默認使用可組合 API Window ,提供對自適應視窗大小、統一影像資源的新支持,以及對 ARM64 上 Linux 的新平臺支持,允許在 Raspberry Pi 等目標上運行它,

  • Compose for Web 進一步擴展了 DOM 和 CSS API,

另外在 The Compose Story 中 概述了 Compose 的路徑,并分享了更多宣告式多平臺用戶界面的資訊!

統一 Desktop、Web 和 Android UI 開發

Jetpack Compose 是一個為 Android 構建原生用戶界面的回應式開發 UI 框架,JetBrains 在 Google 的 Jetpack Compose 的基礎上將 Compose 框架拓展到更多新的平臺,

借助 Compose Multiplatform,開發者可以使用和 Android Jetpack Compose 相同的 API 開發 Desktop 和 Web 構建用戶界面,

使用 Kotlin Multiplatform 提供的機制,現在可以針對同一專案中的以下任意組合:

  • Android (Jetpack Compose)
  • Desktop
  • Web

以前 Compose for Desktop 和 Compose for Web 使用不同的 artifacts ,而現在開始它們將統一在一個 Gradle 插件和組件下,這意味著基于 Compose 開發 Android、Desktop 和 Web 用戶界面會更容易,

憑借 Alpha 版本的更新,Compose Multiplatform 提供的 API 已經很接近其最終形態,我們將全力投入 Compose 的開發支持,并期望在 2021 年內能達到 1.0 版本,更多詳細資訊:了解有關 COMPOSE 多平臺的更多資訊

Compose in Production:JetBrains Toolbox 應用

在 JetBrains 現在一些生產應用已經開始采用 Compose,首先是 JetBrains Toolbox App,它是 JetBrains IDE 的管理應用程式,每月活躍用戶超過 800,000,

image.png

image.png

在它們的最新版本中,該團隊已將應用程式的實作完全轉換為 Compose for Desktop,在從基于 Electron 的 UI 遷移期間,團隊注意到了 Compose 的許多優勢:

  • 記憶體消耗顯著減少,特別是當應用程式在后臺運行時
  • 安裝程式大小減少了大約 50%
  • 應用整體渲染性能顯著提升

JetBrains Toolbox 團隊負責人 Victor Kropp 也在帖子中分享了他對 Compose for Desktop 的看法:

Compose for Desktop 雖然仍處于早期階段,但已被證實了 Toolbox App 的絕佳選擇,在開發框架同事的支持下,幾乎可以在短時間內重寫整個 UI,這使我們能夠統一開發體驗,因此從業務邏輯到 UI,從應用到服務器,Toolbox 現在 100% 是 Kotlin,

用于 Compose Multiplatform 的新 IntelliJ IDEA 和 Android Studio 插件

在此版本中還發布了一個新的 IDE 插件來支持開發作業:用于 IntelliJ IDEA 和 Android Studio 的 Compose Multiplatform 插件,它與框架的新版本一起發布,并提供額外的功能來幫助用戶界面的開發作業

第一個版本包括了一項期待已久的功能:能夠直接在 IDE 中預覽 Compose for Desktop 和 Android 組件,甚至無需啟動應用程式

要顯示@Composable不帶引數的函式預覽,可以將@Preview注釋添加到其定義中,這時候會添加一個小的裝訂線圖示,可以使用它來切換組件的預覽窗格:

image.png

image.png

image.png

image.png

這個新的預覽版可以幫助開發者縮短開發周期,并更輕松地將想法轉化為基于 Compose 的真實設計和布局,

要查找并安裝新插件,請在插件市場中搜索“Compose Multiplatform IDE Support”,或點擊下方直接打開插件頁面:安裝 COMPOSE 多平臺插件

Compose for Desktop 的新增功能

除了將 Compose for Desktop 升級為 Alpha 的一大步之外,在此版本中還改進了其 API 并增加了對新平臺的支持,

默認情況下可組合的視窗 API

在里程碑4桌面版中,我們推出了一個實驗組API:WindowMenuBarTray,這些新 API 都使用 @Composable 與應用程式中的其他組件相同的狀態管理、行為和條件呈現概念,

在此版本中,這些可組合版本現在是管理視窗、選單欄和托盤圖示的默認方式,取代了舊的視窗 API,

如果還沒有嘗試過這些新 API,或者只是想了解有關它們提供的行為和功能的更多資訊,可以參考更新的 Compose for Desktop 教程,了解視窗和托盤管理,

自適應視窗大小

有時我們想將某些內容作為一個整體顯示,而在不事先知道將顯示的內容的情況下,這意味著我們不知道它的最佳視窗尺寸,

為了更輕松地開發這些 UI 場景,我們引入了自適應視窗大小功能,通過將視窗的一個或兩個維度設定WindowSizeDp.Unspecified,Compose for Desktop 將自動調整該維度中視窗的初始大小以適應其內容:

fun main() = application {
   val state = rememberWindowState(width = Dp.Unspecified, height = Dp.Unspecified) //automatic size
   Window(
       onCloseRequest = ::exitApplication,
       state = state,
       title = "Adaptive",
       resizable = false
   ) {
       Column(Modifier.background(Color(0xFFEEEEEE))) {
           Row {
               Text("label 1", Modifier.size(100.dp, 100.dp).padding(10.dp).background(Color.White))
               Text("label 2", Modifier.size(150.dp, 200.dp).padding(5.dp).background(Color.White))
               Text("label 3", Modifier.size(200.dp, 300.dp).padding(25.dp).background(Color.White))
           }
       }
   }
}
復制代碼

image.png

image.png

連同洗掉視窗(通過undecorated = true 的應用程式Window定義),我們相信這種創建動態大小視窗的新方法,為各種形狀和大小的用戶界面新增了額外的可能性,

可組合視窗選單的附加功能

桌面應用通常帶有豐富而復雜的視窗選單,在此版本中還添加了允許創建豐富選單的其他 API,

它們可以被結構化,通過圖示、快捷方式和助記符來豐富,并集成廣泛使用的復選框和單選串列(單選按鈕)的邏輯:

@OptIn(ExperimentalComposeUiApi::class)
@Composable
private fun MenuBarScope.FileMenu() = Menu("Settings", mnemonic = 'S') {
   Item(
       "Reset",
       mnemonic = 'R',
       shortcut = KeyShortcut(Key.R, ctrl = true),
       onClick = { println("Reset") }
   )
   CheckboxItem(
       "Advanced settings",
       mnemonic = 'A',
       checked = isAdvancedSettings,
       onCheckedChange = { isAdvancedSettings = !isAdvancedSettings }
   )
   if (isAdvancedSettings) {
       Menu("Theme") {
           RadioButtonItem(
               "Light",
               mnemonic = 'L',
               icon = ColorCircle(Color.LightGray),
               selected = theme == Theme.Light,
               onClick = { theme = Theme.Light }
           )
           RadioButtonItem(
               "Dark",
               mnemonic = 'D',
               icon = ColorCircle(Color.DarkGray),
               selected = theme == Theme.Dark,
               onClick = { theme = Theme.Dark }
           )
       }
   }
}
復制代碼

image.png

image.png

支持背景關系選單

Compose for Desktop Alpha 支持默認和自定義背景關系選單,可以通過單擊滑鼠右鍵觸發,

對于可選擇的文本和文本欄位,該框架提供了一組默認的背景關系選單項,讓用戶可以復制、粘貼、剪切和選擇,

image.png

image.png

@OptIn(ExperimentalComposeUiApi::class, androidx.compose.foundation.ExperimentalFoundationApi::class)
fun main() = singleWindowApplication(title = "Context menu") {
   DesktopMaterialTheme { //it is mandatory for Context Menu
       val text = remember {mutableStateOf("Hello!")}
       ContextMenuDataProvider(
           items = {
               listOf(ContextMenuItem("Clear") { text.value = "" })
           }
       ) {
               TextField(
                   value = text.value,
                   onValueChange = { text.value = it },
                   label = { Text(text = "Input") }
               )
       }
   }
}
復制代碼

image.png

image.png

游標更改行為和指標圖示 API

在此版本的 Compose for Desktop 開始,當滑鼠懸停在文本欄位或可選文本上時,滑鼠指標現在會自動變成文本選擇游標,表示可以進行文本選擇,使應用感覺更加貼近原生,

對于自己的組件,還可以使用新添加的 pointerIcon 修飾符來調整滑鼠指標的行為,可以在將滑鼠懸停在特定組件上時更改指標,

@OptIn(ExperimentalComposeUiApi::class)
@Composable
fun ApplicationScope.pointerIcons() {
   Window(onCloseRequest = ::exitApplication, title = "Pointer icons") {
           Text(
               modifier = Modifier.pointerIcon(PointerIcon.Hand),
               text = "Hand icon!"
           )
   }
}
復制代碼

滑鼠可點擊修改器

為了更方便處理在滑鼠單擊時單擊或按下的滑鼠按鈕和鍵盤修飾鍵,這里引入了一個帶有.mouseClickable 修飾符的新 API ,

將此修飾符添加到組件就可以允許指定接收 MouseClickScope 的回呼,它提供了有關事件的完整資訊:

@ExperimentalDesktopApi
@Composable
fun ApplicationScope.mouseClickable() {
   Window(onCloseRequest = ::exitApplication, title = "mouseClickable") {
       Box {
           var clickableText by remember { mutableStateOf("Click me!") }

           Text(
               modifier = Modifier.mouseClickable(
                   onClick = {
                       if (buttons.isPrimaryPressed && keyboardModifiers.isShiftPressed)  {
                           clickableText = "Shift + left-mouse click!"
                       } else {
                           clickableText = "Wrong combination, try again!"
                       }
                   }
               ),
               text = clickableText
           )

       }
   }
}
復制代碼

請注意,這個 API 還不是最終版本,目前正在繼續開發,將來可能會改變它,

統一的影像資源和 Painter

在進一步穩定 Compose for Desktop 的 API 的程序中,現在可以使用統一的 painterResource,而不是將圖形資源分成 svgResourceimageResourcevectorXmlResource

@Composable
fun ApplicationScope.painterResource() {
   Window(onCloseRequest = ::exitApplication, title = "Image resources") {
       Column {
           Image(
               painter = painterResource("sample.svg"), // Vector
               contentDescription = "Sample",
               modifier = Modifier.fillMaxSize()
           )
           Image(
               painter = painterResource("sample.xml"), // Vector
               contentDescription = "Sample",
               modifier = Modifier.fillMaxSize()
           )
           Image(
               painter = painterResource("sample.png"), // ImageBitmap
               contentDescription = "Sample",
               modifier = Modifier.fillMaxSize()
           )
       }
   }
}
復制代碼

我們還將 window icon 屬性從 java.awt.Image 更改為androidx.compose.ui.graphics.painter.Painter,因此除了未來的光柵圖形之外,還可以使用基于矢量的圖示:

fun vectorWindowIcon() {
   application {
       var icon = painterResource("sample.svg") //vector icon
       Window(onCloseRequest = ::exitApplication, icon = icon) {
           Text("Hello world!")
       }
   }
}
復制代碼

支持 ARM64 上的 Linux

在此版本中,除了現有的 x86-64 支持之外,Compose for Desktop 還增加了對運行在基于 ARM64 處理器的設備上的 Linux 的支持,

總的來說,現在可以使用 Compose for Desktop 為以下平臺撰寫 UI:

  • x64 和 arm64 上的 macOS
  • x64 和 arm64 上的 Linux
  • x64 上的 Windows

Compose for Web 的新增功能

除了 Compose for Desktop,Compose for Web 也已升級為 Alpha 版本,兩者都已經調整了版本控制方案和發布周期,并通過他們的 DSL 擴展了可用的功能,用于樣式和事件管理,

擴展的 CSS API

我們將繼續改進和完善 API,以通過 CSS 指定樣式規則,這個最新版本在型別安全的 DSL 中增加了對算術運算、設定屬性和影片的更好支持,

CSS 單元的算術運算

現在可以對 CSS 數值執行任意操作,如果對相同單位的兩個值使用運算,將獲得相同單位的新值,如下例所示:

val a = 5.px
val b = 20.px
borderBottom(a + b) // 25px
復制代碼

用于設定屬性的 CSS API

擴展了對所有最常用的 CSS 屬性的型別安全訪問,并涵蓋了大部分的現代瀏覽器支持的所有 CSS 屬性,

這意味著在大多數情況下能夠直接從型別安全的 API 中獲得支持,而對于更奇特的屬性,或尚不支持的屬性,還可以通過property直接獲取鍵和值的函式進行賦值:

borderWidth(topLeft = 4.px, bottomRight = 10%) // type-safe access!

property("some-exotic-property", "hello-friend") // raw property assignment
復制代碼

影片API

為了使基于 Compose 的用戶界面更加動態,現在提供了從型別安全的 DSL 中創建 CSS 影片的選項:

object AppStyleSheet : StyleSheet() {
   val bounce by keyframes {
       from {
           property("transform", "translateX(50%)")
       }

       to {
           property("transform", "translateX(-50%)")
       }
   }

   val myClass by style {
       animation(bounce) {
           duration(2.s)
           timingFunction(AnimationTimingFunction.EaseIn)
           direction(AnimationDirection.Alternate)
       }
   }
}
復制代碼

如果想自己更多地探索這些 API,請務必查看我們新添加的示例,這些示例展示了一些更高級的 CSS 影片和 DOM 操作功能,

事件層次結構、事件偵聽器和新的輸入型別

處理事件,尤其是由輸入組件發出的事件,是對 Compose 應用程式中的更改做出反應的關鍵部分之一,

在此版本中簡化了對事件屬性的訪問,使其更容易定義事件偵聽器,并提供了不同的輸入型別,

事件型別層次結構

以前大多數基于事件的 API 要求直接使用nativeEventeventTarget 以訪問感興趣的事件的值,

從此版本的 Compose for Web 開始,您現在可以訪問 a SyntheticEvent,其子型別使其更容易訪問所發出事件的相關屬性,

  • SyntheticMouseEvent 公開坐標;
  • SyntheticInputEvent公開文本值;
  • SyntheticKeyEvent公開 click 鍵

舉幾個例子:

Div(attrs = {
   onClick { event -> // SyntheticMouseEvent
       val x = event.x
       val y = event.y
   }
})
復制代碼

這些新事件型別旨在直接提供對 在 Native 事件中可用 相同的屬性的訪問,而無需訪問 nativeEvent 或直接事件的目標,

輸入

在常規 HTML 中,不同的輸入型別,從文本欄位到復選框都共享同一個標簽——輸入,

為了更輕松地在 Kotlin DSL 中使用這些不同的輸入型別并提供更多相關提示,這里引入了許多用于創建不同型別輸入的附加函式:

TextInput(value = "text", attrs = {
   onInput { } // all these components have attrs same as HTMLInputElement
})
CheckboxInput(checked = false)
RadioInput(checked = false)
NumberInput(value = 0, min = 0, max = 10)
DateInput(value = 2021-10-10")
TelInput(value = "0123456")
EmailInput()
// and other input types
復制代碼

事件監聽器

進一步統一了用于監聽不同輸入型別事件的函式,

輸入偵聽器的輸入型別特定函式 onCheckBoxInput 已被洗掉,現在可以直接使用 onInputonChange ,這意味著不再需要搜索正確命名的回呼:

Input(type = InputType.Text, attrs = {
   onInput { event ->
       val inputValue: String = event.value
   }
})

Input(type = InputType.Checkbox, attrs = {
   onInput { event ->
       val isChecked: Boolean = event.value
   }
})
復制代碼

試用 Compose Multiplatform Alpha!

無論是 Web、桌面、Android 還是這三者,我們都希望你能嘗試一下 Compose Multiplatform!

我們預計 Compose Multiplatform 1.0(我們的第一個穩定版本)將于今年晚些時候發布,因此現在是嘗試為您的生產應用評估 Compose Multiplatform 的理想時機,

這里有有許多可用資源:

  • 對于桌面應用程式,可以在Compose for Desktop 教程 中找到有關如何開始使用的最新資訊,

  • 對于瀏覽器應用程式,Compose for Web 教程將幫助啟動和運行,

  • 示例應用程式展示包括要研究的其他示例,包括 Web、桌面和多平臺應用程式,

預發布說明

Compose Multiplatform 目前處于 Alpha 階段 ,雖然大多數 API 現在已經非常類似于它們的穩定形狀,但請記住仍可能會更改某些 API,以確保最終版本提供盡可能最佳的開發體驗,

隨著接近穩定版本,我們將繼續依靠用戶的反饋來幫助實作這一目標!

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/293769.html

標籤:其他

上一篇:獲取SHA1的值,以及處理報錯

下一篇:??Android入門實戰——做一個健康飲食搭配APP??

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:40:31 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:40:11 more
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:39:36 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:39:13 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:16:23 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:16:15 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:15:46 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:14:53 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:14:08 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:08:34 more