Ios 处理两个应用程序:openURL:sourceApplication:annotation
我有两个SDK需要使用Ios 处理两个应用程序:openURL:sourceApplication:annotation,ios,objective-c,facebook,swift,Ios,Objective C,Facebook,Swift,我有两个SDK需要使用application:openURL:sourceApplication:annotation方法。一个是FacebookSDK,第二个是GooglePlusSDK 这些方法是: - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
application:openURL:sourceApplication:annotation
方法。一个是FacebookSDK
,第二个是GooglePlusSDK
这些方法是:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [FBAppCall handleOpenURL:url sourceApplication:sourceApplication];
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation];
}
我的问题是如何将它们迁移到一种方法中?最好的方法是什么
提前谢谢。您可以这样做:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
BOOL shouldOpen = [FBAppCall handleOpenURL:url sourceApplication:sourceApplication];
shouldOpen = shouldOpen ? shouldOpen : [GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation];
return shouldOpen;
}
使用逻辑或运算符
|
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [FBAppCall handleOpenURL:url sourceApplication:sourceApplication] || [GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation];
}
快速版本
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String!, annotation: AnyObject) -> Bool {
return FBAppCall.handleOpenURL(url, sourceApplication: sourceApplication) || GPPURLHandler.handleURL(url, sourceApplication: sourceApplication, annotation: annotation)
}
您还可以根据
URL
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
if FB URL prefix
//Call FB method
else
//Google plus method
}
一种更干净的方式(这里是Swift)是:
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String!, annotation: AnyObject) -> Bool {
var handled: Bool
if let facebook = url.scheme?.hasPrefix("fb") {
handled = FBAppCall.handleOpenURL(url, sourceApplication: sourceApplication)
} else {
handled = GPPURLHandler.handleURL(url, sourceApplication: sourceApplication, annotation: annotation)
}
// include any specific handling code as necessary
return handled
}
我最后做了:
- (BOOL)application:(UIApplication *)application //facebook & Google+
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
return( [[FBSDKApplicationDelegate sharedInstance] application:application
openURL:url
sourceApplication:sourceApplication
annotation:annotation]
||
[GPPURLHandler handleURL:url
sourceApplication:sourceApplication
annotation:annotation]
);
;
}
使用简单的
if语句
,您不能基于中的url进行确定吗?URL方案不会有所不同吗?谢谢你。你节省了我的时间。祝福.shouldOpen |=[GPPURLHandler句柄..]