Extensie manifest
In de basismap van uw extensie moet u een bestand maken met de naam extension.json
. Dit bevat belangrijke informatie over uw extensie waarmee Adobe Experience Platform deze correct kan gebruiken. Een deel van de inhoud wordt gevormd na de wijze van npm's package.json
.
Een voorbeeld extension.json
kan de Hello World-extensie GitHub-opslagplaats.
Een extensiemanifest moet uit het volgende bestaan:
name
platform
web
.version
displayName
description
iconPath
(Optioneel).svg
extensie. De SVG moet vierkant zijn en kan met Platform worden geschaald.author
De "auteur" is een object dat als volgt moet worden gestructureerd:
name
: De naam van de auteur van de extensie. De bedrijfsnaam kan hier ook worden gebruikt.url
(Optioneel): Een URL waar u meer informatie kunt vinden over de auteur van de extensie.email
(Optioneel): Het e-mailadres van de auteur van de extensie.
Dit is in overeenstemming met npm-auteurveld regels.
exchangeUrl
(Vereist voor openbare extensies)https://www.adobeexchange.com/experiencecloud.details.######.html
.viewBasePath
src/view/
, de waarde van viewBasePath
zou src/view/
.hostedLibFiles
(Optioneel)Deze optie bevat een array met relatieve paden van bibliotheekbestanden van derden die moeten worden gehost.
main
(Optioneel)Deze module wordt altijd opgenomen in de runtimebibliotheek en uitgevoerd. 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.
Het is niet gegarandeerd dat deze module eerst wordt 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 module-object 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 modules. Deze naam wordt nooit weergegeven in een gebruikersinterface. Het zou uniek van de namen van andere gedeelde modules binnen uw uitbreiding moeten zijn en moet voldoen aan naamgevingsregels. Dit wordt gebruikt door tags als id en mag niet worden gewijzigd nadat u de extensie hebt gepubliceerd.libPath
: Het relatieve pad naar de gedeelde module. Het mag niet beginnen met een schuine streep. Er moet worden verwezen naar een JavaScript-bestand met een.js
extensie.
Aanhangsel
Naamgevingsregels naming-rules
De waarde van name
veld binnen extension.json
moeten voldoen aan de volgende voorschriften:
- 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 in overeenstemming met npm-pakketnaam regels.
Eigenschappen van Configuration-objecten config-object
Het configuratieobject moet als volgt zijn gestructureerd:
viewPath
viewBasePath
en mag niet met een schuine streep beginnen. Het moet verwijzen naar een HTML-bestand met een .html
extensie. Achtervoegsels van queryreeksen en -fragmenten (hashes) zijn acceptabel.schema
Een object van JSON Schema beschrijvend 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 zal ook voor bevestiging worden gebruikt wanneer de gebruikers proberen om gegevens te bewaren gebruikend de diensten van het Platform.
Een voorbeeldschemaobject is als volgt:
{ "$schema": "http://json-schema.org/draft-04/schema#", "type": "object", "eigenschappen": { "delay": { "type": "number", "minimum": 1} }, "required": [ "delay" ], "additionalProperties": false }
We raden u aan een gereedschap te gebruiken zoals JSON-schemavalidator om het schema handmatig 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
wordt vermeld onder de categoryName
in de gebruikersinterface. Alle typen met hetzelfde categoryName
worden onder dezelfde rubriek vermeld. Als uw extensie bijvoorbeeld een keyUp
gebeurtenistype en een keyDown
gebeurtenistype en beide hadden een categoryName
van Keyboard
beide gebeurtenistypen worden vermeld onder de categorie Toetsenbord terwijl de gebruiker een regel maakt en een keuze maakt uit de lijst met beschikbare gebeurtenistypen. De waarde van categoryName
moet leesbaar zijn voor de mens.libPath
.js
extensie.viewPath
(Optioneel)viewBasePath
en mag niet met een schuine streep beginnen. Het moet verwijzen naar een HTML-bestand met een .html
extensie. 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 het Platform zal in plaats daarvan placeholder tonen verklaren die dat geen configuratie noodzakelijk is.schema
Een object van JSON Schema beschrijvend het formaat van een geldig montagesobject 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 correct 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 voorbeeldschemaobject is als volgt:
{ "$schema": "http://json-schema.org/draft-04/schema#", "type": "object", "eigenschappen": { "delay": { "type": "number", "minimum": 1} }, "required": [ "delay" ], "additionalProperties": false }
We raden u aan een gereedschap te gebruiken zoals JSON-schemavalidator om het schema handmatig te testen.
transforms
(Optioneel)Transformaties transforms
Voor bepaalde specifieke gebruiksgevallen moeten de instellingsobjecten die zijn opgeslagen vanuit een weergave, door het Platform worden getransformeerd voordat ze worden uitgestraald in de runtimebibliotheek van de tag. U kunt verzoeken dat een of meer van deze transformaties plaatsvinden door het instellen van de transforms
eigenschap bij het definiëren van een typedefinitie binnen uw extension.json
. De transforms
eigenschap is een array van objecten waarin elk object een transformatie vertegenwoordigt die moet plaatsvinden.
Voor alle transformaties is een type
en propertyPath
. De type
moet een van function
, remove
, en file
en beschrijft welk Platform van de transformatie op het montagesobject zou moeten van toepassing zijn. De propertyPath
is een door een punt gescheiden tekenreeks die tags opgeeft waar de eigenschap moet worden gevonden die binnen het instellingsobject moet worden gewijzigd. Hier volgt een voorbeeld van een instellingenobject en enkele propertyPath
s:
{
foo: {
bar: "A string",
baz: [
"A",
"B",
"C"
]
}
}
- Als u een
propertyPath
vanfoo.bar
u de"A string"
waarde. - Als u een
propertyPath
vanfoo.baz[]
u zou elke waarde inbaz
array. - Als u een
propertyPath
vanfoo.baz
u debaz
array.
Eigenschapspaden kunnen elke combinatie van array- en objectnotatie gebruiken om transformaties toe te passen op elk niveau van het instellingsobject.
propertyPath
kenmerk (bijvoorbeeld foo.baz[]
) wordt nog niet ondersteund in de extensiesandbox*tool.In de onderstaande secties worden de beschikbare transformaties beschreven en hoe u deze kunt gebruiken.
Functietransformatie
Met de functietransformatie kan code die door gebruikers van het Platform is geschreven, worden uitgevoerd door een bibliotheekmodule in de uitgestoten 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 worden geserialiseerd; het is echter ook ongeldig omdat het normaal gesproken ook als tekenreeks in de tagruntime-bibliotheek wordt weergegeven in plaats van als een uitvoerbare functie. Hoewel u kon proberen om de code binnen de de bibliotheekmodule van uw actietype uit te voeren gebruikend eval
of Constructor Function, is het sterk ontmoedigd vanwege beleid voor inhoudsbeveiliging mogelijk blokkerende 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:
{
"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 het Platform opgeeft waar de eigenschap moet worden gevonden die binnen het instellingsobject moet worden gewijzigd.parameters
is een array met parameternamen die moet worden opgenomen in de handtekening van de wrapping-functie.
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 dan de functie aanroepen die de code van de gebruiker bevat en de username
argument.
Bestandstransformatie
Met de bestandstransformatie kan code die door gebruikers van het Platform is geschreven, worden verzonden naar een bestand dat losstaat van de runtimebibliotheek van de tag. Het bestand wordt samen met de tagruntime-bibliotheek gehost en kan vervolgens tijdens runtime naar wens door de extensie worden geladen.
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, binnen de tagruntime bibliotheek wordt geactiveerd, willen wij de code van de gebruiker laden door een scriptelement aan de documenttekst toe te voegen. Om ons voorbeeldprobleem op te lossen, zouden wij de transformatie op de definitie van actietype in extension.json
als volgt:
{
"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 het 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 dat geval moet de waarde van foo.bar
is getransformeerd naar een URL. De exacte URL wordt bepaald op het moment dat de bibliotheek wordt gemaakt. Het bestand krijgt altijd een .js
en 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"
}
}
We willen de eigendom niet opnemen bar
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:
{
"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 het 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 dat geval moet de waarde van foo.bar
is verwijderd uit het instellingenobject.