Skip to content

Instantly share code, notes, and snippets.

@SibGent
Last active June 13, 2018 17:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save SibGent/7cac1ffe939683e49f2960889c631cb4 to your computer and use it in GitHub Desktop.
Save SibGent/7cac1ffe939683e49f2960889c631cb4 to your computer and use it in GitHub Desktop.
Corona SDK Feedback Dialog
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