自定义URL方案IOS

Ani*_*pta 1 cocoa objective-c url-scheme info.plist ios

我有一个应用程序,它将从我的其他应用程序启动.但我的目的是启动我的应用程序,不对URL做任何事情.它只是一种使用户无需任何数据交换即可在应用之间切换的方法.

我是否需要实现handleOpenURL或类似的方法来处理URL以过滤掉不需要的命令,如安全编码指南中的苹果提及,或者只是在info.plist中指定方案(以及URL标识符和文档角色作为Viewer)是足够安全的考虑事实上,我没有对URL做任何事情?

ork*_*den 5

是的,您需要实现application:handleOpenURL: application:openURL:sourceApplication:annotation:,并返回YES.根据Apple的文档,第二种方法是首选方法.

-(BOOL) application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
  return YES;
}
Run Code Online (Sandbox Code Playgroud)

您还可以检查方案,源应用程序或其他条件,并相应地返回YES或NO.如果您有多个应用程序正在通信,则可以检查源应用程序或使用注释传递数据.

NSString* myappScheme = @"anindya";  // or even better read it from your plist
-(BOOL) application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
  return [url.scheme isEqualToString: myappScheme];
}
Run Code Online (Sandbox Code Playgroud)

就安全性而言,你并没有真正对URL做任何其他事情,所以没有问题.Apple在这方面的建议意味着如果你从另一个应用程序获得一个URL,你必须仔细解析它并假设它可能是恶意的.如果您还检查源应用程序,则可以确保只从您自己的应用程序获取数据.