Subscriptions Aren't Available For Most Users

Earlier this week we switched some of our gamepass benefits to Subscriptions. The developer docs mention no user-level restrictions to buying subscriptions, just that you need to be ID verified to CREATE subscriptions.

Not long after the switch, we suffered a huge loss in revenue because now not only could users no-longer buy the gamepasses, but they couldn’t sign up for the subscriptions at all. We’ve received several reports from users who are unable to buy subscriptions due to region restrictions, ID verification restrictions, and age restrictions.

To help recover from this loss, we’ve started offering the old gamepasses again, and I’d like to offer gamepasses by default in my in-game shop to users who are unable to buy into the subscription. However, there is nothing in MarketplaceService, or PolicyService that allows developers to check if users can buy subscriptions. This needs to be fixed ASAP.

4 Likes

This sounds more like a feature request than a bug report. May want to consider posting a feature request instead.

Also the documentation does mention this limitation within the first few paragraphs of the subscriptions guide:

Subscriptions will be rolled out to more regions in the future.

Unavailable regions include: Argentina, Canada, Chile, Colombia, India, Indonesia, Israel, Japan, Malaysia, Mexico, Peru, Philippines, Russia, Saudi Arabia, Switzerland, Taiwan, Thailand, Turkey, UAE, Ukraine, and Vietnam.
2 Likes

I agree, there should be a function to allow developers to check if the player’s region is allowed for Subscriptions.

One of the current alternative would be to use the LocalizationService.GetCountryRegionForPlayerAsync API for this. But it wouldn’t be the most supported option as it has to be constantly updated when the feature gets rolled out to more regions.

local LocalizationService = game:GetService("LocalizationService")

local countryCodes = {
	"AR", -- Argentina
	"CA", -- Canada
	"CL", -- Chile
	"CO", -- Colombia
	"IN", -- India
	"ID", -- Indonesia
	"IL", -- Israel
	"JP", -- Japan
	"MY", -- Malaysia
	"MX", -- Mexico
	"PE", -- Peru
	"PH", -- Philippines
	"RU", -- Russia
	"SA", -- Saudi Arabia
	"CH", -- Switzerland
	"TW", -- Taiwan
	"TH", -- Thailand
	"TR", -- Turkey
	"AE", -- UAE (United Arab Emirates)
	"UA", -- Ukraine
	"VN", -- Vietnam
}

local function getCountryRegionForPlayer(player: Player): (boolean, string)
	assert(player, "Please pass in a valid player!")

	return pcall(LocalizationService.GetCountryRegionForPlayerAsync, LocalizationService, player)
end

local function canBuySubscriptions(player: Player): boolean
	local result, playerCountryCode = getCountryRegionForPlayer(player)

	if not result then
		warn("Country code could not be gotten for player.")
		return false
	end

	-- Check if the player's country code is in the list of not allowed countries
	for _, notAllowedCode in ipairs(countryCodes) do
		if playerCountryCode == notAllowedCode then
			return false -- Player cannot buy subscriptions
		end
	end

	return true -- Player can buy subscriptions
end

This is a pretty good solution for the country issue. I hope Roblox will announce when they come available in some of these countries.

(Also your code is very good, but it probably would’ve been better to use table.find )

1 Like

Thanks for the report. We’ll follow up when we have an update for you!