Corona SDK集成社交网络:实现Facebook、Twitter分享及应用检测
Hey there! Let's tackle this step by step—first checking if Facebook/Twitter are installed on the user's device, then implementing the share functionality. Here's everything you need to make this work with Corona SDK:
Corona SDK uses system.canOpenURL() to check if a specific app's URL scheme is recognized (which means the app is installed). You'll need to use the official URL schemes for each platform, plus configure your build settings to allow these checks.
Step 1.1: Add Required Configs to build.settings
First, update your build.settings to whitelist the URL schemes for iOS and Android—this ensures the system lets your app check for the presence of Facebook/Twitter:
settings = { android = { intentFilters = { -- Facebook intent filter { action = "android.intent.action.VIEW", category = { "android.intent.category.DEFAULT", "android.intent.category.BROWSABLE" }, data = { scheme = "fb" }, }, -- Twitter intent filter { action = "android.intent.action.VIEW", category = { "android.intent.category.DEFAULT", "android.intent.category.BROWSABLE" }, data = { scheme = "twitter" }, }, }, -- Other Android configs... }, iphone = { plist = { LSApplicationQueriesSchemes = { "fb", "twitter" }, -- Other iOS configs... }, }, -- General configs... }
Step 1.2: Create a Detection Function
Make a reusable function to check for app installation:
local function isAppInstalled(appScheme) -- Returns true if the app is installed, false otherwise return system.canOpenURL(appScheme) end -- Usage examples local isFacebookInstalled = isAppInstalled("fb://") local isTwitterInstalled = isAppInstalled("twitter://")
Once you've confirmed the app is installed, use Corona's native social popup to trigger sharing. If the app isn't installed, prompt the user to install it or fall back to web-based sharing.
2.1 Facebook Sharing
local function shareToFacebook(content) if isFacebookInstalled then -- Use native popup to share directly via Facebook app native.showPopup("social", { service = "facebook", message = content.message, image = content.image, -- Example: { filename = "share-img.png", baseDir = system.ResourceDirectory } url = content.url, listener = function(event) if event.action == "cancelled" then print("Facebook share cancelled") elseif event.action == "completed" then print("Facebook share successful") end end }) else -- Fallback: Prompt user to install Facebook or use web share native.showAlert("Notice", "Facebook app isn't installed. Would you like to get it?", { "Yes", "Cancel" }, function(event) if event.index == 1 then -- Open app store (adjust URLs for your target platform) system.openURL("https://play.google.com/store/apps/details?id=com.facebook.katana") -- Android -- system.openURL("https://apps.apple.com/us/app/facebook/id284882215") -- iOS end end) end end -- Call the share function (replace with your content) shareToFacebook({ message = "Check out this awesome content from my app!", image = { filename = "my-share-image.jpg", baseDir = system.ResourceDirectory }, url = "https://my-app-content.com" })
2.2 Twitter Sharing
Twitter works similarly, with a few tweaks to the content (Twitter limits message length and auto-includes URLs):
local function shareToTwitter(content) if isTwitterInstalled then native.showPopup("social", { service = "twitter", message = content.message .. " " .. content.url, -- Combine message and URL image = content.image, listener = function(event) if event.action == "cancelled" then print("Twitter share cancelled") elseif event.action == "completed" then print("Twitter share successful") end end }) else native.showAlert("Notice", "Twitter app isn't installed. Would you like to get it?", { "Yes", "Cancel" }, function(event) if event.index == 1 then system.openURL("https://play.google.com/store/apps/details?id=com.twitter.android") -- Android -- system.openURL("https://apps.apple.com/us/app/twitter/id333903271") -- iOS end end) end end -- Call the share function shareToTwitter({ message = "Loving this app feature!", image = { filename = "twitter-share-img.png", baseDir = system.ResourceDirectory }, url = "https://my-app-content.com" })
- For Facebook, ensure you've registered your app with Facebook and added your app ID to
build.settings(required for some advanced sharing features). - Test on physical devices—emulators/simulators might not always recognize installed apps correctly.
- Keep share messages concise, especially for Twitter, to avoid truncation.
内容的提问来源于stack exchange,提问作者MobTech

