如何使用AirDrop发送和接收自定义数据

Gre*_*reg 2 uti ios airdrop swift

我已经为此苦苦挣扎多年了,因为我找不到任何详细的示例。

在我的应用程序中,我有一系列自定义数据,我想通过AirDrop发送给使用同一应用程序的另一个用户。

第一步是发送数据:

@IBAction func share_Button_Click(sender: UIBarButtonItem)
{
    let dataToShare: NSData = getMyCustomNSData()

    let controller = UIActivityViewController(activityItems: [dataToShare], applicationActivities: nil)
    controller.excludedActivityTypes = [UIActivityTypePostToFacebook, UIActivityTypePostToTwitter, UIActivityTypePostToWeibo, UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, UIActivityTypePostToFlickr, UIActivityTypePostToTencentWeibo, UIActivityTypeMail, UIActivityTypeAddToReadingList, UIActivityTypeOpenInIBooks, UIActivityTypeMessage]

    self.presentViewController(controller, animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)

这会将我的数据转换为NSData对象,用户获得了AirDrop共享选项,并且其中的数据转到了另一部手机。到目前为止,一切都很好...

但是其他用户的应用程序如何知道如何接收它?

我已经阅读了有关自定义UTI类型的信息,并声明了一个类型,但是老实说,我不知道在声明中要添加什么。以及如何向iOS指示您发送的数据符合此特定的UTI?

在线上到处都有AirDrop示例,但它们专注于共享常见类型(如图像),而我发现没有人通过详细共享自定义数据类型来工作。

有人可以帮忙吗?

ccj*_*sen 5

空投的代码示例介绍了如何定义自己的文件类型/ UTI,并用它采用空投送您的自定义数据。

主要需要的部分是:

  1. 应用程式的info.plist

<...> <key>CFBundleDocumentTypes</key> <array> <dict> <key>CFBundleTypeName</key> <string>AirDrop Profile File Type</string> <key>LSHandlerRank</key> <string>Default</string> <key>LSItemContentTypes</key> <array> <string>com.apple.customProfileUTI.customprofile</string> </array> </dict> </array> <...>

  1. 要支持接收您的自定义类型:在应用程序委托中,通过实现来处理使用fileURL启动的情况- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation。确保删除/移动文件以在收件箱中进行清理。

  2. 为了支持发送一种自定义类型:传递给UIActivityViewController的项目应该是文件的URL,该文件应具有您注册为自定义文件类型的扩展名,或者如果对象符合UIActivityItemSource协议并返回NSData类型在中- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController,而您实际的NSData Blob在中- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType。然后,- (NSString *)activityViewController:(UIActivityViewController *)activityViewController dataTypeIdentifierForActivityType:(NSString *)activityType您要返回在info.plist中注册的自定义类型的UTI。

该示例代码提供了一个很好的示例,说明了如何执行所有这些操作,以及如何通过包含适当大小和裁剪后的预览照片来使整个UX更好。