应用程序委托中用于 Facebook 和 Twitter 的 OpenURL?
OpenURL for Facebook and Twitter in app delegate?
我正在使用 Facebook SDK 和 Twitter SDK 进行登录和注册。
但他们都没有通过一种常用方法打开 URL。我为 Facebook 编写了如下代码:
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool
{
if(url.scheme == "fb1651015905222312")
{
return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
}
return true
}
这很好用,对于 Twitter,我必须评论上面的方法并且必须这样写:
func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
if Twitter.sharedInstance().application(app, openURL:url, options: options) {
return true
}
return true
}
这仅适用于 Twitter。
问题是我需要写一个通用的方法来在appDelegate
中打开他们的URL。那我该如何克服呢?
注意:我们不能在应用程序委托中同时编写这两个方法。
终于找到了这个问题的答案。
Swift 3
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
if Twitter.sharedInstance().application(app, open:url, options: options) {
return true
}
let appId = SDKSettings.appId
if url.scheme != nil && url.scheme!.hasPrefix("fb\(appId)") && url.host == "authorize" { // facebook
return SDKApplicationDelegate.shared.application(app, open: url, options: options)
}
return false
}
对于 Swift < 3
这是允许我为 Facebook 和 Twitter 编写 url 的方法。
func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
if Twitter.sharedInstance().application(app, openURL:url, options: options) {
return true
}
let sourceApplication: String? = options[UIApplicationOpenURLOptionsSourceApplicationKey] as? String
return FBSDKApplicationDelegate.sharedInstance().application(app, openURL: url, sourceApplication: sourceApplication, annotation: nil)
}
感谢所有试图回答我的问题的人。
谢谢。
已更新 SWIFT 3
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
let sourceApplication: String? = options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String
return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: sourceApplication, annotation: nil)
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
{
if ([Twitter.sharedInstance application:app openURL:url options:options])
{
return YES;
}
return [self application:app openURL:url sourceApplication:[options objectForKey:UIApplicationOpenURLOptionsSourceApplicationKey] annotation:[options objectForKey:UIApplicationOpenURLOptionsAnnotationKey]];
}
这是我尝试使用 Objective
的 Twitter 和 Facebook 的 openURL
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options {
if ([[url scheme] isEqualToString:FACEBOOK_SCHEME])
return [[FBSDKApplicationDelegate sharedInstance] application:application
openURL:url
sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
annotation:nil];
if ([[url scheme] isEqualToString:TWITTER_SCHEME])
return [[Twitter sharedInstance] application:application openURL:url options:options];
return NO;
}
当然还有这些:
#define TWITTER_SCHEME @"Twitter-key-from-plistfile"
#define FACEBOOK_SCHEME @"fb-key-from-plistfile"
这适用于 Swift 3 和 Swift 4。只需复制并粘贴:
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
if Twitter.sharedInstance().application(app, open: url, options: options) {
return true
}
let sourceApplication: String? = options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String
return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: sourceApplication, annotation: nil)
}
Swift 5
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool
{
// Check for twitter
if TWTRTwitter.sharedInstance().application(app, open: url, options: options)
{
return true
}
// If twitter failed, check for facebook
return ApplicationDelegate.shared.application(app, open: url, options: options)
}
我正在使用 Facebook SDK 和 Twitter SDK 进行登录和注册。
但他们都没有通过一种常用方法打开 URL。我为 Facebook 编写了如下代码:
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool
{
if(url.scheme == "fb1651015905222312")
{
return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
}
return true
}
这很好用,对于 Twitter,我必须评论上面的方法并且必须这样写:
func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
if Twitter.sharedInstance().application(app, openURL:url, options: options) {
return true
}
return true
}
这仅适用于 Twitter。
问题是我需要写一个通用的方法来在appDelegate
中打开他们的URL。那我该如何克服呢?
注意:我们不能在应用程序委托中同时编写这两个方法。
终于找到了这个问题的答案。
Swift 3
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
if Twitter.sharedInstance().application(app, open:url, options: options) {
return true
}
let appId = SDKSettings.appId
if url.scheme != nil && url.scheme!.hasPrefix("fb\(appId)") && url.host == "authorize" { // facebook
return SDKApplicationDelegate.shared.application(app, open: url, options: options)
}
return false
}
对于 Swift < 3
这是允许我为 Facebook 和 Twitter 编写 url 的方法。
func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
if Twitter.sharedInstance().application(app, openURL:url, options: options) {
return true
}
let sourceApplication: String? = options[UIApplicationOpenURLOptionsSourceApplicationKey] as? String
return FBSDKApplicationDelegate.sharedInstance().application(app, openURL: url, sourceApplication: sourceApplication, annotation: nil)
}
感谢所有试图回答我的问题的人。
谢谢。
已更新 SWIFT 3
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
let sourceApplication: String? = options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String
return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: sourceApplication, annotation: nil)
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
{
if ([Twitter.sharedInstance application:app openURL:url options:options])
{
return YES;
}
return [self application:app openURL:url sourceApplication:[options objectForKey:UIApplicationOpenURLOptionsSourceApplicationKey] annotation:[options objectForKey:UIApplicationOpenURLOptionsAnnotationKey]];
}
这是我尝试使用 Objective
的 Twitter 和 Facebook 的 openURL- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options {
if ([[url scheme] isEqualToString:FACEBOOK_SCHEME])
return [[FBSDKApplicationDelegate sharedInstance] application:application
openURL:url
sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
annotation:nil];
if ([[url scheme] isEqualToString:TWITTER_SCHEME])
return [[Twitter sharedInstance] application:application openURL:url options:options];
return NO;
}
当然还有这些:
#define TWITTER_SCHEME @"Twitter-key-from-plistfile"
#define FACEBOOK_SCHEME @"fb-key-from-plistfile"
这适用于 Swift 3 和 Swift 4。只需复制并粘贴:
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
if Twitter.sharedInstance().application(app, open: url, options: options) {
return true
}
let sourceApplication: String? = options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String
return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: sourceApplication, annotation: nil)
}
Swift 5
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool
{
// Check for twitter
if TWTRTwitter.sharedInstance().application(app, open: url, options: options)
{
return true
}
// If twitter failed, check for facebook
return ApplicationDelegate.shared.application(app, open: url, options: options)
}