我有一个将使用Facebook和Instagram API的应用程序,这两个都要求我使用此委托方法:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [PFFacebookUtils handleOpenURL:url];
}
这是由instagram提供的代码:
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [self.instagram handleOpenURL:url];
}
正如您所看到的,这是一个问题,因为我只能返回一个URL处理程序,但我需要能够决定哪一个。
在我的应用代表中,我已经注释掉上面的Instagram选项,只留下了Facebook。正如预期的那样,Facebook可以正常工作,但是当我在Instagram上点击授权时,我收到了这个错误:
显然,Facebook正试图处理来自Instagram的返回网址,因此会出错。
检查网址是否包含我正在尝试的每项服务的应用ID是否合理?因此,如果URL包含instagram ID,则返回instagram处理程序,如果它包含Facebook ID,则返回Facebook处理程序。
任何帮助都会很棒,谢谢!
答案 0 :(得分:65)
Facebook和Instagram都为您的服务设置了自定义网址方案,因此我们将使用它来过滤网址。
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
if ([[url scheme] isEqualToString:INSTAGRAM_SCHEME])
return [self.instagram handleOpenURL:url];
if ([[url scheme] isEqualToString:FACEBOOK_SCHEME])
return [PFFacebookUtils handleOpenURL:url];
return NO;
}
将变量定义为
#define INSTAGRAM_SCHEME @"ig12345678910"
#define FACEBOOK_SCHEME @"fb12345678910"
与您在Info.plist
文件中的操作完全相同