Hooks
Set hooks
You can define custom hooks to be executed on various events.
Thanks to this you will be able to interact with your website when a survey appears, or execute some custom code when a survey is submitted.
You can define hooks on Screeb.initSdk()
and Screeb.startSurvey()
commands. Hooks are all optional.
Available hooks
Hook Name | Available on Screeb.initSdk() | Available on Screeb.startSurvey() |
---|---|---|
onSurveyShowed | Yes ✅ | Yes ✅ |
onSurveyStarted | Yes ✅ | Yes ✅ |
onQuestionReplied | Yes ✅ | Yes ✅ |
onSurveyCompleted | Yes ✅ | Yes ✅ |
onSurveyHidden | Yes ✅ | Yes ✅ |
onAppStoreRatingTriggered | Yes ✅ | Yes ✅ |
onReady | Yes ✅ | No ❌ |
onSurveyDisplayAllowed | Yes ✅ | No ❌ |
Set hooks on SDK init
Screeb.initSdk(
context: window?.rootViewController,
channelId: "<ios-channel-id>",
identity: "<user-id>", // optional
visitorProperty: ["age": AnyEncodable(12), "name": AnyEncodable("JohnDoe")], // optional
initOptions: InitOptions(automaticScreenDetection: true|false), // optional
hooks: [
"version": "1.0.0",
"onReady": {(e:Any) -> () in print("Screeb sdk ready " + String(describing: e))},
"onSurveyDisplayAllowed": {(e:Any) -> Bool in print("onSurveyDisplayAllowed " + String(describing: e)); return true}
]
)
Set hooks on survey start
Screeb.startSurvey(
surveyId: "<ios-channel-id>",
allowMultipleResponses: true,
hiddenFields: [
"iosHidden1": AnyEncodable("hiddenField1"),
"iosHiddenCount": AnyEncodable(75)
],
hooks: [
"version": "1.0.0",
"onSurveyShowed": {(e:Any) -> () in print("Screeb survey showed " + String(describing: e))},
]
)
onSurveyShowed
Called when a survey is showed.
Example
Screeb.initSdk(this,
"<ios-channel-id>",
...
hooks: [
"version": "1.0.0",
"onSurveyShowed": {(e:Any) -> () in print("Screeb survey showed " + String(describing: e))},
]
)
Payload definition
{
channel: {
id: string,
type: "ios"
},
survey: {
id: string,
survey_position: "center-left" | "center-center" | "center-right" | "bottom-left" | "bottom-center" | "bottom-right",
survey_size: 25 | 50 | 75 | 100 | 125 | 150,
survey_format: "conversational" | "cards",
},
response: {
id: string,
items: {
question: {
id: string;
title: string;
type: "text" | "video";
url: string;
};
answer: {
fields: {
type: "string" | "number" | "boolean" | "none" | "time" | "url";
},
text: string;
number: number;
boolean: boolean;
time: Date;
url: string;
}[] | undefined;
replied_at: Date | undefined;
}[];
},
user: {
anonymous_id: string,
user_id: string,
}
}
onSurveyStarted
Called when a survey is started.
Example
Screeb.initSdk(this,
"<ios-channel-id>",
...
hooks: [
"version": "1.0.0",
"onSurveyStarted": {(e:Any) -> () in print("Screeb survey started " + String(describing: e))},
]
)
Payload definition
{
channel: {
id: string,
type: "ios"
},
survey: {
id: string,
survey_position: "center-left" | "center-center" | "center-right" | "bottom-left" | "bottom-center" | "bottom-right",
survey_size: 25 | 50 | 75 | 100 | 125 | 150,
survey_format: "conversational" | "cards",
},
response: {
id: string,
},
user: {
anonymous_id: string,
user_id: string,
}
}
onQuestionReplied
Called when a question is replied.
Example
Screeb.initSdk(this,
"<ios-channel-id>",
...
hooks: [
"version": "1.0.0",
"onQuestionReplied": {(e:Any) -> () in print("Screeb Question Replied " + String(describing: e))},
]
)
Payload definition
{
channel: {
id: string,
type: "ios"
},
survey: {
id: string,
survey_position: "center-left" | "center-center" | "center-right" | "bottom-left" | "bottom-center" | "bottom-right",
survey_size: 25 | 50 | 75 | 100 | 125 | 150,
survey_format: "conversational" | "cards",
},
response: {
id: string,
status: "started" | "ended" | "closed" | "interrupted"
question: {
id: string;
title: string;
type: "text" | "video";
url: string;
};
answer: {
fields: {
type: "string" | "number" | "boolean" | "none" | "time" | "url";
},
text: string;
number: number;
boolean: boolean;
time: Date;
url: string;
};
items: {
question: {
id: string;
title: string;
type: "text" | "video";
url: string;
};
answer: {
fields: {
type: "string" | "number" | "boolean" | "none" | "time" | "url";
},
text: string;
number: number;
boolean: boolean;
time: Date;
url: string;
}[] | undefined;
replied_at: Date | undefined;
}[];
},
user: {
anonymous_id: string,
user_id: string,
}
}
onSurveyCompleted
Called when a survey is completed.
Example
Screeb.initSdk(this,
"<ios-channel-id>",
...
hooks: [
"version": "1.0.0",
"onSurveyCompleted": {(e:Any) -> () in print("Screeb survey completed " + String(describing: e))},
]
)
Payload definition
{
channel: {
id: string,
type: "ios"
},
survey: {
id: string,
survey_position: "center-left" | "center-center" | "center-right" | "bottom-left" | "bottom-center" | "bottom-right",
survey_size: 25 | 50 | 75 | 100 | 125 | 150,
survey_format: "conversational" | "cards",
},
response: {
id: string,
items: {
question: {
id: string;
title: string;
type: "text" | "video";
url: string;
};
answer: {
fields: {
type: "string" | "number" | "boolean" | "none" | "time" | "url";
},
text: string;
number: number;
boolean: boolean;
time: Date;
url: string;
}[] | undefined;
replied_at: Date | undefined;
}[];
},
user: {
anonymous_id: string,
user_id: string,
}
}
onSurveyHidden
Called when a survey is hidden.
Example
Screeb.initSdk(this,
"<ios-channel-id>",
...
hooks: [
"version": "1.0.0",
"onSurveyHidden": {(e:Any) -> () in print("Screeb survey hidden " + String(describing: e))},
]
)
Payload definition
{
channel: {
id: string,
type: "ios"
},
survey: {
id: string,
survey_position: "center-left" | "center-center" | "center-right" | "bottom-left" | "bottom-center" | "bottom-right",
survey_size: 25 | 50 | 75 | 100 | 125 | 150,
survey_format: "conversational" | "cards",
},
response: {
id: string,
hide_reason: "started" | "ended" | "closed" | "interrupted",
items: {
question: {
id: string;
title: string;
type: "text" | "video";
url: string;
};
answer: {
fields: {
type: "string" | "number" | "boolean" | "none" | "time" | "url";
},
text: string;
number: number;
boolean: boolean;
time: Date;
url: string;
}[] | undefined;
replied_at: Date | undefined;
}[];
},
user: {
anonymous_id: string,
user_id: string,
}
}
onAppStoreRatingTriggered
Called when an App Store Rating question is triggered.
Example
Screeb.initSdk(this,
"<ios-channel-id>",
...
hooks: [
"version": "1.0.0",
"onAppStoreRatingTriggered": {(e:Any) -> () in print("Screeb app store rating triggered " + String(describing: e))},
]
)
Payload definition
{
channel: {
id: string,
type: "ios"
},
user: {
anonymous_id: string,
user_id: string,
}
}
onReady
Called when the SDK is ready. Only available on Screeb.initSdk()
.
Example
Screeb.initSdk(this,
"<ios-channel-id>",
...
hooks: [
"version": "1.0.0",
"onReady": {(e:Any) -> () in print("Screeb SDK ready " + String(describing: e))},
]
)
Payload definition
{
channel: {
id: string,
type: "ios"
},
user: {
anonymous_id: string,
user_id: string,
}
}
onSurveyDisplayAllowed
Called before a survey display to allow it or not. Only available on Screeb.initSdk()
.
Return a boolean value. Return false
to prevent display.
Example
Screeb.initSdk(this,
"<ios-channel-id>",
...
hooks: [
"version": "1.0.0",
"onSurveyDisplayAllowed": {(e:Any) -> Bool in print("Screeb survey display available " + String(describing: e)); return true},
]
)
Payload definition
{
channel: {
id: string,
type: "ios"
},
survey: {
id: string,
},
user: {
anonymous_id: string,
user_id: string,
}
}