url scheme是什么,能做什么?
- url cheme,用於兩個獨立的App之間,讓A應用能夠打開B應用
- A應用打開B應用時,告訴B應用當前這個傳入的scheme要干什么,所需要的參數
- URL Schemes 是一個數組,允許應用定義多個 URL schemes ,每一個scheme對應不同的業務操作
url scheme操作步驟一、根據要調用的App規定的scheme和參數格式進行拼接,最終打開的url
/** * 生成完整的 scheme url */ - (NSString*)_genShareUrl:(XZHMessage *)msg to:(XZHTencentPlatform)shareTo { NSString *url = [[NSString alloc] initWithString:ShareSchema]; NSString *boundleName = [XZHShareManager base64Encode:[XZHShareManager CFBundleDisplayName]]; NSString *callback_name = [[self optionDict] objectForKey:@"callback_name"]; NSMutableDictionary *params = [@{ @"thirdAppDisplayName" : boundleName, @"version" : @"1", @"cflag" : [NSString stringWithFormat:@"%ld", shareTo], @"callback_type" : @"scheme", @"generalpastboard" : @"1", @"callback_name" : callback_name, @"src_type" : @"app", @"shareType" : @"0", } mutableCopy]; //如果未給當前message對象設置 分享消息類型,則默認為 news類型 if (msg.link && !msg.messageType) { msg.messageType = XZHMessageNews; } NSDictionary *subParams = nil; if ([msg computeMessageType] == XZHMessageText) { NSString *fileData = [XZHShareManager base64AndUrlEncode:msg.title]; subParams = @{ @"file_type" : @"text", @"file_data" : fileData }; } else if ([msg computeMessageType] == XZHMessageImage) { //將message保存到剪貼板 NSDictionary *data=@{ @"file_data":msg.imageData, @"previewimagedata":msg.thumbImageData?:msg.imageData }; [[XZHShareManager manager] clipBoardSave:data ForKey:SaveObjectForQQPlatformKey Encoding:XZHClipBoardNSKeyedArchiver]; NSString *title = [XZHShareManager base64AndUrlEncode:msg.title]; NSString *desc = [XZHShareManager base64AndUrlEncode:msg.desc]; subParams = @{ @"file_type" : @"img", @"title" : title, @"objectlocation" : @"pasteboard", @"description" : desc, }; }else if ([msg computeMessageType] == XZHMessageNews) { NSDictionary *data=@{@"previewimagedata":msg.imageData}; //圖片保存到剪貼板 [[XZHShareManager manager] clipBoardSave:data ForKey:SaveObjectForQQPlatformKey Encoding:XZHClipBoardNSKeyedArchiver]; NSString *title = [XZHShareManager base64AndUrlEncode:msg.title]; NSString *url = [XZHShareManager base64AndUrlEncode:msg.link]; NSString *desc = [XZHShareManager base64AndUrlEncode:msg.desc]; NSString *msgType=@"news"; if (msg.messageType == XZHMessageNews) { msgType = @"news"; } else if (msg.messageType == XZHMessageAudio) { msgType = @"audio"; } subParams = @{ @"file_type" : msgType, @"title" : title, @"url" : url, @"description" : desc, @"objectlocation" : @"pasteboard", }; } //得到最后字典 [params addEntriesFromDictionary:subParams]; //構造最后的scheme url url = [XZHShareManager urlStringWithOriginUrlString:url appendParameters:params]; return url; }
url scheme操作步驟二、使用UIApplication打開這個url
+ (void)openURL:(NSString *)url { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]]; }
url scheme操作步驟三、被打開的App回傳結果,掉起我們自己的App的回調函數,Appdelegate里面的方法
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { //其他應用掉起當前應用時,傳回的參數,如果傳入的url能夠處理 if ([[XZHShareManager manager] handleOpenURL:url]) { return YES; } //不能處理的App調起 return YES; }