美文网首页iOS开发技巧iOS--开发技巧iOS开发知识小集
iOS --- 通过openURL实现APP之间跳转并传递数据

iOS --- 通过openURL实现APP之间跳转并传递数据

作者: icetime17 | 来源:发表于2016-04-04 16:47 被阅读9549次

    在博客iOS --- 通过UIApplication的openURL来实现APP之间的相互跳转中, 介绍了如何实现iOS APP之间的相互跳转, 使用的就是UIApplication的openURL:方法.
    那么, 如果想要在openURL方法中传递参数和数据, 应该如何实现呢?

    AppDelegate的application:openURL:options方法

    - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
    

    当使用openURL从其他APP跳转至当前APP时, 该方法会自动调用.

    通过URL传递参数

    在AppDelegate的application:openURL:options方法中, 参数url在两个APP都是一样的值.
    如在APP DemoOpenURL中,

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"demomixpanel://params?param1=111&param2=222"]];
    

    则在APP DemoMixpanel的AppDelegate.m文件的application:openURL:options方法中, 即可获取该url的完整信息.

    - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options {
        NSLog(@"url: %@", url);
    }
    

    这样, 就通过URL本身在两个APP之间传递了参数.
    该参数的格式与Http请求的GET格式保存一致.

    通过UIPasteboard传递数据

    通过URL只能简单地传递参数, 如果要传递负责的数据如image就只能通过剪贴板UIPasteboard了.

    如在APP DemoOpenURL中, 向系统剪贴板中填充数据:

    UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
    pasteboard.string = @"Modal.jpg";
    pasteboard.image = [UIImage imageNamed:@"Modal.jpg"];
    
    // NSData *imageData = UIImageJPEGRepresentation([UIImage imageNamed:@"Modal.jpg"], 0);
    // [pasteboard setData:imageData forPasteboardType:@"Modal.jpg"];
    
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"demomixpanel://params?param1=111&param2=222"]];
    

    则在APP DemoMixpanel中, 从剪贴板中取出数据便可以使用:

    - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options {
        NSLog(@"url: %@", url);
    
        UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
        // label.text = pasteboard.string;    
        // imageView.image = pasteboard.image;
        // NSData *imageData = [pasteboard dataForPasteboardType:@"Modal.jpg"];
        // imageView.image = [UIImage imageWithData:imageData];
    }
    

    Demo

    Demo地址:
    DemoOpenURL,
    DemoMixpanel

    相关文章

      网友评论

      本文标题:iOS --- 通过openURL实现APP之间跳转并传递数据

      本文链接:https://www.haomeiwen.com/subject/mpaulttx.html