Kullanıcı Kılavuzu

Kuika Uygulamasını Micro-Frontend Olarak Entegre Etme

6/5/26
Kuika Uygulamasını Micro-Frontend Olarak Entegre Etme

Bu kılavuz, bir Kuika uygulamasını Web View elementini kullanarak harici bir uygulamaya nasıl entegre edeceğinizi adım adım açıklamaktadır. Entegrasyon, kimlik doğrulama (authentication) akışını da içermektedir ve popüler JavaScript kütüphaneleri için özel örnekler sunmaktadır.

kuika-mfe_1_0_0.js Script'i Hakkında Önemli Not

Entegrasyonun ilk adımı olan kuika-mfe_1_0_0.js loader (yükleyici) script'ini projenize dahil etmek için iki seçeneğiniz bulunmaktadır:

  1. Genel Adresten Kullanım (Önerilen): Script'i doğrudan Kuika'nın sağladığı genel adresten kullanabilirsiniz. Bu en kolay ve hızlı yöntemdir.
  • URL: https://platform.kuika.com/assets/kuika-mfe_1_0_0.js
  1. Kendi Sunucunuzda Host Etme: Alternatif olarak, bu dosyayı indirip kendi sunucularınızda barındırabilir ve oradan çağırabilirsiniz. Bu size versiyon kontrolü ve ağ yönetimi konusunda daha fazla esneklik sağlar. Bu yöntemi seçerseniz, aşağıdaki kod örneklerindeki script etiketinin src yolunu kendi adresinizle değiştirmelisiniz.
CreateKuikaMfeApp fonksiyonuna parametre olarak verilen frontEndUrl ise farklı bir anlama gelir. Bu URL, her zaman sizin MFE olarak çalışacak kendi Kuika uygulamanızın yayınlandığı adresi göstermelidir. Loader script, bu adresten uygulamanıza özel varlıkları (asset-manifest.json vb.) çekecektir.

Web View Elementi Etiket Adını Belirleme

Entegre edeceğiniz Kuika uygulamasının HTML etiketi, statik bir isme sahip değildir. Etiket adı, Kuika'daki workspace ve proje adınıza göre dinamik olarak oluşturulur.

Kural: workspace-ismi-proje-ismi şeklinde, tamamen küçük harf ve kelimeler arasına tire (-) konularak (kebab-case) isimlendirme yapılır.

Etiket adı Türkçe veya diğer ANSI olmayan karakterleri (örn: ç, ş, ğ, ı, ö, ü) içeremez. Kuika, bu tür karakterleri otomatik olarak İngilizce'deki benzerlerine (c, s, g, i, o, u) dönüştürür.

Örnek:

  • Workspace Adı: BenimŞirketim
  • Proje Adı: MasrafUygulaması
  • Oluşturulacak HTML Etiketi: <benim-sirketim-masraf-uygulamasi>

Doğru Etiketi Nasıl Bulursunuz?

Eğer etiket adından emin değilseniz, en kesin yöntem şudur:

  1. MFE olarak entegre etmek istediğiniz Kuika uygulamasını tarayıcıda açın.
  2. Geliştirici araçları konsolunu (Developer Tools Console) açın.
  3. Konsola window.kuika.getModule() komutunu yazıp çalıştırın.

Bu komut, size uygulamanızı entegre etmek için gereken ve doğru etiket adını içeren basit bir HTML çıktısı verecektir. Aşağıdaki tüm kod örneklerinde <uygulamanizin-etiketi> olarak belirtilen yerlere bu komutla bulduğunuz etiketi yazmalısınız.

Yöntem 1: Pure JavaScript

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Host Application</title>
    <script src="https://platform.kuika.com/assets/kuika-mfe_1_0_0.js"></script>
</head>
<body>
    <h1>Host Uygulama</h1>
    <div id="kuika-mfe-container">
        <uygulamanizin-etiketi
            external_access_token="<host_uygulamanin_access_tokeni>"
            external_refresh_token="<host_uygulamanin_refresh_tokeni>"
            external_username="user@example.com"
            starting_screen="dashboardscreen"
        ></uygulamanizin-etiketi>
    </div>
    <script>
        const kuikaAppConfig = {
            frontEndUrl: '''https://<uygulamanizin-kuika-adresi>'''
        };
        if (window.CreateKuikaMfeApp) {
            CreateKuikaMfeApp(kuikaAppConfig);
        } else {
            window.addEventListener('load', () => CreateKuikaMfeApp(kuikaAppConfig));
        }
    </script>
</body>
</html>

Yöntem 2: React Entegrasyonu

import React, { useEffect } from 'react';

const KuikaMfeWrapper = ({ accessToken, refreshToken, userEmail }) => {
  useEffect(() => {
    const scriptUrl = 'https://platform.kuika.com/assets/kuika-mfe_1_0_0.js';
    const mfeAppUrl = '''https://<uygulamanizin-kuika-adresi>''';

    const initializeMfe = () => {
      if (window.CreateKuikaMfeApp) {
        window.CreateKuikaMfeApp({ frontEndUrl: mfeAppUrl });
      }
    };

    let script = document.querySelector(`script[src="${scriptUrl}"]`);

    if (!script) {
      script = document.createElement('script');
      script.src = scriptUrl;
      script.async = true;
      document.head.appendChild(script);
      script.onload = initializeMfe;
    } else if (window.CreateKuikaMfeApp) {
      initializeMfe();
    } else {
      script.addEventListener('load', initializeMfe);
    }

    return () => {
      if (script) {
        script.removeEventListener('load', initializeMfe);
      }
    };
  }, []);

  return (
    <uygulamanizin-etiketi
      external_access_token={accessToken}
      external_refresh_token={refreshToken}
      external_username={userEmail}
      starting_screen="dashboardscreen"
    ></uygulamanizin-etiketi>
  );
};

Yöntem 3: Vue.js Entegrasyonu

main.js Yapılandırması: Vue'ye custom elementleri tanıması için genel bir kural eklenmelidir. Bu kural, tire (-) içeren tüm etiketleri custom element olarak kabul eder.

app.config.compilerOptions.isCustomElement = (tag) => tag.includes('-');

KuikaMfeWrapper.vue Componenti:

<template>
  <uygulamanizin-etiketi
    :external_access_token="accessToken"
    :external_refresh_token="refreshToken"
    :external_username="userEmail"
    :starting_screen="dashboardscreen"
  ></uygulamanizin-etiketi>
</template>

<script>
import { onMounted, onUnmounted } from 'vue';

export default {
  name: 'KuikaMfeWrapper',
  props: { accessToken: String, refreshToken: String, userEmail: String },
  setup() {
    const scriptUrl = 'https://platform.kuika.com/assets/kuika-mfe_1_0_0.js';
    const mfeAppUrl = '''https://<uygulamanizin-kuika-adresi>''';
    let script = null;

    const initializeMfe = () => {
      if (window.CreateKuikaMfeApp) {
        window.CreateKuikaMfeApp({ frontEndUrl: mfeAppUrl });
      }
    };

    onMounted(() => {
      script = document.querySelector(`script[src="${scriptUrl}"]`);
      if (!script) {
        script = document.createElement('script');
        script.src = scriptUrl;
        script.async = true;
        document.head.appendChild(script);
        script.onload = initializeMfe;
      } else if (window.CreateKuikaMfeApp) {
        initializeMfe();
      } else {
        script.addEventListener('load', initializeMfe);
      }
    });

    onUnmounted(() => {
      if (script) {
        script.removeEventListener('load', initializeMfe);
      }
    });
  },
};
</script>

Yöntem 4: Angular Entegrasyonu

app.module.ts Yapılandırması: schemas: [CUSTOM_ELEMENTS_SCHEMA]

kuika-mfe-wrapper.component.ts Componenti:

import { Component, OnInit, OnDestroy, Input } from '@angular/core';

@Component({
  selector: 'app-kuika-mfe-wrapper',
  template: `
    <uygulamanizin-etiketi
      [attr.external_access_token]="accessToken"
      [attr.external_refresh_token]="refreshToken"
      [attr.external_username]="userEmail"
      [attr.starting_screen]="dashboardscreen"
    ></uygulamanizin-etiketi>
  `,
})
export class KuikaMfeWrapperComponent implements OnInit, OnDestroy {
  @Input() accessToken: string;
  @Input() refreshToken: string;
  @Input() userEmail: string;

  private script: HTMLScriptElement;
  private readonly scriptUrl = 'https://platform.kuika.com/assets/kuika-mfe_1_0_0.js';
  private readonly mfeAppUrl = '''https://<uygulamanizin-kuika-adresi>''';

  private initializeMfe = () => {
    if ((window as any).CreateKuikaMfeApp) {
      (window as any).CreateKuikaMfeApp({ frontEndUrl: this.mfeAppUrl });
    }
  };

  ngOnInit(): void {
    this.script = document.querySelector(`script[src="${this.scriptUrl}"]`);

    if (!this.script) {
      this.script = document.createElement('script');
      this.script.src = this.scriptUrl;
      this.script.async = true;
      document.head.appendChild(this.script);
      this.script.addEventListener('load', this.initializeMfe);
    } else if ((window as any).CreateKuikaMfeApp) {
      this.initializeMfe();
    } else {
      this.script.addEventListener('load', this.initializeMfe);
    }
  }

  ngOnDestroy(): void {
    if (this.script) {
      this.script.removeEventListener('load', this.initializeMfe);
    }
  }
}
No items found.

İlişkili diğer içerikler

No items found.

Sözlük

No items found.

Alt Başlıklar