app跳转传参 ios
2018-12-20 16:01:29 sunzhenglin2016 阅读数 44

iOS
A->B
A: 1.在iOS9中,如果使用 canOpenURL:方法,该方法所涉及到的 URL Schemes 必须在"Info.plist"中将它们列为白名单,否则不能使用。key叫做LSApplicationQueriesSchemes ,键值内容是对应应用程序的URL Schemes。(test)
2.代码:
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@“test://Page1”]]) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@“test://”] options:nil completionHandler:nil];
}else{
NSLog(@“尚未安装应用”);
//可以跳商店去
}

B:
targets -> Info -> URL Types -> 填写scheme
命名一个名字test
代码:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    // 1.获取导航栏控制器
    UINavigationController *rootNav = (UINavigationController *)self.window.rootViewController;
    // 2.获得主控制器
    ViewController *mainVc = [rootNav.childViewControllers firstObject];

    // 3.每次跳转前必须是在跟控制器(细节)
    [rootNav popToRootViewControllerAnimated:NO];   

    // 4.根据字符串关键字来跳转到不同页面
    if ([url.absoluteString containsString:@"Page1"]) { // 跳转到应用App-B的Page1页面
        // 根据segue标示进行跳转
        [mainVc performSegueWithIdentifier:@"homeToPage1" sender:nil];
    } else if ([url.absoluteString containsString:@"Page2"]) { // 跳转到应用App-B的Page2页面
        // 根据segue标示进行跳转
        [mainVc performSegueWithIdentifier:@"homeToPage2" sender:nil];
    }   

    return YES;

android

A:

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.textview).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

              if (checkApkExist(MainActivity.this,"free.com.bproject")){
                    Intent intent = new Intent();
                    intent.setClassName("free.com.bproject", "free.com.bproject.MainActivity");
                    Bundle bundle = new Bundle();
                    bundle.putString("FIRST_APP_KEY", "this is a app send message");
                    intent.putExtras(bundle);
                    startActivity(intent);
                }else {
                    Toast.makeText(MainActivity.this,"应用未安装",Toast.LENGTH_SHORT).show();

                }




            }
        });
    }
    public static boolean checkApkExist(Context context, String packageName){
        if (TextUtils.isEmpty(packageName))
            return false;
        try {
            ApplicationInfo info = context.getPackageManager()
                    .getApplicationInfo(packageName,
                            PackageManager.GET_UNINSTALLED_PACKAGES);

            return true;
        } catch (PackageManager.NameNotFoundException e) {

            return false;
        }
    }

B:

  <activity
            android:name=".MainActivity"
            android:exported="true"
            >

 Bundle bundle = this.getIntent().getExtras();
    if (bundle != null){ //防止直接启动MainActivity时空指针闪退
        String value = bundle.getString("FIRST_APP_KEY");
        TextView textView = findViewById(R.id.textview);
        textView.setText(value);
    }
2018-01-29 22:59:49 sz_vcp2007 阅读数 128

1.APP与APP之间的跳转

原理:通过设置跳转到应用B的URL Schemes(自定义的协议头),应用B将其自身“绑定”到一个自定义URL Schemes上,就可以从应用A中利用应用B的URL Schemes启动应用B了。

比如:应用A跳转到应用B需要在应用B的项目中设置:

a、B -> TARGETS -> Info -> URL Types -> URL Schemes,设置App-B的URL Schemes为AppB

b、A中通过下面代码判断能否打开B,如果手机安装了应用B,则打开。

// 1.获取应用程序App-B的URL Scheme
   NSURL *appBUrl = [NSURL URLWithString:@"AppB://"];

   // 2.判断手机中是否安装了对应程序
   if ([[UIApplication sharedApplication] canOpenURL:appBUrl]) {
   // 3. 打开应用程序App-B
       [[UIApplication sharedApplication] openURL:appBUrl];
   } else {
       NSLog(@"没有安装");
   }
2.浏览器跳转到APP

打开Xcode的APP工程->TARGETS -> Info -> URL Types -> URL Schemes,设置App的URL Schemes为App

在Safari中,输入地址:App:// 就可以打开APP了。


3.通过网页跳转到APP

首先,在APP端定义打开的协议,跟APP之间跳转的设置一下,设置APP的URL Schemes为:APP

在页面中做逻辑判断,如果手机安装了APP则直接打开,否则跳转到APP下载地址去下载。

HTML代码

<div id="btn">
<a onclick="submitFn ><button>打开app</button></a>
</div>
js代码

function submitFn(){
    //判断浏览器
    var u = navigator.userAgent;
    if(/MicroMessenger/gi.test(u) {
       // 引导用户在浏览器中打开
        alert('请在浏览器中打开');
        return;
    }
    var d = new Date();
    var t0 = d.getTime();
    if(u.indexOf('Android') > -1 || u.indexOf('Linux') > -1){
        //Android
        if(openApp('en://startapp')){
         openApp('en://startapp');
        }else{
            //由于打开需要1~2秒,利用这个时间差来处理--打开app后,返回h5页面会出现页面变成app下载页面,影响用户体验
            var delay = setInterval(function(){
                 var d = new Date();
                 var t1 = d.getTime();
                 if( t1-t0<3000 && t1-t0>2000){
                    alert('请下载APP');
                     window.location.href = "app下载地址";
                 }
                 if(t1-t0>=3000){
                      clearInterval(delay);
                 }
            },1000);
        }
    }else if(u.indexOf('iPhone') > -1){
        //IOS
        if(openApp('ios--scheme')){  
            openApp('ios--scheme');
        }else{
            var delay = setInterval(function(){
                var d = new Date();
                var t1 = d.getTime();
                if( t1-t0<3000 && t1-t0>2000){
                    alert('请下载APP');
                    window.location.href = "app下载地址";
                }
                if(t1-t0>=3000){
                    clearInterval(delay);
                }
            },1000);
        }
    }    
}

function openApp(src) {
// 通过iframe的方式试图打开APP,如果能正常打开,会直接切换到APP,并自动阻止a标签的默认行为
// 否则打开a标签的href链接
     var ifr = document.createElement('iframe');
     ifr.src = src;
     ifr.style.display = 'none';
     document.body.appendChild(ifr);
     window.setTimeout(function(){
          document.body.removeChild(ifr);
     },2000);
}
4.微信跳转到APP

具体实现参考文章:

从微信直接跳转到我们的APP











2018-04-06 16:51:28 Shadowsofdeath 阅读数 80
1.概念
a.URL
b.NSURL
2.原理
跳转方
canOpenURL: //判断是否能跳转
openURL: //跳转方法,iOS10弃用
openURL:options:completionHandler: //跳转方法,iOS10新方法
options参数:传入空字典和openURL:一样。传入UIApplicationOpenURLOptionUniversalLinksOnly,当value为YES时,只能打开已经被应用配置好的有效通用链接,若没有应用配置,或者用户禁止打开此链接,则返回NO。
非跳转方
application:handleOpenURL: //被跳转时,执行此方法,iOS9.0弃用
application:openURL:options: //同上,iOS9.0新方法
3.应用
跳转原生应用与页面
跳转非原生应用与页面
跳转到指定app
跳转到指定app的指定页面
注:对于非跳转方,应用必须配置一个scheme
对于跳转方:9.0以后需要配置scheme白名单


打开原生应用与页面:


2016-03-18 15:47:41 wolvesqun 阅读数 323

ios app跳转

一:原理:
ios应用app跳转其实就跟http请求一样:包含协议、主机地址、端口、请求参数,通过这些到达目的,做出响应;ios应用跳转也是一样,它的原理就是自定义一个协议,从而向系统注册一个协议。

二:实现跳转过程:
2.1:新建一个应用A
2.2:在应用A的配置 文件 info.plist 里面的URL types注册一个协议myApp,如图
2.3: 新建一个应用B
2.4:在应用B的配置文件info.plist 里面的 LSApplicationQueriesSchemes 添加myApp(这样才能实现跳转)
2.5:B应用跳转到A应用

[[UIApplicationsharedApplication] openURL:[NSURLURLWithString:@"myApp://"]];

三:我写的一个app跳转框架

3.1:为什么我要写这个框架?

因为app跳转是一个复杂的过程,要解析参数,还要根据不同的参数的value进行不同的处理,这就相当于web请求的处理。

3.2:如何使用这个框架?我们假设这样的一个场景:自己应用分享信息到微信应用

3.2.1:新建自己应用testAppJump2,自己应用发出的请求地址:myApp://open/WXSceneSession/share?text=good


3.2.2:新建微信应用, 引入框架包WFAppJump,新建WFSceneSessionActionCtroller类并实现actionshare,如图


3.2.3: 在appdelegate注入处理器,并拦截URL请求

3.2.4:然后运行:结果如下

3.2.5: 注意事项


四:需要框架包源码:https://github.com/wolvesqun/WFAppJump

2018-04-11 11:13:09 dashenid 阅读数 237

实现App跳转传值,使用URL Scheme

1.info->URL Types


如果使用多个URL Scheme,使用“,”隔开

2.在AppDelegate.m中增加协议方法:

#import "AppDelegate.h"

@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url  {
    return YES;
}

/**
 *ios 9之前会调用这个
 */
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation {
    NSLog(@"%@",sourceApplication);
    return YES;
}

/**
 *ios 9之后调用这个
 */
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options {
    NSLog(@"scheme:%@",[url scheme]); //scheme:test1://
    NSLog(@"query:%@",[url query]);//query:name=jin
    NSLog(@"%@",options[UIApplicationOpenURLOptionsSourceApplicationKey]);
    return YES;//如果由于某种原因应用程序无法打开,则返回NO
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    return YES;
}

@end


使用Safari打开:输入地址test1://test2://都能打开App,传值的话,使用test1://?name=jin,跟GET请求一样

在另一个App打开:

- (IBAction)openUrlScheme:(id)sender
{
    NSURL *url = [NSURL URLWithString:@"tese1://?name=jin"];
    //是否可以启动该url
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        [[UIApplication sharedApplication] openURL:url];
    }
    else{
        NSLog(@"No such url.");
    }
}
 结果如下图:


app 之间跳转(iOS)

阅读数 411

ios app 相互跳转

阅读数 31

iOS App之间跳转

阅读数 336

iOS App之间跳转

阅读数 3

iOS App之间跳转

阅读数 15

没有更多推荐了,返回首页