如何使用AirDrop

时间:2016-09-03 17:02:53

标签: ios swift uti airdrop

由于我找不到任何详细的例子,我多年来一直在努力解决这个问题。

在我的应用中,我有一系列自定义数据,我想通过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)
}

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

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

我已经阅读了有关自定义UTI类型的内容并且已经声明了一个,但说实话,我不知道在声明中放入什么。那么你如何向iOS表明你发送的数据符合这个特定的UTI?

AirRrop示例在线存在,但他们专注于共享像图像这样的常见类型,而且我找到的任何人都没有详细分享自定义数据类型。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

AirDrop sample code 涵盖了如何定义自己的文件类型/ UTI并使用它来使用AirDrop发送自定义数据。

主要要求是:

  1. App的info.plist
  2. <...> <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. 支持接收您的自定义类型:在应用委托中,通过实施- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation来处理通过fileURL启动的问题。确保删除/移动文件以清理收件箱。

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

    3. 示例代码提供了一个很好的示例,说明如何完成所有这些操作,以及如何通过包含正确尺寸和裁剪的预览照片来提高整个用户体验。