主頁 > 移動端開發 > 開發一個漸進式Web應用程式(PWA)前都需要了解什么?

開發一個漸進式Web應用程式(PWA)前都需要了解什么?

2020-09-22 19:21:14 移動端開發

轉載請注明出處:葡萄城官網,葡萄城為開發者提供專業的開發工具、解決方案和服務,賦能開發者,

原文出處:https://dzone.com/articles/how-to-build-a-progressive-web-app-pwa-with-javasc

 

自蘋果推出了iPhone應用商店以來,App成為了我們生活中不可或缺的一部分,而對于物體業務也是如此,現在各行業都在推出自己的App,但有沒有人想過這樣一種場景,如果自己的潛在客戶還沒有安裝你的App亦或是即便安裝但因為客戶的手機存盤空間緊張而卸載掉了你的App?那有沒有使App更輕量,更易安裝的技術實作呢?答案是“有的”,

漸進式Web應用程式就是為此而生的,它同時具備了Web應用功能和以前只有在原生應用才有的功能的特點,漸進式Web應用程式通過從主螢屏上的圖示啟動,也可以根據推送通知啟動,加載時間幾乎可以忽略不計,而且除了可以在線使用外,也可以打包成可離線使用,

最重要的是,漸進式Web應用程式在手機上創建方式也很簡單,因為它們只是對你網站的增強,當有人在第一次訪問你的網站時,PWA的功能在經過你授權后就會自動為你創建在手機上,

下面, 我們會一起來看看如何來創建一個屬于自己的PWA應用,

要求

要開始學習本教程,您必須安裝以下軟體:

  • node  8.9 版本及以上 (https: // nodejs.org/en/download/).
  • Yarn (https://yarnpkg.com)
  • Git

作為本教程初始的工程,你可以clone以下Github庫:

git clone https://github.com/petereijgermans11/progressive-web-app

然后,到以下目錄中  

cd pwa-article / pwa-app-manifest-init

通過以下命令安裝依賴并啟動工程

npm i && npm start

通過以下地址打開應用: http:// localhost:8080

 

 

應用的網址

有許多方法可以訪問我的本地主機:為了從遠程訪問發布在你機器上的8080埠的地址,為此,您可以使用ngrok,請參閱:https://ngrok.com/

使用以下命令安裝ngrok: 

npm install -g ngrok

在終端中運行以下命令,該命令為您生成一個可供外部訪問的URL

ngrok http 8080

然后在Chrome中的移動設備上瀏覽至生成的網址,

PWA需要的技術組件是什么?

PWA有三個重要的技術組件協調作業,包括:

Manifest清單檔案,Service Worker和在https下運行,

 

 

Manifest清單檔案

清單檔案是一個JSON組態檔,其中包含了PWA的基礎資訊,例如應用的icon,Web應用程式名稱及背景顏色,如果瀏覽器檢測到網站存在PWA清單檔案,Chrome會自動出現“添加到主螢屏”按鈕,如果用戶點擊同意,該圖示將被添加到主螢屏,并且將安裝PWA,

 

 

創建一個Manifest.json

PWA的Manifest.json檔案如下所示:

JSON格式

{
  "name": "Progressive Selfies",
  "short_name": "PWA Selfies",
  "icons": [
    {
      "src": "/src/images/icons/app-icon-192x192.png",
      "type": "image/png",
      "sizes": "192x192"
    },
    {
      "src": "/src/images/icons/app-icon-512x512.png",
      "type": "image/png",
      "sizes": "512x512"
    }
  ],
  "start_url": "/index.html",
  "scope": ".",
  "display": "standalone",
  "background_color": "#fff",
  "theme_color": "#3f51b5"
}

告訴瀏覽器你應用的清單

在與index.html 檔案相同的級別的目錄中創建Manifest.json檔案,清單檔案創建后,將清單檔案參考鏈接添加到index.html中,

<link rel=”manifest” href=https://www.cnblogs.com/powertoolsteam/archive/2020/09/11/”/manifest.json”>

Manifest 屬性介紹

Manifest有很多配置屬性,接下來我們會對其中的屬性做一個簡單的介紹

  • nameshort_name:指定Web應用的名稱,short_name是該應用的簡稱,當沒有足夠空間展示應用的name屬性時,系統就會使用short_name ,
  • display:display屬性指定Web應用的顯示模式,它有四個值可供配置:fullscreen、standalone、minimal-ui和browser,但一般常用的屬性就是fullscreen和standalone,
    • fullscreen:全屏顯示
    • standalone:這種模式下打開的應用不會出現瀏覽器的地址欄,所以因此看起來更像是一個原生應用
    • minimal-uibrowser:和使用瀏覽器訪問區別不大,
  • orientation:控制Web應用的顯示的方向及禁止手機轉屏,
  • iconsbackground_color:icon用于指定應用圖示,background_color是應用加載完成前的背景色,通過設定這兩個屬性,可組合成應用的Splash Screen,
  • theme_color:定義應用程式的默認主題顏色,
  • description:設定應用的一段描述內容,

以上是pwa 清單檔案屬性的一些說明,我們通過將設定完成的清單檔案并將其放置在與index.html 檔案同級的目錄中即可完成清單檔案的添加,

打開Chrome開發者工具 – Application - Manifest,查看添加的清單檔案是否加載完成,如果沒有下圖的資訊,我們可以通過重新啟動服務器  npm start來重新加載,

 

 

 

什么是Service Worker

Service Worker(SW) 是一段JavaScript,它作為瀏覽器和網路服務器間的代理,Service Worker可以在基于瀏覽器的 web 應用中實作如離線快取、訊息推送、靜默更新等 native 應用常見的功能,以給 web 應用提供更好更豐富的使用體驗,

另外,這個API還允許利用快取來支持離線體驗,從而使開發人員可以完全控制用戶的使用體驗  

 

 

 

Service Worker生命周期

對于Service Worker,基本設定的步驟如下:

  • 首先應注冊SW,如果SW已注冊,瀏覽器會根據于安裝事件自動開始安裝,
  • 安裝SW后,它將收到激活事件,此激活事件可用于清理SW早期版本的中使用的資源,

 

 

 

 

實際操作應該首先創建一個和index.html同級,名為sw.js的空檔案,然后再index.html檔案中,添加一個base標簽,如下:

<base href=https://www.cnblogs.com/powertoolsteam/archive/2020/09/11/”/”>

最后,在src/js/app.js中添加以下代碼注冊SW,此代碼將在頁面 “ 加載 ” 程序中被激活,

你可以打開Chrome DevTools – Application - Service Worker 中檢查SW是否已經啟用,

window.addEventListener('load', () => {
    const base = document.querySelector('base');
    let baseUrl = base && base.href || '';
    if (!baseUrl.endsWith('/')) {
        baseUrl = `${baseUrl}/`;
    }  
  
    if ('serviceWorker' in navigator) {
        navigator.serviceWorker.register(`${baseUrl}sw.js`)
            .then( registration => {
            // Registration was successful
            console.log('ServiceWorker registration successful with scope: ', registration.scope);
        })
        .catch(err => {
            // registration failed :(
            console.log('ServiceWorker registration failed: ', err);
        });
    }
});

以上這段代碼主要的作用是檢查SW的API 在window物件的navigator 屬性中是否可用,window物件代表瀏覽器視窗,如果SW在navigator 中可用,則在頁面加載時立即注冊SW,

雖然注冊一個SW很簡單,但在有些情況下我們依然會遇到無法注冊Service Worker的問題,我們來簡單看看無法注冊SW的原因都有什么并如何解決:

  • 您的應用程式無法在HTTPS下運行,在開發程序中,你可以通過localhost使用SW ,但如果將其部署在網站上時,則需要啟用HTTPS,
  • SW的路徑不正確,

沒有勾選Update on reload,  

 

 

Service Worker 事件

除了install和activate事件外,其他事件還有message、fetch、sync和push事件,

 

 

將以下代碼添加到你的SW中以監聽生命周期事件(安裝和激活):

 

self.addEventListener('install', event => {
    console.log('[Service Worker] Installing Service Worker ...', event);
    event.waitUntil(self.skipWaiting());
});
self.addEventListener('activate', event => {
    console.log('[Service Worker] Activating Service Worker ...', event);
    return self.clients.claim();
});

install回呼呼叫skipWaiting()函式來觸發activate事件,并告訴Service Worker立即開始作業,而無需等待用戶瀏覽或重新加載頁面,

skipWaiting()函式強制等待中的Service Worker成為活動的Service Worker,self.skipWaiting()函式也可以和self.clients.claim()函式一起使用,以確保對底層Service Worker的更新立即生效,

在這種情況下,self-property 代表視窗物件(即你的瀏覽器視窗),

添加到主螢屏按鈕

"添加到主螢屏按鈕" 允許用戶在其設備上安裝PWA,為了真正用這個按鈕安裝PWA,你必須在SW中定義一個fetch事件處理程式,讓我們在sw.js中解決這個問題,

self.addEventListener('fetch', event => {
    console.log('[Service Worker] Fetching something ....', event);
    // This fixes a weird bug in Chrome when you open the Developer Tools
    if (event.request.cache === 'only-if-cached' && event.request.mode !== 'same-origin') {
        return;
    }
    event.respondWith(fetch(event.request));
});

Service Worker快取

Service Worker的強大之處在于其攔截HTTP請求的能力,在這一步中,我們使用這個選項來攔截HTTP請求和回應,直接從快取為用戶提供閃電般快速的回應,

Service Worker安裝期間進行預快取 

當用戶第一次訪問你的網站時,SW會開始自行安裝,在這個安裝階段,你可以將PWA使用的所有頁面、腳本和樣式檔案下載并快取起來,以下是完成這項作業的sw.js檔案代碼:  

const CACHE_STATIC_NAME = 'static';
const URLS_TO_PRECACHE = [
    '/',
    'index.html',
    'src/js/app.js',
    'src/js/feed.js',
    'src/lib/material.min.js',
    'src/css/app.css',
    'src/css/feed.css',
    'src/images/main-image.jpg',
    'https://fonts.googleapis.com/css?family=Roboto:400,700',
    'https://fonts.googleapis.com/icon?family=Material+Icons',
];
self.addEventListener('install', event => {
    console.log('[Service Worker] Installing Service Worker ...', event);
    event.waitUntil(
        caches.open(CACHE_STATIC_NAME)
            .then(cache => {
                console.log('[Service Worker] Precaching App Shell');
                cache.addAll(URLS_TO_PRECACHE);
            })
            .then(() => {
                console.log('[ServiceWorker] Skip waiting on install');
                return self.skipWaiting();
            })
    );
});

這段代碼使用安裝事件,并在安裝階段添加了一個URLS_TO_PRECACHE陣列,一旦呼叫開啟快取函式(caches.open),你就可以使用cache.addAll()函式來快取陣列中的檔案,通過event.waitUntil()方法使用JavaScript promise來知道安裝需要多長時間以及是否成功,

安裝事件會呼叫self.skipWaiting()直接激活SW,如果所有檔案都已被成功快取,SW就會被安裝,但如果其中一個檔案無法下載,則安裝步驟將會失敗,在Chrome開發者工具中,你可以檢查快取(在Cache Storage中)是否被URLS_TO_PRECACHE陣列中的靜態檔案填充,

 

 

但是,如果你查看Network選項卡,檔案仍然是通過網路獲取的,原因是雖然快取已經準備就緒了,但我們并沒有從快取中讀取參考資源,所以為了完成這部分作業,我們首先要監聽應用的fetch事件,然后攔截并從快取中獲取資源,讓我們看看下面的代碼吧: 

 

self.addEventListener('fetch', event => {
    console.log('[Service Worker] Fetching something ....', event);
    event.respondWith(
        caches.match(event.request)
            .then(response => {
                if (response) {
                    console.log(response);
                    return response;
                }
                return fetch(event.request);
            })
    );
});

我們使用caches.match()函式檢查傳入的URL是否與當前快取中可能存在的資源匹配,如果匹配,我們就回傳該快取資源,但如果該資源不存在于快取中,我們就像正常情況下一樣繼續獲取請求的資源,

在Service Worker安裝并激活后,重繪頁面并再次檢查網路選項卡,現在,Service Worker將攔截HTTP請求,并從快取中即時加載相應的資源,而不是向服務器發出網路請求,

現在,如果我們在網路選項卡中設定離線模式,我們的應用也依然能正常訪問,

后臺傳輸

Background Fetch API是SW的后臺功能,它允許用戶在后臺下載大檔案、視頻和音樂等資源,在獲取/傳輸程序中,你的用戶即便關閉標簽,乃至關閉整個瀏覽器,也不會清除傳輸任務,當用戶再次打開瀏覽器后,傳輸程序將恢復,這個API也可以將傳輸的進度可以顯示給用戶,用戶可以取消或暫停這個程序,

 

 

 

默認情況下,后臺傳輸功能是不可用的,你必須通過url(chrome://flags/#enable-experimental-web-platform-features)允許chrome的“Experimental Web Platform features”選項

 

 

以下是如何實作此類后臺傳輸的示例,

在你的index.html檔案中添加ID為“ bgFetchButton” 的按鈕

<button id=”bgFetchButton”>Store assets locally</button>

然后,在加載事件處理程式中的app.js中添加用于執行后臺傳輸的代碼

window.addEventListener(‘load’, () => {
...
       bgFetchButton = document.querySelector(‘#bgFetchButton’);
       bgFetchButton.addEventListener(‘click’, async event => {
         try {
            const registration = await navigator.serviceWorker.ready;
            registration.backgroundFetch.fetch(‘my-fetch’, [new              Request(`${baseUrl}src/images/main-image-lg.jpg`)]); 
         } catch (err) {
            console.error(err);
         }
     }); 
...
});

上面的代碼在以下條件下開始執行后臺傳輸:

  • 用戶點擊ID為bgFetchButton的按鈕
  • SW已注冊

后臺傳輸必須在異步函式中執行,因為傳輸程序不能阻塞用戶界面,

傳輸完成后放入快取

self.addEventListener(‘backgroundfetchsuccess’, event => { 
  console.log(‘[Service Worker]: Background Fetch Success’, event.registration);   event.waitUntil(
   (async function() {
     try {
     // Iterating the records to populate the cache
       const cache = await caches.open(event.registration.id); const records =          await event.registration.matchAll(); const promises = records.map(async          record => {
         const response = await record.responseReady;
         await cache.put(record.request, response); 
       });
       await Promise.all(promises); 
     } catch (err) {
       console.log(‘[Service Worker]: Caching error’);
     }
   })() 
  );
});

這段代碼由以下步驟組成:

  • l  當Background Fetch傳輸完成,你的SW將收到Background Fetch成功事件,
  • l  創建并打開一個與registration.id同名的新快取,
  • l  通過registration.matchAll()獲取所有記錄并遍歷,

最后,通過Promise.all(),執行所有的承諾,  

 

總結 

在本文中我們討論了PWA的基礎組成部分的其中兩部分:Manifest、Service Worker的基礎功能介紹,因為HTTPS之前我們已經有過一些討論了https://www.cnblogs.com/powertoolsteam/p/http2https.html,

后面如果大家感興趣,我們可用一起討論一些PWA的高級功能,這些功能可以為你的應用提供呼叫硬體的能力,如果有任何問題,歡迎通過評論區留言告訴我, 

 

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

標籤:其他

上一篇:微信小程式-組件-視圖容器

下一篇:Android Gradle 常用配置

標籤雲
其他(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