Extension manifest
I tilläggets baskatalog måste du skapa filen extension.json
. Detta innehåller viktig information om tillägget som gör att Adobe Experience Platform kan använda det korrekt. En del av innehållet formateras efter sättet för npm:s package.json
.
Ett exempel extension.json
finns i GitHub-databasen Hello World-tillägget.
Ett tilläggsmanifest måste bestå av följande:
name
platform
web
.version
displayName
description
iconPath
(Valfritt).svg
. SVG ska vara fyrkantig och kan skalas av Platform.author
"Författaren" är ett objekt som ska struktureras enligt följande:
name
: Namnet på tilläggsförfattaren. Du kan också använda företagsnamnet här.url
(Valfritt): En URL där du kan ta reda på mer om tilläggsförfattaren.email
(Valfritt): E-postadressen till tilläggsförfattaren.
Detta är förenligt med npm-reglerna för författarfält.
exchangeUrl
(Krävs för offentliga tillägg)https://www.adobeexchange.com/experiencecloud.details.######.html
.viewBasePath
src/view/
blir värdet viewBasePath
src/view/
.hostedLibFiles
(Valfritt)Det här alternativet innehåller en matris med relativa sökvägar för biblioteksfiler från tredje part som måste lagras.
main
(Valfritt)Den här modulen inkluderas alltid i körningsbiblioteket och körs. Eftersom modulen alltid ingår i körningsbiblioteket rekommenderar vi att du bara använder huvudmodulen när det är absolut nödvändigt och att kodstorleken är minimal.
Det går inte att garantera att den här modulen körs först. Andra moduler kan köras innan.
configuration
(Valfritt)events
(Valfritt)conditions
(Valfritt)actions
(Valfritt)dataElements
(Valfritt)sharedModules
(Valfritt)En array med definierade objekt för delade moduler. Varje objekt i en delad modul i arrayen ska struktureras på följande sätt:
name
: Namnet på den delade modulen. Observera att det här namnet kommer att användas när delade moduler från andra tillägg refereras enligt beskrivningen i Delade moduler. Det här namnet visas aldrig i något användargränssnitt. Den ska vara unik från namnen på andra delade moduler i tillägget och måste uppfylla namnreglerna. Detta används av taggar som identifierare och bör inte ändras efter att du har publicerat tillägget.libPath
: Den relativa sökvägen till den delade modulen. Det får inte börja med ett snedstreck. Den måste referera till en JavaScript-fil med tillägget.js
.
Bilaga
Namngivningsregler naming-rules
Värdet för alla name
-fält i extension.json
måste följa följande regler:
- Måste innehålla högst 214 tecken
- Får inte börja med en punkt eller ett understreck
- Får inte innehålla versaler
- Får endast innehålla URL-säkra tecken
Dessa är kompatibla med reglerna för npm-paketnamnet.
Egenskaper för konfigurationsobjekt config-object
Konfigurationsobjektet ska struktureras på följande sätt:
viewPath
viewBasePath
och ska inte börja med ett snedstreck. Den måste referera till en HTML-fil med filnamnstillägget .html
. Frågesträngar och fragment-ID (hash-suffix) kan användas.schema
Ett objekt av JSON-schema som beskriver formatet för ett giltigt objekt som sparas från tilläggskonfigurationsvyn. Eftersom du är utvecklare av konfigurationsvyn är det ditt ansvar att se till att alla sparade inställningsobjekt matchar det här schemat. Det här schemat används även för validering när användare försöker spara data med hjälp av plattformstjänster.
Ett exempelschemaobjekt är följande:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"delay": {
"type": "number",
"minimum": 1
}
},
"required": [
"delay"
],
"additionalProperties": false
}
Vi rekommenderar att du använder ett verktyg som JSON-schemavalideraren för att manuellt testa ditt schema.
transforms
(Valfritt)Typdefinitioner type-definitions
En typdefinition är ett objekt som används för att beskriva en händelse, ett villkor, en åtgärd eller en dataelementtyp. Objektet består av följande:
name
displayName
categoryName
(Valfritt)displayName
att listas under categoryName
i användargränssnittet. Alla typer med samma categoryName
listas under samma kategori. Om tillägget till exempel innehöll en keyUp
-händelsetyp och en keyDown
-händelsetyp, och båda hade categoryName
av Keyboard
, skulle båda händelsetyperna listas under kategorin Tangentbord medan användaren väljer i listan över tillgängliga händelsetyper när en regel skapas. Värdet för categoryName
ska vara läsbart för människor.libPath
.js
.viewPath
(Valfritt)viewBasePath
och ska inte börja med ett snedstreck. Den måste referera till en HTML-fil med filnamnstillägget .html
. Frågesträngar och fragment-ID:n (hash) tillåts. Om typens biblioteksmodul inte använder några inställningar från en användare, kan du exkludera den här egenskapen. I stället visas en platshållare som anger att ingen konfiguration behövs.schema
Ett objekt av JSON Schema som beskriver formatet för ett giltigt inställningsobjekt som kan sparas av användaren. Inställningarna konfigureras och sparas vanligtvis av en användare med användargränssnittet i Datainsamling. I dessa fall kan tilläggsvyn vidta nödvändiga åtgärder för att validera de inställningar som användaren anger. Å andra sidan väljer vissa användare att använda tagg-API:er direkt utan hjälp av något användargränssnitt. Syftet med det här schemat är att göra det möjligt för Platform att på rätt sätt validera att inställningsobjekt som sparats av användare, oavsett om ett användargränssnitt används, har ett format som är kompatibelt med biblioteksmodulen som ska agera på inställningsobjektet vid körning.
Ett exempelschemaobjekt är följande:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"delay": {
"type": "number",
"minimum": 1
}
},
"required": [
"delay"
],
"additionalProperties": false
}
Vi rekommenderar att du använder ett verktyg som JSON-schemavalideraren för att manuellt testa ditt schema.
transforms
(Valfritt)Omformningar transforms
För vissa specifika användningsområden behöver tillägg inställningsobjekten som har sparats från en vy omvandlas av plattformen innan de skickas till taggens körtidsbibliotek. Du kan begära att en eller flera av dessa omformningar äger rum genom att ange egenskapen transforms
när du definierar en typdefinition i extension.json
. Egenskapen transforms
är en array med objekt där varje objekt representerar en omformning som ska utföras.
Alla omformningar kräver en type
och en propertyPath
. type
måste vara en av function
, remove
och file
och beskriver vilken transformeringsplattform som ska användas för inställningsobjektet. propertyPath
är en periodavgränsad sträng som anger var taggar ska hitta den egenskap som behöver ändras i inställningsobjektet. Här är ett exempel på inställningsobjekt och några propertyPath
s:
{
foo: {
bar: "A string",
baz: [
"A",
"B",
"C"
]
}
}
- Om du anger
propertyPath
avfoo.bar
omformas värdet"A string"
. - Om du anger
propertyPath
avfoo.baz[]
omformas varje värde i arrayenbaz
. - Om du anger
propertyPath
avfoo.baz
omformas arrayenbaz
.
Egenskapssökvägar kan använda valfri kombination av array- och objektnotation för att tillämpa omformningar på alla nivåer i inställningsobjektet.
propertyPath
(t.ex. foo.baz[]
) i verktyget för tilläggssandlåda*.Avsnitten nedan beskriver de tillgängliga omformningarna och hur de används.
Funktionsomformning
Funktionstransformeringen gör att kod som skrivits av plattformsanvändare kan köras av en biblioteksmodul i det utsända taggbiblioteket.
Låt oss anta att vi vill tillhandahålla en"anpassad manusåtgärd". Åtgärdsvyn för anpassade skript kan innehålla ett textområde där användaren kan ange kod. Låt oss anta att en användare har angett följande kod i textområdet:
console.log('Welcome, ' + username +'. This is ZomboCom.');
När användaren sparar regeln kan inställningsobjektet som sparas av vyn se ut så här:
{
foo: {
bar: "console.log('Welcome, ' + username +'. This is ZomboCom.');"
}
}
När en regel som använder vår åtgärd utlöses i taggens körtidsbibliotek, vill vi köra användarens kod och skicka den till ett användarnamn.
När inställningsobjektet sparas från åtgärdstypens vy är användarens kod bara en sträng. Detta är bra eftersom det kan serialiseras till och från JSON, men det är också dåligt eftersom det vanligtvis skulle ha släppts som en sträng i taggens körningsbibliotek i stället för som en körbar funktion. Även om du kan försöka köra koden i åtgärdstypens biblioteksmodul med eval
eller en funktionskonstruktor , rekommenderas det inte eftersom skyddsprofiler eventuellt blockerar körningen.
Som en tillfällig lösning på den här situationen kan du använda funktionsomformningen för att få Platform att kapsla in användarens kod i en körbar funktion när den släpps ut i taggens körningsbibliotek. För att lösa vårt exempelproblem definierar vi transformeringen för typdefinitionen i extension.json
enligt följande:
{
"transforms": [
{
"type": "function",
"propertyPath": "foo.bar",
"parameters": ["username"]
}
]
}
type
definierar den typ av omformning som ska användas på inställningsobjektet.propertyPath
är en periodavgränsad sträng som anger för plattformen var den egenskap som behöver ändras i inställningsobjektet ska hittas.parameters
är en array med parameternamn som ska inkluderas i radbrytningsfunktionens signatur.
När inställningsobjektet skickas i taggens körningsbibliotek omvandlas det till följande:
{
foo: {
bar: function(username) {
console.log('Welcome, ' + username +'. This is ZomboCom.');
}
}
}
Din biblioteksmodul kan sedan anropa funktionen som innehåller användarens kod och skicka argumentet username
.
Filomvandling
Med filtransformeringen kan kod som skrivits av plattformsanvändare skickas till en fil som är separat från taggens körningsbibliotek. Filen lagras tillsammans med taggens körtidsbibliotek och kan sedan läsas in efter behov av tillägget vid körning.
Låt oss anta att vi vill tillhandahålla en"anpassad manusåtgärd". Åtgärdstypens vy kan innehålla ett textområde där användaren kan ange kod. Låt oss anta att en användare har angett följande kod i textområdet:
console.log('This is ZomboCom.');
När användaren sparar regeln kan inställningsobjektet som sparas av vyn se ut så här:
{
foo: {
bar: "console.log('This is ZomboCom.');"
}
}
Vi vill att användarens kod ska placeras i en separat fil i stället för att inkluderas i taggens körningsbibliotek. När en regel som använder vår åtgärd utlöses i taggens körtidsbibliotek, vill vi läsa in användarens kod genom att lägga till ett skriptelement i dokumentets brödtext. För att lösa vårt exempelproblem definierar vi transformeringen för åtgärdstypdefinitionen i extension.json
enligt följande:
{
"transforms": [
{
"type": "file",
"propertyPath": "foo.bar"
}
]
}
type
definierar den typ av omformning som ska användas på inställningsobjektet.propertyPath
är en periodavgränsad sträng som anger för plattformen var den egenskap som behöver ändras i inställningsobjektet ska hittas.
När inställningsobjektet skickas i taggens körningsbibliotek omvandlas det till följande:
{
foo: {
bar: "//launch.cdn.com/path/abc.js"
}
}
I det här fallet har värdet foo.bar
omvandlats till en URL. Den exakta URL:en bestäms när biblioteket skapas. Filen får alltid tillägget .js
och levereras med en JavaScript-orienterad MIME-typ. Vi kan lägga till stöd för andra MIME-typer i framtiden.
Ta bort omformning
Som standard skickas alla egenskaper för inställningsobjektet i taggens körtidsbibliotek. Om vissa egenskaper bara används för tilläggsvyn, särskilt om de innehåller känslig information (t.ex. hemlig token) bör du använda omformningen remove för att förhindra att informationen skickas till taggens körningsbibliotek.
Låt oss anta att vi vill tillhandahålla en ny åtgärdstyp. Åtgärdstypens vy kan innehålla en inmatning där användaren kan ange en hemlig nyckel som tillåter anslutning till ett visst API. Låt oss anta att en användare har angett följande text i indata:
ABCDEFG
När användaren sparar regeln kan inställningsobjektet som sparas av vyn se ut så här:
{
foo: {
bar: "ABCDEFG"
}
}
Vi vill inte inkludera egenskapen bar
i taggens körningsbibliotek. För att lösa vårt exempelproblem definierar vi transformeringen för åtgärdstypdefinitionen i extension.json
enligt följande:
{
"transforms": [
{
"type": "remove",
"propertyPath": "foo.bar"
}
]
}
type
definierar den typ av omformning som ska användas på inställningsobjektet.propertyPath
är en periodavgränsad sträng som anger för plattformen var den egenskap som behöver ändras i inställningsobjektet ska hittas.
När inställningsobjektet skickas i taggens körningsbibliotek omvandlas det till följande:
{
foo: {
}
}
I det här fallet har värdet foo.bar
tagits bort från inställningsobjektet.