http://www.appcoda.com/ios7-airdrop-programming-tutorial/
Adding AirDrop File Sharing Feature to Your iOS Apps
AirDrop is Apple’s answer to file and data sharing. Before the debut of iOS 7, users need to rely on 3rd-party apps such as Bump to share files between iOS devices. In iOS 7, Apple introduced a new feature called AirDrop to all iPhone 5 models, the fourth-generation iPad, the iPad mini, and fifth-generation iPod touch models. With AirDrop, you can easily share data with other nearby iOS devices. In brief, the feature allows you to share photos, videos, contacts, URLs, Passbook passes, app listings on the App Store, media listings on iTunes Store, location in Maps, etc.
As a developer, wouldn’t be great to incorporate the AirDrop feature in your app? So your users can easily share photos, text file or any types of document easily with nearby devices. The UIActivityViewController class bundled in the iOS 7 SDK makes it simple for developers to integrate AirDrop feature in their apps. The class shields you from the underlying details of file sharing. What you just need is tell the class the objects you want to share and it handles the rest. In this tutorial, we’ll demonstrate the usage of UIActivityViewController and see how you can use it to share images / documents by using AirDrop.
Let’s get started.
AirDrop Overview
Before we step into the implementation, let’s have a quick look at AirDrop. It’s very simple to use AirDrop. Simply bring up Control Center and tap AirDrop to enable it. You can either select “Contact Only” or “Everyone” depending on whom you want to share the data with. If you choose the Contact Only option, your device will only discovered by people listed in your contacts. Obviously, your device can be discovered by anyone for the Everyone option.
AirDrop uses Bluetooth to scan for nearby devices. When a connection is established via Bluetooth, it’ll create an ad-hoc Wi-Fi network to link the two devices together, allowing for faster data transmission. It doesn’t mean you need to connect the devices to a Wi-Fi network in order to use AirDrop. Your WiFi simply needs to be on for the data transfer.
Say you want to share a photo in the Photos app from one iPhone to another. Assuming you’ve enabled AirDrop on both devices, to share the photos with another device, tap the Share button (the one with an arrow pointing up) at the lower-left of the screen.
In the AirDrop area, you should see the name of the devices that are eligible for sharing. AirDrop is not available when the screen is turned off. So make sure the device on the receiving side is switched on. You can then select the device to share the photo. On the other device, you’ll see a preview of the photo and a confirmation request. The recipient can accept or decline to receive the image. If you choose the accept option, the photo is then transferred and automatically saved in the camera roll.
AirDrop doesn’t just work with the Photos app. You can also find the share option in most of the built-in apps such as Contacts, iTunes, App Store, Safari, to name a few. If you’re new to AirDrop, you should now have a better idea.
Let’s move on and see how we can incorporate AirDrop feature in your app to share various types of data.
A Quick Look at UIActivityViewController
You may think it’ll take a lot of efforts to implement the AirDrop feature. Conversely, you just need a few lines of code to add AirDrop support. The UIActivityViewController class available in iOS 7 SDK makes it super easy to integrate the feature. The AirDrop has been built into the class.
The UIActivityViewController class is a standard view controller that provides several standard services, such as copying items to the clipboard, sharing content to social media sites, sending items via Messages, etc. In iOS 7 SDK, the class comes with the AirDrop feature built-in.
Say, you have an array of objects to share using AirDrop. All you need to do is to initiate a UIActivityViewController with the array of objects and present it on screen:
1
2 |
UIActivityViewController *controller = [[UIActivityViewController alloc] initWithActivityItems:objectsToShare applicationActivities:nil];
[self presentViewController:controller animated:YES completion:nil]; |
With just two lines of code, you can bring up the activity view with AirDrop option. Whenever there is a nearby device detected, the activity controller automatically shows the device and handles the data transfer if you choose to.
Optionally, you can exclude certain types of activities. Say, you can just display the AirDrop activity by excluding all other activities. Use the following code:
1
2 3 4 5 6 7 8 9 10 11 12 |
UIActivityViewController *controller = [[UIActivityViewController alloc] initWithActivityItems:objectsToShare applicationActivities:nil];
NSArray *excludedActivities = @[UIActivityTypePostToTwitter, UIActivityTypePostToFacebook, UIActivityTypePostToWeibo, UIActivityTypeMessage, UIActivityTypeMail, UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, UIActivityTypeAddToReadingList, UIActivityTypePostToFlickr, UIActivityTypePostToVimeo, UIActivityTypePostToTencentWeibo]; controller.excludedActivityTypes = excludedActivities; [self presentViewController:controller animated:YES completion:nil]; |
The activity view controller now only shows the AirDrop option:
You can use UIActivityViewController to share different types of data including NSString, UIImage and NSURL. Not only you can use NSURL to share a link, it allows developers to transfer any types of files by using file URL.
On the receiving side, when the other device receives the data, it’ll automatically open an app based on the data type. Say, if an UIImage is transferred, the received image will be displayed in Photos app. When you transfer a PDF file, the other device will open it in Safari. If you just share a NSString object, the data will be presented in Notes app.
A Glance at the AirDrop Demo App
To give you a better idea about UIActivityViewController and AirDrop, we’ll build a AirDrop demo app. The app is very simple. When it is first launched, you’ll see a table view listing a few files including an image file, a PDF file and a text file. You can tap the file and view the content. In the content view, there is an action button on the top-right corner of screen. Tapping it will bring up the AirDrop option and you can share the image or document with nearby device.
You’re encouraged to build the demo app from scratch. But to save your time, you can download this project template to start with. When you open Xcode project, you should find the following Storyboard:
I have already implemented the ListTableViewController and DocumentViewController for you. If you compile and run the app, you’ll be presented with a list of files. When you tap any of the file, the image or document content will be displayed. But the share button is not yet implemented and that is what we’re going to talk about.
Adding AirDrop Feature
In the project template, the ListTableViewController is used to displayed the list of files in a table view, while the DocumentViewController presents the document content via a web view. The action button in the document view is associated with the share: method of the DocumentViewController class. Edit the method with the following code:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
- (IBAction)share:(id)sender {
NSURL *url = [self fileToURL:self.documentName]; NSArray *objectsToShare = @[url]; UIActivityViewController *controller = [[UIActivityViewController alloc] initWithActivityItems:objectsToShare applicationActivities:nil]; } |
If you’re not forgetful, the above code should be very familiar to you as we’ve discussed it at the very beginning. The above code simply creates a UIActivityViewController, excludes all activities except AirDrop and presents the controller as a modal view. The tricky part is how you define the objects to share. Here we turn the file to share into a NSURL object and pass the file URL as an array to AirDrop.
The first two lines of code are responsible for the file URL conversion. The documentName property stores the current file (e.g. ios-game-kit-sample.pdf) displaying in document view. We simply call up the fileToURL: method with the document name and it returns the corresponding file URL. The fileToURL: method is bundled in the project template and here is the code:
1
2 3 4 5 6 7 |
The code is very straightforward. For example, the ios-game-kit-sample.pdf will be transformed to file:///Users/simon/Library/Application%20Support/iPhone%20Simulator/7.0.3/Applications/A5321493-318A-4A3B-8B37-E56B8B4405FC/AirDropDemo.app/ios-game-kit-sample.pdf. The file URL varies depending on the device you’re running. But the URL should begin with the “file://” protocol. With the file URL object, we create the corresponding array and pass it to UIActivityViewController for AirDrop sharing.
Build and Run the AirDrop Demo
You’re done. That’s what you need to implement AirDrop sharing. Compile and run the app on a real iPhone. Yes, you need a real device to test AirDrop sharing. The sharing feature won’t work on the Simulator.
Uniform Type Identifiers (UTIs)
When you share an image to another iOS device, the receiving side automatically opens Photos app and loads the image. If you transfer a PDF file, the receiving device may prompt you to pick an app for opening the file or open it directly in iBooks. How can iOS know which app to use for the type of data?
UTIs (short for Uniform Type Identifiers) is Apple’s answer to identify data handled within the system. In brief, a uniform type identifier is a unique identifier for a particular type of data or file. For instance, com.adobe.pdf represents a PDF document and public.png represents a PNG image. You can find the full list of registered UTIs here. Application that is capable of opening a specific type of file has registered to handle that UTI with the iOS. So whenever that type of file is opened, iOS hands off that file to the specific app.
The system allows multiple apps to register the same UTI. In this case, iOS will prompt user with the list of capable apps for opening the file. For example, when you share a PDF document, you may experience the following screen in the receiving device:
Wrap Up
AirDrop is a very cool feature introduced in iOS 7. It offers a great way to share data between devices. Best of all, the built-in UIActivityViewController has made it easy for developers to add AirDrop support in their apps. As you can see from the demo app, it just needs a few lines of code to implement the feature. I highly recommend you to put this sharing feature in your app.
For your complete reference, you can download the full source code of the Xcode project from here.
As always, leave us comment and share your thought about the tutorial. We love to hear your feedback.
Adding AirDrop File Sharing Feature to Your iOS Apps的更多相关文章
-
RH253读书笔记(5)-Lab 5 Network File Sharing Services
Lab 5 Network File Sharing Services Goal: Share file or printer resources with FTP, NFS and Samba Se ...
-
Another option for file sharing(转)
原文地址 https://security.googleblog.com/2017/02/another-option-for-file-sharing.html Another option fo ...
-
Delphi 10.3.1 Secure File Sharing解决应用间文件共享
Delphi 10.3.1 为Android项目提供了Secure File Sharing选择项,默认是False.这一项是设置什么呢? 原来,Android 7及以后的版本,为了加强OS的安全性, ...
-
HDU 3269 P2P File Sharing System(模拟)(2009 Asia Ningbo Regional Contest)
Problem Description Peer-to-peer(P2P) computing technology has been widely used on the Internet to e ...
-
Differences Between Xcode Project Templates for iOS Apps
Differences Between Xcode Project Templates for iOS Apps When you create a new iOS app project in Xc ...
-
Start Developing iOS Apps Today
view types - view常见类型
-
《Start Developing iOS Apps Today》摘抄
原文:<Start Developing iOS Apps Today> Review the Source Code 入口函数main.m #import <UIKit/UIKit ...
-
ComponentOne Xuni助力Xamarin开发者突破百万,快速开发Android、IOS Apps
在微软Build 2015上,随着VS 2015的预览版发布,Xamrine免费版已经作为VS 2015跨平台移动解决方案的核心.与此同时,Xamarin官方也宣布其用户量达到百万之多.2011年7月 ...
-
Table View Programming Guide for iOS---(一)---About Table Views in iOS Apps
About Table Views in iOS Apps Table views are versatile user interface objects frequently found in i ...
随机推荐
-
Atitit.atiInputMethod&#160;v2词库清理策略工具&#160;&#160;&#160;&#160;q229
Atitit.atiInputMethod v2词库清理策略工具 q229 1.1. Foreigncode 外码清理1 1.2. 垃圾词澄清1 1.1. Foreigncode 外码清理 On ...
-
未能加载文件或程序集“XXXXXX”或它的某一个依赖项。试图加载格式不正确的程序。
在本机WIN7机器上的WebService部署到Win2008R2上发现错误 “/”应用程序中的服务器错误. 未能加载文件或程序集“XXXXXX”或它的某一个依赖项.试图加载格式不正确的程序. 说明: ...
-
C#控件背景透明的几种解决方案
已经很少做winform程序了,最新参与了一个小项目,遇到了控件背景透明的功能要求,特在此总结一下,供有需要的同行参考. 0.背景透明的概念和分类 背景透明是啥意思呢,就是背景透明.哈哈,废话了.其实 ...
-
封装cookie组件
var Cookie = { // 读取 get: function(name){ var cookieStr = "; "+document.cookie+"; &qu ...
-
C++面试基础概念之动态库篇
编写DLL所学所思(1)——导出函数 编写DLL所学所思(2)——导出类 C++ DLL导出类 知识大全 C++类库开发详解
-
包建强的培训课程(10):Android插件化从入门到精通
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
-
上海市2019年公务员录用考试第一轮首批面试名单(B类)
上海市2019年公务员录用考试第一轮首批面试名单(B类) 2019-03-12 设置字体:大 中 小 职位序号 注册编号 职位序号 注册编号 职位序号 注册编号 职位序号 注册编号 1910565 5 ...
-
Yarn 入门
Yarn 是快速.可靠.安全的 js 包管理器. 关键词: nodejs, 包管理, yarn 简介 Yarn 是快速.可靠.安全的 js 包管理器. 快速 - Yarn 会缓存它下载的每个包,所以无 ...
-
编写Shell脚本
1.脚本的编写 Shell脚本本身是一个文本文件,这里编写一个简单的程序,在屏幕上显示一行helloworld! 脚本内容如下: #!/bin/bash #显示“Hello world!" ...
-
Java 图片矢量压缩
直接贴出工具类源码 package com.snow.web.util.publics; import java.awt.Image; import java.awt.image.BufferedIm ...