first commit
This commit is contained in:
38
ios/.gitignore
vendored
Normal file
38
ios/.gitignore
vendored
Normal 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
0
ios/Assets/.gitkeep
Normal file
167
ios/Classes/CustomSocialSharePlugin.swift
Normal file
167
ios/Classes/CustomSocialSharePlugin.swift
Normal 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)
|
||||
}
|
||||
}
|
23
ios/custom_social_share.podspec
Normal file
23
ios/custom_social_share.podspec
Normal 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
|
Reference in New Issue
Block a user