Airdrop を使用してカスタム URL を送信し、他のデバイスでアプリを開いて関連情報を表示します。
正常に動作しますが、受信側のデバイスでは見栄えが悪くなります。これは、たとえばschemename://123456
. メッセージの見栄えを良くする方法や、暗号化された URL を表示するのではなく、受信デバイスにどのアプリで情報を開こうとしているかを通知させる方法はありますか?
UIActivityItemSource で確認するカスタム オブジェクトを作成する
@interface LAAirDropCustomUrl : NSObject <UIActivityItemSource>
@property (strong, nonatomic) NSURL *url;
@property (strong, nonatomic) UIImage *productImage;
- (id)initWithUrl:(NSURL *)url;
@end
@implementation LAAirDropCustomUrl
- (id)initWithUrl:(NSURL *)url {
if (self = [super init]) {
_url = url;
}
return self;
}
#pragma mark - UIActivityItemSource
- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController {
//Because the URL is already set it can be the placeholder. The API will use this to determine that an object of class type NSURL will be sent.
return self.url;
}
- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType {
//Return the URL being used. This URL has a custom scheme (see ReadMe.txt and Info.plist for more information about registering a custom URL scheme).
if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
return nil;
} else {
if ([activityType isEqualToString:UIActivityTypeAirDrop]) {
return self.url;
}
}
return nil;
}
- (UIImage *)activityViewController:(UIActivityViewController *)activityViewController thumbnailImageForActivityType:(NSString *)activityType suggestedSize:(CGSize)size
{
//Add image to improve the look of the alert received on the other side, make sure it is scaled to the suggested size.
return self.productImage;
}
この Eventbrite エンジニアリングの投稿では、意図したタスクを達成するための潜在的な方法について説明しています。
投稿にサンプル プロジェクトが添付されています https://engineering.eventbrite.com/setting-the-title-of-airdrop-shares-under-ios-7/
投稿の簡単な要約:
アプリでのみ開くことができるカスタム拡張子 (ファイルの種類) を付けて、URL をファイルに保存します。Airdrop 受信者は、アプリがインストールされている場合はアプリでファイルを開くか、AppStore からアプリをインストールするように求められます。