first commit

This commit is contained in:
2024-11-07 08:32:35 +07:00
commit ccebcee62b
92 changed files with 3009 additions and 0 deletions

38
ios/.gitignore vendored Normal file
View File

@@ -0,0 +1,38 @@
.idea/
.vagrant/
.sconsign.dblite
.svn/
.DS_Store
*.swp
profile
DerivedData/
build/
GeneratedPluginRegistrant.h
GeneratedPluginRegistrant.m
.generated/
*.pbxuser
*.mode1v3
*.mode2v3
*.perspectivev3
!default.pbxuser
!default.mode1v3
!default.mode2v3
!default.perspectivev3
xcuserdata
*.moved-aside
*.pyc
*sync/
Icon?
.tags*
/Flutter/Generated.xcconfig
/Flutter/ephemeral/
/Flutter/flutter_export_environment.sh

0
ios/Assets/.gitkeep Normal file
View File

View File

@@ -0,0 +1,167 @@
import Flutter
import UIKit
public class CustomSocialSharePlugin: NSObject, FlutterPlugin {
public static func register(with registrar: FlutterPluginRegistrar) {
let channel = FlutterMethodChannel(name: "custom_social_share", binaryMessenger: registrar.messenger())
let instance = CustomSocialSharePlugin()
registrar.addMethodCallDelegate(instance, channel: channel)
}
public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
let content: String
if call.arguments == nil {
content = ""
} else {
content = (call.arguments as! [String: Any])["content"] as? String ?? ""
}
switch call.method {
case "sms":
let urlSchema = "sms:?&body=\(content)"
launchURL(hookUrl: urlSchema, result: result)
break
case "email":
let urlSchema = "mailto:?&body=\(content)"
launchURL(hookUrl: urlSchema, result: result)
break
case "toAll":
let textShare = [ content ]
let activityViewController = UIActivityViewController(activityItems: textShare , applicationActivities: nil)
let controller = UIApplication.shared.keyWindow?.rootViewController
activityViewController.popoverPresentationController?.sourceView = controller?.view
controller?.present(activityViewController, animated: true)
break
case "getInstalledApps":
var installedApps: [String: Bool] = [:]
installedApps["sms"] = canOpenApp(appName: "sms")
installedApps["email"] = canOpenApp(appName: "mailto")
installedApps["facebook"] = canOpenApp(appName: "fb")
installedApps["facebookMessenger"] = canOpenApp(appName: "fb-messenger")
installedApps["instagram"] = canOpenApp(appName: "instagram")
installedApps["line"] = canOpenApp(appName: "line")
installedApps["linkedin"] = canOpenApp(appName: "linkedin")
installedApps["reddit"] = canOpenApp(appName: "reddit")
installedApps["skype"] = canOpenApp(appName: "skype")
installedApps["slack"] = canOpenApp(appName: "slack")
installedApps["snapchat"] = canOpenApp(appName: "snapchat")
installedApps["telegram"] = canOpenApp(appName: "tg")
installedApps["x"] = canOpenApp(appName: "twitter")
installedApps["viber"] = canOpenApp(appName: "viber")
installedApps["wechat"] = canOpenApp(appName: "weixin")
installedApps["whatsapp"] = canOpenApp(appName: "whatsapp")
installedApps["threads"] = canOpenApp(appName: "threads")
result(installedApps)
break
case "facebook":
let urlSchema = "fb://text=\(content)"
launchURL(hookUrl: urlSchema, result: result)
break
case "facebookMessenger":
let urlSchema = "fb-messenger://text=\(content)"
launchURL(hookUrl: urlSchema, result: result)
break
case "instagram":
let urlSchema = "instagram://text=\(content)"
launchURL(hookUrl: urlSchema, result: result)
break
case "line":
let urlSchema = "https://line.me/R/msg/text/?\(content)"
launchURL(hookUrl: urlSchema, result: result)
break
case "linkedin":
let urlSchema = "linkedin://text=\(content)"
launchURL(hookUrl: urlSchema, result: result)
break
case "reddit":
let urlSchema = "reddit://text=\(content)"
launchURL(hookUrl: urlSchema, result: result)
break
case "skype":
let urlSchema = "skype:?chat&topic=\(content)"
launchURL(hookUrl: urlSchema, result: result)
break
case "slack":
let urlSchema = "slack://text=\(content)"
launchURL(hookUrl: urlSchema, result: result)
break
case "snapchat":
let urlSchema = "snapchat://text=\(content)"
launchURL(hookUrl: urlSchema, result: result)
break
case "telegram":
let urlSchema = "tg://msg?text=\(content)"
launchURL(hookUrl: urlSchema, result: result)
break
case "x":
let urlSchema = "https://twitter.com/intent/tweet?text=\(content)"
launchURL(hookUrl: urlSchema, result: result)
break
case "viber":
let urlSchema = "viber://forward?text=\(content)"
launchURL(hookUrl: urlSchema, result: result)
break
case "wechat":
let urlSchema = "weixin://dl/posts?text=\(content)"
launchURL(hookUrl: urlSchema, result: result)
break
case "whatsapp":
let urlSchema = "whatsapp://send?text=\(content)"
launchURL(hookUrl: urlSchema, result: result)
break
case "threads":
let urlSchema = "threads://text=\(content)"
launchURL(hookUrl: urlSchema, result: result)
break
default:
result(FlutterMethodNotImplemented)
}
}
func launchURL(hookUrl: String, result: @escaping FlutterResult) {
if let urlString = hookUrl.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed) {
if let url = NSURL(string: urlString) {
if UIApplication.shared.canOpenURL(url as URL) {
UIApplication.shared.open(url as URL, options: [:], completionHandler: nil)
result(NSNumber(value: true))
} else {
result(NSNumber(value: false))
}
}
}
}
func canOpenApp(appName: String) -> Bool {
let appScheme = "\(appName)://app"
let appUrl = URL(string: appScheme)
return UIApplication.shared.canOpenURL(appUrl! as URL)
}
}

View File

@@ -0,0 +1,23 @@
#
# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html.
# Run `pod lib lint custom_social_share.podspec` to validate before publishing.
#
Pod::Spec.new do |s|
s.name = 'custom_social_share'
s.version = '0.0.1'
s.summary = 'Flutter Plugin for sharing contents to particular social media app or all.'
s.description = <<-DESC
Flutter Plugin for sharing contents to particular social media app or all.
DESC
s.homepage = 'https://github.com/keval-devani/custom_social_share'
s.license = { :file => '../LICENSE' }
s.author = { 'KD' => 'kevaldevani101@gmail.com' }
s.source = { :path => '.' }
s.source_files = 'Classes/**/*'
s.dependency 'Flutter'
s.platform = :ios, '11.0'
# Flutter.framework does not contain a i386 slice.
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' }
s.swift_version = '5.0'
end