Extensie manifest
In de basismap van de extensie moet u een bestand met de naam extension.json
maken. Dit bevat belangrijke informatie over uw extensie waarmee Adobe Experience Platform deze correct kan gebruiken. Sommige inhoud wordt gevormd na de manier van npm package.json
.
Een voorbeeld extension.json
kan de uitbreiding van de Wereld van Hellobewaarplaats GitHub worden gevonden.
Een extensiemanifest moet uit het volgende bestaan:
name
platform
web
.version
displayName
description
iconPath
(Optioneel).svg
. De SVG moet vierkant zijn en kan op Platform worden geschaald.author
De "auteur" is een object met de volgende structuur:
name
: De naam van de auteur van de extensie. De bedrijfsnaam kan hier ook worden gebruikt.url
(Facultatief): Een URL waar u meer over de uitbreidingsauteur kunt weten.email
(Facultatief): Het e-mailadres van de auteur van de uitbreiding.
Dit is verenigbaar met npm auteursgebiedregels.
exchangeUrl
(Vereist voor openbare extensies)https://www.adobeexchange.com/experiencecloud.details.######.html
.viewBasePath
src/view/
bevinden, is de waarde van viewBasePath
gelijk aan src/view/
.hostedLibFiles
(Optioneel)deze optie bevat een serie met relatieve wegen van derdebibliotheekdossiers die moeten worden ontvangen.
main
(Optioneel)deze module zal altijd inbegrepen in de runtime bibliotheek en uitgevoerd zijn. Omdat de module altijd is opgenomen in de runtimebibliotheek, raden we u aan alleen een 'main'-module te gebruiken als dit absoluut noodzakelijk is en de codegrootte minimaal te houden.
Deze module wordt gegarandeerd niet eerst worden uitgevoerd; andere modules kunnen vóór het worden uitgevoerd.
configuration
(Optioneel)events
(Optioneel)conditions
(Optioneel)actions
(Optioneel)dataElements
(Optioneel)sharedModules
(Optioneel)Een array van gezamenlijke moduledefinitieobjecten. Elk gezamenlijk moduleobject in de array moet als volgt zijn gestructureerd:
name
: De naam van de gedeelde module. Merk op dat deze naam zal worden gebruikt wanneer het van verwijzingen voorzien van gedeelde modules van andere uitbreidingen zoals die in Gedeelde Modulesworden beschreven. Deze naam wordt nooit weergegeven in een gebruikersinterface. Het zou van de namen van andere gedeelde modules binnen uw uitbreiding uniek moeten zijn en moet het noemen regelsnaleven. dit wordt gebruikt door markeringen als herkenningsteken en zou niet moeten worden veranderd nadat u uw uitbreiding publiceert.libPath
: Het relatieve pad naar de gedeelde module. Het mag niet beginnen met een slash. Er moet worden verwezen naar een JavaScript-bestand met een extensie.js
.
Bijlage
Naamgevingsregels naming-rules
De waarde van elk name
veld in extension.json
moet aan de volgende regels voldoen:
- Moet uit maximaal 214 tekens bestaan
- Mag niet met een punt of een onderstrepingsteken beginnen
- Mag geen hoofdletters bevatten
- Alleen URL-veilige tekens bevatten
Deze zijn verenigbaar met npm pakketnaamregels.
Eigenschappen van Configuration-objecten config-object
Het configuratieobject moet als volgt zijn gestructureerd:
viewPath
viewBasePath
en mag niet beginnen met een schuine streep. De extensie moet verwijzen naar een HTML-bestand met de extensie .html
. Achtervoegsels van queryreeksen en -fragmenten (hashes) zijn acceptabel.schema
Een voorwerp van JSON Schemabeschrijvend het formaat van een geldig voorwerp dat van de mening van de uitbreidingsconfiguratie wordt bewaard. Aangezien u de ontwikkelaar van de configuratiemening bent, is het uw verantwoordelijkheid om ervoor te zorgen dat om het even welk die montagesvoorwerp aan dit schema aanpast. Dit schema wordt ook gebruikt voor validatie wanneer gebruikers gegevens proberen op te slaan met behulp van de platformservices.
een voorwerp van het voorbeeldschema is als volgt:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"delay": {
"type": "number",
"minimum": 1
}
},
"required": [
"delay"
],
"additionalProperties": false
}
Wij adviseren gebruikend een hulpmiddel zoals JSON- Schema validatorom uw schema manueel te testen.
transforms
(Optioneel)Typedefinities type-definitions
Een typedefinitie is een voorwerp dat wordt gebruikt om een gebeurtenis, een voorwaarde, een actie, of type van gegevenselement te beschrijven. Het object bestaat uit het volgende:
name
displayName
categoryName
(Optioneel)displayName
weergegeven onder categoryName
in de gebruikersinterface. Alle typen met dezelfde categoryName
worden in dezelfde categorie vermeld. Als uw extensie bijvoorbeeld een gebeurtenistype keyUp
en een gebeurtenistype keyDown
heeft en beide een categoryName
van Keyboard
hebben, worden beide gebeurtenistypen weergegeven onder de categorie Keyboard terwijl de gebruiker een optie selecteert uit de lijst met beschikbare gebeurtenistypen wanneer een regel wordt gemaakt. De waarde van categoryName
moet leesbaar zijn voor de mens.libPath
.js
.viewPath
(Optioneel)viewBasePath
en mag niet beginnen met een schuine streep. De extensie moet verwijzen naar een HTML-bestand met de extensie .html
. Zoektekenreeksen en fragmentid's (hashes) zijn acceptabel. Als de de bibliotheekmodule van uw type geen montages van een gebruiker gebruikt, kunt u dit bezit uitsluiten en Platform zal in plaats daarvan placeholder tonen verklaren dat geen configuratie noodzakelijk is.schema
Een voorwerp van JSON Schemabeschrijvend het formaat van een geldig montagesvoorwerp dat door de gebruiker kan worden bewaard. De montages worden gewoonlijk gevormd en door een gebruiker bewaard gebruikend het gebruikersinterface van de Inzameling van Gegevens. In deze gevallen kan de weergave van de extensie de nodige stappen ondernemen om door de gebruiker opgegeven instellingen te valideren. Anderzijds kiezen sommige gebruikers ervoor om tags-API's rechtstreeks te gebruiken zonder de hulp van een gebruikersinterface. Het doel van dit schema is Platform toe te staan om behoorlijk te bevestigen dat de montagesobjecten die door gebruikers worden bewaard, ongeacht of een gebruikersinterface wordt gebruikt, in een formaat zijn dat met de bibliotheekmodule compatibel is die op het montagesobject tijdens runtime zal handelen.
een voorwerp van het voorbeeldschema is als volgt:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"delay": {
"type": "number",
"minimum": 1
}
},
"required": [
"delay"
],
"additionalProperties": false
}
Wij adviseren gebruikend een hulpmiddel zoals JSON- Schema validatorom uw schema manueel te testen.
transforms
(Optioneel)Transformaties transforms
Voor bepaalde specifieke gebruiksgevallen hebben extensies de instellingsobjecten die zijn opgeslagen vanuit een weergave nodig om door Platform te worden getransformeerd voordat ze worden uitgestraald in de runtimebibliotheek van de tag. U kunt vragen dat een of meer van deze transformaties plaatsvinden door de eigenschap transforms
in te stellen wanneer u een typedefinitie definieert binnen uw extension.json
. De eigenschap transforms
is een array van objecten waarin elk object een transformatie vertegenwoordigt die moet plaatsvinden.
Voor alle transformaties zijn een type
en een propertyPath
vereist. De instructie type
moet function
, remove
en file
zijn en beschrijft welk transformatieplatform op het instellingsobject moet worden toegepast. propertyPath
is een door een punt gescheiden tekenreeks die tags doorgeeft waar de eigenschap moet worden gevonden die binnen het instellingsobject moet worden gewijzigd. Hier is een voorwerp van voorbeeldmontages en sommige propertyPath
s:
{
foo: {
bar: "A string",
baz: [
"A",
"B",
"C"
]
}
}
- Als u een
propertyPath
vanfoo.bar
instelt, transformeert u de"A string"
-waarde. - Als u een
propertyPath
vanfoo.baz[]
instelt, transformeert u elke waarde in debaz
-array. - Als u een
propertyPath
vanfoo.baz
instelt, transformeert u de arraybaz
.
Eigenschapspaden kunnen elke combinatie van array- en objectnotatie gebruiken om transformaties toe te passen op elk niveau van het instellingsobject.
propertyPath
(bijvoorbeeld foo.baz[]
) wordt nog niet ondersteund in de uitbreidingssandbox*tool.In de onderstaande secties worden de beschikbare transformaties beschreven en hoe u deze kunt gebruiken.
Functietransformatie
Met de functietransformatie kan code die door platformgebruikers wordt geschreven, worden uitgevoerd door een bibliotheekmodule binnen de uitgestraalde runtimebibliotheek.
Laten we aannemen dat we een handelingstype 'aangepast script' willen opgeven. De actieweergave "aangepast script" kan een tekstgebied bevatten waarin de gebruiker code kan invoeren. Laten we aannemen dat een gebruiker de volgende code in het tekstgebied heeft ingevoerd:
console.log('Welcome, ' + username +'. This is ZomboCom.');
Wanneer de gebruiker de regel opslaat, ziet het instellingsobject dat in de weergave is opgeslagen er mogelijk als volgt uit:
{
foo: {
bar: "console.log('Welcome, ' + username +'. This is ZomboCom.');"
}
}
Wanneer een regel die onze actie gebruikt, in de runtimebibliotheek van de tag wordt geactiveerd, willen we de code van de gebruiker uitvoeren en deze een gebruikersnaam doorgeven.
Op het punt dat het instellingsobject wordt opgeslagen vanuit de weergave van het handelingstype, is de code van de gebruiker gewoon een tekenreeks. Dit is goed omdat het behoorlijk aan en van JSON kan behoorlijk in series worden vervaardigd; nochtans, is het ook slecht omdat het typisch in de markering runtime bibliotheek als koord evenals in plaats van een uitvoerbare functie zou worden uitgestoten. Hoewel u kon proberen om de code binnen de de bibliotheekmodule van uw actietype uit te voeren gebruikend eval
of de aannemer van de Functie van a 🔗, is het hoogst ontmoedigd toe te schrijven aan inhoudsveiligheidsbeleidpotentieel blokkerend uitvoering.
Als tussenoplossing voor deze situatie, vertelt het gebruiken van de functietransformatie Platform om de code van de gebruiker in een uitvoerbare functie te verpakken wanneer het in de markering runtime bibliotheek wordt uitgegeven. Om ons voorbeeldprobleem op te lossen, zouden wij de transformatie op de typedefinitie in extension.json
als volgt bepalen:
{
"transforms": [
{
"type": "function",
"propertyPath": "foo.bar",
"parameters": ["username"]
}
]
}
type
definieert het type transformatie dat op het instellingsobject moet worden toegepast.propertyPath
is een door een punt gescheiden tekenreeks die Platform opgeeft waar de eigenschap moet worden gevonden die binnen het instellingsobject moet worden gewijzigd.parameters
is een array met parameternamen die moeten worden opgenomen in de handtekening van de functie wrapping.
Wanneer het instellingsobject wordt uitgestraald in de tagruntime-bibliotheek, wordt het als volgt getransformeerd:
{
foo: {
bar: function(username) {
console.log('Welcome, ' + username +'. This is ZomboCom.');
}
}
}
Uw bibliotheekmodule kan vervolgens de functie met de code van de gebruiker aanroepen en het argument username
doorgeven.
Bestandstransformatie
Met de bestandstransformatie kan code die door platformgebruikers is geschreven, worden verzonden naar een bestand dat losstaat van de runtimebibliotheek. Het bestand wordt samen met de tagruntime-bibliotheek gehost en kan vervolgens tijdens runtime naar wens worden geladen door de extensie.
Laten we aannemen dat we een handelingstype 'aangepast script' willen opgeven. De weergave van het handelingstype kan een tekstgebied bevatten waarin de gebruiker code kan invoeren. Laten we aannemen dat een gebruiker de volgende code in het tekstgebied heeft ingevoerd:
console.log('This is ZomboCom.');
Wanneer de gebruiker de regel opslaat, ziet het instellingsobject dat in de weergave is opgeslagen er mogelijk als volgt uit:
{
foo: {
bar: "console.log('This is ZomboCom.');"
}
}
We willen dat de code van de gebruiker in een afzonderlijk bestand wordt geplaatst in plaats van in de runtimebibliotheek van de tag. Wanneer een regel die onze actie gebruikt in de tagruntime-bibliotheek wordt geactiveerd, willen we de code van de gebruiker laden door een scriptelement aan de hoofdtekst van het document toe te voegen. Om ons voorbeeldprobleem op te lossen, zouden wij de transformatie op de definitie van actietype in extension.json
als volgt bepalen:
{
"transforms": [
{
"type": "file",
"propertyPath": "foo.bar"
}
]
}
type
definieert het type transformatie dat op het instellingsobject moet worden toegepast.propertyPath
is een door een punt gescheiden tekenreeks die Platform opgeeft waar de eigenschap moet worden gevonden die binnen het instellingsobject moet worden gewijzigd.
Wanneer het instellingsobject wordt uitgestraald in de tagruntime-bibliotheek, wordt het als volgt getransformeerd:
{
foo: {
bar: "//launch.cdn.com/path/abc.js"
}
}
In dit geval is de waarde van foo.bar
getransformeerd naar een URL. De exacte URL wordt bepaald op het moment dat de bibliotheek wordt gemaakt. Het bestand krijgt altijd de extensie .js
en wordt geleverd met een JavaScript-georiënteerd MIME-type. In de toekomst kunnen we ondersteuning toevoegen voor andere MIME-typen.
Transformatie verwijderen
Standaard worden alle eigenschappen van het instellingsobject weergegeven in de runtimebibliotheek van de tag. Als bepaalde eigenschappen alleen worden gebruikt voor de extensieweergave, vooral als deze vertrouwelijke informatie bevatten (bijvoorbeeld geheime token), moet u de transformatie voor verwijderen gebruiken om te voorkomen dat de informatie wordt uitgestoten in de runtimebibliotheek van de tag.
Laten we aannemen dat we een nieuw actietype willen aanbieden. De weergave van het actietype kan een invoer bevatten waarin de gebruiker een geheime sleutel kan invoeren die verbinding met een specifieke API mogelijk maakt. Laten we aannemen dat een gebruiker de volgende tekst in de invoer heeft ingevoerd:
ABCDEFG
Wanneer de gebruiker de regel opslaat, ziet het instellingsobject dat in de weergave is opgeslagen er mogelijk als volgt uit:
{
foo: {
bar: "ABCDEFG"
}
}
De eigenschap bar
wordt niet opgenomen in de runtimebibliotheek van de tag. Om ons voorbeeldprobleem op te lossen, zouden wij de transformatie op de definitie van actietype in extension.json
als volgt bepalen:
{
"transforms": [
{
"type": "remove",
"propertyPath": "foo.bar"
}
]
}
type
definieert het type transformatie dat op het instellingsobject moet worden toegepast.propertyPath
is een door een punt gescheiden tekenreeks die Platform opgeeft waar de eigenschap moet worden gevonden die binnen het instellingsobject moet worden gewijzigd.
Wanneer het instellingsobject wordt uitgestraald in de tagruntime-bibliotheek, wordt het als volgt getransformeerd:
{
foo: {
}
}
In dit geval is de waarde van foo.bar
verwijderd uit het instellingenobject.