主頁 > 移動端開發 > Angular-訂閱功能時無法讀取未定義的屬性

Angular-訂閱功能時無法讀取未定義的屬性

2021-12-25 10:53:10 移動端開發

在我的 angular 應用程式上,我在瀏覽器除錯時出錯:

錯誤錯誤:未捕獲(承諾):型別錯誤:無法讀取未定義的屬性(讀取“欄位”)

為什么我無法訪問此行中的 fields 屬性?

this.pictureUrl = this.currentUser.version.fields.field[0].fieldValue.path;

這是我的用戶模型

export interface EzUser {
  mediaType: string;
  href: string;
  id: number;
  remoteID: string;
  contentType: ContentType;
  name: string;
  versions: ContentType;
  section: ContentType;
  mainLocation: ContentType;
  locations: ContentType;
  groups: ContentType;
  owner: ContentType;
  publishDate: Date;
  lastModificationDate: Date;
  mainLanguageCode: string;
  alwaysAvailable: boolean;
  version: Version;
  login: string;
  email: string;
  enabled: boolean;
  userGroups: ContentType;
  roles: ContentType;
}

export interface ContentType {
  mediaType: string;
  href: string;
}

export interface Version {
  mediaType: string;
  href: string;
  versionInfo: VersionInfo;
  fields: Fields;
  relations: Relations;
  thumbnail: Thumbnail;
}

export interface Fields {
  field: Field[];
}

export interface Field {
  id: number;
  fieldDefinitionIdentifier: string;
  languageCode: string;
  fieldTypeIdentifier: string;
  fieldValue: FieldValueClass;
}

export interface FieldValueClass {
  hasStoredLogin?: boolean;
  contentID?: number;
  login?: string;
  email?: string;
  passwordUpdatedAt?: number;
  enabled?: boolean;
  maxLogin?: number;
  plainPassword?: null;
  id?: string;
  path?: string;
  alternativeText?: string;
  fileName?: string;
  fileSize?: number;
  imageID?: string;
  uri?: string;
  inputURI?: null;
  width?: string;
  height?: string;
  additionalData?: any[];
  variations?: Variations;
}

export interface Variations {
  ezplatformAdminUIProfilePictureUserMenu: string;
  large: string;
  medium: string;
  reference: string;
  small: string;
  tiny: Href;
}

export interface Href {
  href: string;
}

export interface Relations {
  mediaType: string;
  href: string;
  relation: any[];
}

export interface Thumbnail {
  mediaType: string;
  resource: string;
  width: null;
  height: null;
  mimeType: string;
}

export interface VersionInfo {
  id: number;
  versionNo: number;
  status: string;
  modificationDate: Date;
  creator: ContentType;
  creationDate: Date;
  initialLanguageCode: string;
  languageCodes: string;
  versionTranslationInfo: VersionTranslationInfo;
  names: Names;
  content: ContentType;
}

export interface Names {
  value: Value[];
}

export interface Value {
  languageCode: string;
  text: string;
}

export interface VersionTranslationInfo {
  mediaType: string;
  language: Language[];
}

export interface Language {
  languageCode: string;
}

這是我的資料

{
    "_media-type": "application/vnd.ez.api.User json",
    "_href": "/api/ezp/v2/user/users/14",
    "_id": 14,
    "_remoteId": "1bb4fe25487f05527efa8bfd394cecc7",
    "ContentType": {
        "_media-type": "application/vnd.ez.api.ContentType json",
        "_href": "/api/ezp/v2/content/types/4"
    },
    "name": "Administrator User",
    "Versions": {
        "_media-type": "application/vnd.ez.api.VersionList json",
        "_href": "/api/ezp/v2/content/objects/14/versions"
    },
    "Section": {
        "_media-type": "application/vnd.ez.api.Section json",
        "_href": "/api/ezp/v2/content/sections/2"
    },
    "MainLocation": {
        "_media-type": "application/vnd.ez.api.Location json",
        "_href": "/api/ezp/v2/content/locations/1/5/13/15"
    },
    "Locations": {
        "_media-type": "application/vnd.ez.api.LocationList json",
        "_href": "/api/ezp/v2/content/objects/14/locations"
    },
    "Groups": {
        "_media-type": "application/vnd.ez.api.UserGroupRefList json",
        "_href": "/api/ezp/v2/user/users/14/groups"
    },
    "Owner": {
        "_media-type": "application/vnd.ez.api.User json",
        "_href": "/api/ezp/v2/user/users/14"
    },
    "publishDate": "2002-10-06T16:13:50 00:00",
    "lastModificationDate": "2021-12-21T17:23:49 00:00",
    "mainLanguageCode": "eng-GB",
    "alwaysAvailable": true,
    "Version": {
        "_media-type": "application/vnd.ez.api.Version json",
        "_href": "/api/ezp/v2/content/objects/14/versions/5",
        "VersionInfo": {
            "id": 517,
            "versionNo": 5,
            "status": "PUBLISHED",
            "modificationDate": "2021-12-21T17:23:49 00:00",
            "Creator": {
                "_media-type": "application/vnd.ez.api.User json",
                "_href": "/api/ezp/v2/user/users/14"
            },
            "creationDate": "2021-12-21T17:23:48 00:00",
            "initialLanguageCode": "eng-GB",
            "languageCodes": "eng-GB",
            "VersionTranslationInfo": {
                "_media-type": "application/vnd.ez.api.VersionTranslationInfo json",
                "Language": [{
                    "languageCode": "eng-GB"
                }]
            },
            "names": {
                "value": [{
                    "_languageCode": "eng-GB",
                    "#text": "Administrator User"
                }]
            },
            "Content": {
                "_media-type": "application/vnd.ez.api.ContentInfo json",
                "_href": "/api/ezp/v2/content/objects/14"
            }
        },
        "Fields": {
            "field": [{
                "id": 28,
                "fieldDefinitionIdentifier": "first_name",
                "languageCode": "eng-GB",
                "fieldTypeIdentifier": "ezstring",
                "fieldValue": "Administrator"
            }, {
                "id": 29,
                "fieldDefinitionIdentifier": "last_name",
                "languageCode": "eng-GB",
                "fieldTypeIdentifier": "ezstring",
                "fieldValue": "User"
            }, {
                "id": 30,
                "fieldDefinitionIdentifier": "user_account",
                "languageCode": "eng-GB",
                "fieldTypeIdentifier": "ezuser",
                "fieldValue": {
                    "hasStoredLogin": true,
                    "contentId": 14,
                    "login": "admin",
                    "email": "[email protected]",
                    "passwordUpdatedAt": 1640107428,
                    "enabled": true,
                    "maxLogin": 10,
                    "plainPassword": null
                }
            }, {
                "id": 178,
                "fieldDefinitionIdentifier": "signature",
                "languageCode": "eng-GB",
                "fieldTypeIdentifier": "eztext",
                "fieldValue": "Mega boss"
            }, {
                "id": 180,
                "fieldDefinitionIdentifier": "image",
                "languageCode": "eng-GB",
                "fieldTypeIdentifier": "ezimage",
                "fieldValue": {
                    "id": "0/8/1/0/180-5-eng-GB/avatar_19.jpg",
                    "path": "/0/8/1/0/180-5-eng-GB/avatar_19.jpg",
                    "alternativeText": "",
                    "fileName": "avatar_19.jpg",
                    "fileSize": 50787,
                    "imageId": "14-180-5",
                    "uri": "/var/site/storage/images/0/8/1/0/180-5-eng-GB/avatar_19.jpg",
                    "inputUri": null,
                    "width": "480",
                    "height": "580",
                    "additionalData": [],
                    "variations": {
                        "ezplatform_admin_ui_profile_picture_user_menu": {
                            "href": "/api/ezp/v2/content/binary/images/14-180-5/variations/ezplatform_admin_ui_profile_picture_user_menu"
                        },
                        "large": {
                            "href": "/api/ezp/v2/content/binary/images/14-180-5/variations/large"
                        },
                        "medium": {
                            "href": "/api/ezp/v2/content/binary/images/14-180-5/variations/medium"
                        },
                        "reference": {
                            "href": "/api/ezp/v2/content/binary/images/14-180-5/variations/reference"
                        },
                        "small": {
                            "href": "/api/ezp/v2/content/binary/images/14-180-5/variations/small"
                        },
                        "tiny": {
                            "href": "/api/ezp/v2/content/binary/images/14-180-5/variations/tiny"
                        }
                    }
                }
            }]
        },
        "Relations": {
            "_media-type": "application/vnd.ez.api.RelationList json",
            "_href": "/api/ezp/v2/content/objects/14/versions/5/relations",
            "Relation": []
        },
        "Thumbnail": {
            "_media-type": "application/vnd.ez.api.Thumbnail json",
            "resource": "/bundles/ezplatformadminui/img/ez-icons.svg#user",
            "width": null,
            "height": null,
            "mimeType": "image/svg xml"
        }
    },
    "login": "admin",
    "email": "[email protected]",
    "enabled": true,
    "UserGroups": {
        "_media-type": "application/vnd.ez.api.UserGroupList json",
        "_href": "/api/ezp/v2/user/users/14/groups"
    },
    "Roles": {
        "_media-type": "application/vnd.ez.api.RoleAssignmentList json",
        "_href": "/api/ezp/v2/user/users/14/roles"
    }
}

我的組件

import { Component, OnInit } from '@angular/core';
import { User } from 'src/app/_models';
import { EzUser } from 'src/app/_models/ezuser';
import { AuthenticationService } from 'src/app/_services';

import { UserblockService } from './userblock.service';

@Component({
    selector: 'app-userblock',
    templateUrl: './userblock.component.html',
    styleUrls: ['./userblock.component.scss']
})
export class UserblockComponent implements OnInit {

    currentUser: EzUser;
    error = '';
    pictureUrl: string;
    user: User = {
      id: 1,
      nome: 'ippo',
      cognome: 'adad',
      tipo: {id: 1, name: 'dsad'}
    };

    constructor(public userblockService: UserblockService, private authenticationService: AuthenticationService) {

        this.authenticationService.currentUser.subscribe(x => this.currentUser = x);
        this.pictureUrl = this.currentUser.version.fields.field[0].fieldValue.path;
    }

    ngOnInit() {}

    userBlockIsVisible(): boolean{
        return this.userblockService.getVisibility();
    }
}

uj5u.com熱心網友回復:

該欄位fields被讀取undefined意味著您currentUser未定義,實際上,您從未currentUser在建構式之前設定值,我想您的代碼應該是

this.authenticationService.currentUser.subscribe(x => {
   this.currentUser = x
   this.pictureUrl = this.currentUser.version.fields.field[0].fieldValue.path;
});

并且您應該檢查是否設定了圖片網址

uj5u.com熱心網友回復:

this.currentUser.versionis undefined,由異步編程中極其常見的錯誤引起。

constructor(public userblockService: UserblockService, private authenticationService: AuthenticationService) {
    this.authenticationService.currentUser.subscribe(x => this.currentUser = x);
    this.pictureUrl = this.currentUser.version.fields.field[0].fieldValue.path;
}

this.pictureUrl取決于緊接在它之前的 observable 的賦值,但由于這是一個異步函式,它不會等待它完成才繼續賦值this.pictureUrl

您需要在 observable 中分配它,通常我在oncomplete handler 中執行此操作,盡管它也可以在onnext處理程式上。oncomplete僅在沒有錯誤時才呼叫。

constructor(public userblockService: UserblockService, private authenticationService: AuthenticationService) {
    this.authenticationService.currentUser.subscribe(
        user => this.currentUser = user,
        error => console.error,
        _ => this.pictureUrl = this.currentUser.version.fields.field[0].fieldValue.path
    );
}

您還應該考慮在 Angular 生命周期掛鉤ngOnInit()而不是建構式中執行此操作

uj5u.com熱心網友回復:

這是 AuthenticationService

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { BehaviorSubject, Observable } from 'rxjs';
import { catchError, map, mergeMap } from 'rxjs/operators';
import { environment } from 'src/environments/environment';
import { Router } from '@angular/router';
import { EzUser } from '../_models/ezuser';
import { EzSession } from '../_models/ezsession';
import { User } from '../_models';

@Injectable({ providedIn: 'root' })
export class AuthenticationService {

    private currentUserSubject: BehaviorSubject<EzUser>;
    public currentUser: Observable<EzUser>;

    private currentSessionSubject: BehaviorSubject<EzSession>;
    public currentSession: Observable<EzSession>;

    constructor(private http: HttpClient, private router: Router) {

        this.currentUserSubject = new BehaviorSubject<EzUser>(JSON.parse(sessionStorage.getItem('ezuser')));
        this.currentUser = this.currentUserSubject.asObservable();

        this.currentSessionSubject = new BehaviorSubject<EzSession>(JSON.parse(sessionStorage.getItem('ezsession')));
        this.currentSession = this.currentSessionSubject.asObservable();
    }

    public get currentSessionValue(): EzSession {
      return this.currentSessionSubject.value;
    }

    public get currentUserValue(): any {
      return this.currentUserSubject.value;
    }

    login(username: string, pass: string): Observable<EzUser> {

      const headers = {
        headers: new HttpHeaders({
          Accept: 'application/vnd.ez.api.Session json',
          'Content-Type': 'application/vnd.ez.api.SessionInput json',
        })
      };

      const body = {
        SessionInput: {
          login: username,
          password: pass
        }
      };

      return this.http.post<EzSession>(`${environment.apiUrl}/user/sessions`, body, headers).pipe(
        map(result => {
              // store user details and basic auth credentials in local storage to keep user logged in between page refreshes
              // session.authdata = window.btoa(username   ':'   pass);
              // sessionStorage.setItem('currentUser', JSON.stringify(session));
              result.authdata = window.btoa(username   ':'   pass);
              sessionStorage.setItem('ezsession', JSON.stringify(result));
              this.currentSessionSubject.next(result);
              return result;
        }),
        mergeMap((x) => {

          const ezsession =  JSON.parse(sessionStorage.getItem('ezsession'));
          const headers2 = {
            headers: new HttpHeaders({
              'Content-Type': ezsession.Session['_media-type'],
              Accept: ezsession.Session.User['_media-type']
            })
          };

          return this.http.get<any>(`${ezsession.Session.User['_href']}`, headers2).pipe(map(result => {
            debugger
            sessionStorage.setItem('ezuser', JSON.stringify(result.User));
            this.currentUserSubject.next(result);
            return result.User;
          }));
        })
      );
    }

    logout(): Observable<any[]> {
      const ezsession =  JSON.parse(sessionStorage.getItem('ezsession'));
      const headers = {
        headers: new HttpHeaders({
          Cookie: ezsession.Session.name   '='   ezsession.Session.identifier,
          'X-CSRF-Token': ezsession.Session.csrfToken
        })
      };

      return this.http.delete<any>(`${environment.apiUrl}/user/sessions/${ezsession.Session.identifier}`, headers).pipe(
        map(result => {
          sessionStorage.removeItem('ezsession');
          sessionStorage.removeItem('ezuser');
          this.currentSessionSubject.next(null);
          this.currentUserSubject.next(null);
          return result;
        })
      );
   }

}

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

標籤:有角的 打字稿

上一篇:Android 7.0 ----- Direct Boot模式(AppClock)

下一篇:如何為SQLite插入陳述句轉義雙引號-Angular

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