Last active
June 13, 2018 17:05
-
-
Save SibGent/7cac1ffe939683e49f2960889c631cb4 to your computer and use it in GitHub Desktop.
Corona SDK Feedback Dialog
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
local Feedback = {} | |
local isInit | |
local preference | |
local setOptions | |
, initFeedback | |
, canShowFeedback | |
, onComplete | |
, openStore | |
, markFeedbackAsVoted | |
, closeFeedback | |
local FEEDBACK_TITLE = "Rate our App" | |
local FEEDBACK_MESSAGE = "If you like our app, please take a moment to rate it in store!" | |
local FEEDBACK_POSITIVE = "RATE NOW" | |
local FEEDBACK_NEGATIVE = "LATER" | |
local FEEDBACK_FIRST = 126900 | |
local FEEDBACK_LATER = 84600 | |
function Feedback.init(options) | |
if not isInit then | |
setOptions(options) | |
isInit = pcall(initFeedback) | |
end | |
end | |
function Feedback.show() | |
if isInit and canShowFeedback() then | |
native.showAlert(FEEDBACK_TITLE, FEEDBACK_MESSAGE, { FEEDBACK_POSITIVE, FEEDBACK_NEGATIVE }, onComplete) | |
end | |
end | |
function setOptions(options) | |
local options = options or {} | |
FEEDBACK_TITLE = options.title or FEEDBACK_TITLE | |
FEEDBACK_MESSAGE = options.message or FEEDBACK_MESSAGE | |
FEEDBACK_POSITIVE = options.positive or FEEDBACK_POSITIVE | |
FEEDBACK_NEGATIVE = options.negative or FEEDBACK_NEGATIVE | |
FEEDBACK_FIRST = options.first or FEEDBACK_FIRST | |
FEEDBACK_LATER = options.later or FEEDBACK_LATER | |
end | |
function initFeedback() | |
preference = { | |
feedback_is_rated = system.getPreference("app", "feedback_is_rated", "boolean") or false, | |
feedback_trigger_time = system.getPreference("app", "feedback_trigger_time", "string") or tostring(os.time() + FEEDBACK_FIRST) | |
} | |
system.setPreferences("app", preference) | |
end | |
function canShowFeedback() | |
local currentTime = os.time() | |
local triggerTime = tonumber(preference["feedback_trigger_time"]) | |
local isRated = preference["feedback_is_rated"] | |
local canShow = false | |
if not isRated and currentTime > triggerTime then | |
canShow = true | |
end | |
return canShow | |
end | |
function onComplete(event) | |
if event.action == "clicked" then | |
if event.index == 1 then | |
openStore() | |
elseif event.index == 2 then | |
closeFeedback() | |
end | |
elseif event.action == "cancelled" then | |
closeFeedback() | |
end | |
end | |
function openStore() | |
local package = system.getInfo("androidAppPackageName") or "" | |
local url = "market://details?id=" .. package | |
if system.canOpenURL(url) then | |
system.openURL(url) | |
end | |
markFeedbackAsVoted() | |
end | |
function markFeedbackAsVoted() | |
preference["feedback_is_rated"] = true | |
system.setPreferences("app", preference) | |
end | |
function closeFeedback() | |
preference["feedback_trigger_time"] = tostring(os.time() + FEEDBACK_LATER) | |
system.setPreferences("app", preference) | |
end | |
return Feedback |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment