• iosAPP之间的跳转


    做各大平台分享的时候由于账号混乱,导致分享回调的时候启动了另一个app,这个时候我在猜想这些SDK是怎么唤醒没有启动的其他app的,不难想象,肯定跟AppDelegate处理回调openUrl有关,于是搜了一下才发现,一个应用程序可以唤醒另一个应用程序,只怪我菜,好啦,现在告诉不知道的朋友怎么来实现一个app怎么唤醒另一个app,以及让两个app之间互相通信。。。


    测试工程操作如下

    1.新建一个app1,在Info.plist文件的信息属性列表里新建一组,类型是URL types    设置如下
    IOS <wbr>唤醒另一个APP(app之间互相通信)
    这里最关键的部分在于URL Schemes数组里的Item 0,后面的填写的字符串就是你用来通信的命令前缀“achao”,URL identifier只是一个标示符,随意填写
    然后再AppDelegate里处理重载下面的回调方法

    -(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

    {

        if ([[url scheme] isEqualToString:@"achao"])

        {

            NSLog(@"%@",url);

        }

        return YES;

    }

    可以看见[url scheme]这个命令是为了拿到url的scheme,就是命令前缀“achao”
     
    2.新建app2,这个app什么都不用操作,只需要去唤醒app1即可,于是我们在viewDidLoad里写上这一句

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"achao://hello"]];

    "achao"就是app1里的url scheme,我叫它命令前缀(我怀疑apple的应用程序装上过后有个像通知中心一样的应用程序来统一管理,而每个应用程序的url scheme都会在那里被记录,以供其他app来调用该app,至于url scheme属于哪个应用程序,当然是和app的Bundle identifier相关的),格式采用“前缀://..."
     
    3.我们关闭app1,app2,然后再启动app2,发现app2启动过后唤醒了app1,并且成功跳转;我们再关闭app1,app2,然后我们打开app1进行监测,发现app1被启动后,进入了

    IOS <wbr>唤醒另一个APP(app之间互相通信)

    这就实现了两个app之间的唤醒和通信
     
    4.当然这时候你可能才想到,那不是很多应用程序都会被其他垃圾程序调用了,查找资料过后,原来还有后续
    我们重载这个方法

    -(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

    {

        if ([sourceApplication isEqualToString:@"AC.achao.com"])

        {

            NSLog(@"%@", sourceApplication);    //来源于哪个app(Bundle identifier)

            NSLog(@"scheme:%@", [url scheme]);  //url scheme

            NSLog(@"query: %@", [url query]);   //查询串  用“?...”格式访问

            return YES;

        }

        else 

            return NO;

    }

    这就满足我们的需求了,我们可以通过sourceApplication来判断来自哪个app以决定要不要唤醒自己的app,也可以通过[url query]来获得查询串,这个时候我们需要更改app2的访问方式才能获得这个参数

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"achao://hello?name=achao-AC"]];

    我们也可以直接在safari离输入"achao://hello?name=achao-AC"来访问我们的app1,这个时候sourceApplication就是@"com.apple.mobilesafari"

     
    总结:类似下面的方法

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.baidu.com"]];

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://158********"]];

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://158********"]];

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://362****@qq.com"]];

    我们用过很多,估计也是程序内部设置了类似的url scheme来供其他应用程序操作的

     

    也许我理解的有错误,欢迎大家一起交流分享,不甚感激!
  • 相关阅读:
    让所有IE支持HTML5的解决方案
    MVC3实现多个按钮提交
    水平垂直居中
    模块化开发之sea.js实现原理总结
    express常见获取参数的方法
    使用nodemon提高nodejs调试效率
    Vue2 实践揭秘 错误列表
    全局安装 Vue cli3 和 继续使用 Vue-cli2.x
    使用VUECLI3
    npm ERR! code Z_BUF_ERROR
  • 原文地址:https://www.cnblogs.com/Sucri/p/5198658.html
Copyright © 2020-2023  润新知