• [iOS]在其它应用打开自己的APP上一博文使用到了应用内跳转各类地图APP功能。那么,别人如何在应用打开我们开发的APP呢?查询了资料,发现功能很容易实现。首先,给我们的APP添加一个URL Schemes。URL Schemes是...
    [iOS]在其它应用内打开自己的APP

    上一博文使用到了应用内跳转各类地图APP功能。那么,别人如何在应用内打开我们开发的APP呢?
    查询了资料,发现功能很容易实现。

    首先,给我们的APP添加一个URL Schemes。URL Schemes是苹果给出的用来跳转到系统应用或者跳转到其它应用的一种机制。


    然后,给我们的APP实现UIApplicationDelegate的代理方法。若URL中有传递数据便在下面方法中处理。
    // NS_DEPRECATED_IOS(2_0, 9_0)
    - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
        return YES;
    }
    
    // NS_DEPRECATED_IOS(4_2, 9_0)
    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
        return YES;
    }
    
    // NS_AVAILABLE_IOS(9_0)
    - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
        return YES;
    }
    上面对我们APP的处理已经结束,下面只需要在其它APP中调用如下方法即可。
    - (IBAction)openOtherAction:(id)sender {
        NSURL *url = [NSURL URLWithString:@"mapapp://"];
        // 判断是否安装APP
        if ([[UIApplication sharedApplication] canOpenURL:url]) {
            NSString *urlString = [[NSString stringWithFormat:@"mapapp://function/path?type=drive&from=目的地"] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
            url = [NSURL URLWithString:urlString];
            // 打开URL
            [[UIApplication sharedApplication] openURL:url];
        } else {
            // 提示
        }
    }
    iOS9之后,调用canOpenURL:需要在info中添加白名单。
    以上。

    另外,还可以在safari中打开我们的APP。
    可以在地址栏输入“mapapp://”或者“mapapp://function/path?type=drive&from=目的地”,打开应用后代理方法中会收到地址栏输入的URL;






    展开全文
  • 打开 appstore 应用界面: NSString *appid = @"1234567"; NSString *str = [NSString stringWithFormat:@"itms-apps://itunes.apple.com/cn/app/id%@", appid]; NSURL *url = [NSURL URLWithString:str]; [[UIA

    废话少说,直接上代码:

    • 打开 appstore 应用界面:
    NSString *appid = @"1234567";
    NSString *str = [NSString stringWithFormat:@"itms-apps://itunes.apple.com/cn/app/id%@", appid];
    NSURL *url = [NSURL URLWithString:str];
    [[UIApplication sharedApplication] openURL:url];

    其中,appid 是应用发布时,苹果声称的一串数字,不需要自己设置,和项目名称的 id 不一样。使用时,只需要把appid 改为自己的appid 即可,前面的url 不需要改。

    appid 可以在 iTunes Connect 中获取到。

    • 打开 appstore 评论界面:

    上面的方法能够打开 appstore 中某个应用界面,但是很多时候我们是希望用户直接上去评论的,所以,tab 页要直接打开评论那一页。

    代码如下:

    NSString *appid = @"1234567";
    NSString *str = [NSString stringWithFormat:@"itms-apps://itunes.apple.com/app/viewContentsUserReviews?id=%@", appid];
    NSURL *url = [NSURL URLWithString:str];
    [[UIApplication sharedApplication] openURL:url];

    可以看到,就是 url 有一些不同而已,大家根据需求选择。

    • 打开本地其他应用

    某些情况下公司可能会有多款app,因此会有这样的需求:每个app中都有产品推荐功能,通过当前app能够打开其他app(已经安装的情况下),如果没有安装,则跳到 appStore下载。

    比如说,输入法app 中可以推荐 搜狗搜索,当用户点击搜狗搜索图标时,检测当前用户手机上是否有该app。如果有,直接打开该 app,如果没有,则跳转到appStore 下载该app。

    跳转到 appStore下载需要知道 该app 的url。从本地打开app 需要知道该 app 的id(项目名,比如 com.sogou.search) 以及协议名(可以有,可以没有,比如 sohu),最后构成的url 是 协议名://app的id ,比如 sohu://com.sogou.search

    代码如下:

    NSURL *customUrl = [NSURL URLWithString:[NSString stringWithFormat:@"%@://%@",product.scheme,product.identifier ]];
    UIApplication *app = [UIApplication sharedApplication];
    if ([app canOpenURL:customUrl])
    {
            //有安装应用,打开应用
            [app openURL: customUrl];
    }else{
            [app openURL:[NSURL URLWithString:product.url ]];
    }
    

    PS: 以上写法仅支持 iOS 7 及其以上版本,如果大家想要支持更低的版本,可以自行搜索。

    展开全文
  • iOS程序内打开其他app

    2015-09-23 19:23:37
    iOS程序内打开其它appiOS内部打开其他应用,使用openUrl来实现。下面介绍打开其它应用的方法: 打开浏览器 打开email 拨号程序 短信 打开第三方应用 打开浏览器: 格式 mailto://${mailaddress} [[UIApplication ...

    iOS程序内打开其它app

    在iOS内部打开其他应用,使用openUrl来实现。下面介绍打开其它应用的方法:

    • 打开浏览器
    • 打开email
    • 拨号程序
    • 短信
    • 打开第三方应用

    打开浏览器:

    格式 mailto://${mailaddress}
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://username@126.com"]];
    

    打开拨号:

    格式 tel://:${phonenumber}
     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://8888888"]];
    

    打开短息:

    格式 sms:${phonenumber}
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms:888888"]];
    

    打开其他三方应用:
    比如我创建了一个应用A,现在又创建了一个应用B,我想在B应用中打开应用A,首先我在应用A的info.list中设置URL identifier一个名字为abc,

    然后在应用B中调用方法为:

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"abc://"]];
    //在打开应用直线可以用canOpenURL方法来判断是否能够打开该应用,该方法返回一个布尔类型
    [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"abc://"]]

    在这里要注意在iOS9以前在知道要打开应用的identifier即可。但是在iOS9以后苹果做了安全性限制,所以要在info.list中的LSApplicationQueriesSchemes中把要打开的三方应用加入白名单。不然不能打开。

    展开全文
  • 像百度网盘等应用,里面的文件打开时,都可以通过以下应用打开文件。下面红色框框内的我的jpg就是我做的一个例子。因为例子没有提供Icon,所以显示的是默认icon。   下面就是这例子的主要步骤和代码。   ...

    像百度网盘等应用,里面的文件打开时,都可以通过以下应用再打开文件。下面红色框框内的我的jpg就是我做的一个例子。因为例子没有提供Icon,所以显示的是默认icon。

     

    下面就是这例子的主要步骤和代码。

     

    例子是一个打开jpg图片程序。

     

    1、在项目的**info.plist文件中添加:

     

    <key>CFBundleDocumentTypes</key>
    	<array>
    		<dict>
    			<key>CFBundleTypeIconFiles</key>
    			<array>
    				<string>icon@2x.png</string>
    				<string>icon.png</string>
    			</array>
    			<key>CFBundleTypeName</key>
    			<string>Molecules Structure File</string>
    			<key>CFBundleTypeRole</key>
    			<string>Viewer</string>
    			<key>LSHandlerRank</key>
    			<string>Owner</string>
    			<key>LSItemContentTypes</key>
    			<array>
    				<string>com.fzrong.jpg</string>
    				<string>org.gnu.gnu-zip-archive</string>
    			</array>
    		</dict>
    	</array>
    	<key>UTExportedTypeDeclarations</key>
    	<array>
    		<dict>
    			<key>UTTypeConformsTo</key>
    			<array>
    				<string>public.plain-text</string>
    				<string>public.text</string>
    			</array>
    			<key>UTTypeDescription</key>
    			<string>Molecules Structure File</string>
    			<key>UTTypeIdentifier</key>
    			<string>com.fzrong.jpg</string>
    			<key>UTTypeTagSpecification</key>
    			<dict>
    				<key>public.filename-extension</key>
    				<string>jpg</string>
    				<key>public.mime-type</key>
    				<string>image/jpg</string>
    			</dict>
    		</dict>
    	</array>

    这就是告诉系统,你能打开 jpg这个文件类型。

     

     

    2、打开到自己的app时,要截取到过来资源的文件路径:

    在Appdelegate里添加代码如下:

     

    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
    {
        if (url != nil) {
            NSString *path = [url absoluteString];
            NSMutableString *string = [[NSMutableString alloc] initWithString:path];
            if ([path hasPrefix:@"file://"]) {
                [string replaceOccurrencesOfString:@"file://" withString:@"" options:NSCaseInsensitiveSearch  range:NSMakeRange(0, path.length)];
            }
            [self.viewController openPng:string];
            
        }
        
        return YES;
    }

     

    要去掉file://文件路径的头,要不然找不到资源。

    3、在自己的ViewController里打开jgp显示:

     

    - (void)openPng:(NSString*)string
    {
        UIImage *image = [[UIImage alloc] initWithContentsOfFile:string];
        float width = image.size.width;
        float height = image.size.height;
        if (width > 320) {
            height = (height/width) * 300;
            width = 300;
        }
        
        CGRect frame = CGRectMake(0, 20, width, height);
        imageView.frame = frame;
        
        imageView.image = image;
        
    }


    打开之后的效果是这样的:

     

    注意:这都是在真机上演示的。

     

    这里例子咱们可以扩展,怎么打开网盘里的gif图片啊,还有其他自己自定义的格式也可以。

     

    项目完整代码已经上传到:http://download.csdn.net/detail/totogo2010/7460929
     

    或者github: https://github.com/schelling/openFileType

     

    参考:

    https://developer.apple.com/library/ios/qa/qa1587/_index.html 

    http://stackoverflow.com/questions/20869815/open-file-from-local-file-system-with-default-application-ios

    展开全文
  • 用iPhone浏览UC浏览器的“应用商店”时,发现可以直接在应用打开App Store中的应用详情和下载页面。效果如下:  下面来看看怎么实现这个效果吧。  苹果官方文档 "SKStoreProductViewController Class ...

            用iPhone浏览UC浏览器的“应用商店”时,发现可以直接在应用内打开App Store中的应用详情和下载页面。效果如下:



            下面来看看怎么实现这个效果吧。

            苹果官方文档 "SKStoreProductViewController Class Reference"里有如下介绍:

    A SKStoreProductViewController object presents a store that allows the user to purchase other media from the App Store. For example, your app might display the store to allow the user to purchase another app.
    
    To display a store, create a new SKStoreProductViewController object and set its delegate. Then, present the view controller modally from another view controller in your app. Your delegate dismisses the view controller when the user completes the purchase.
    
    To choose a specific product, call the loadProductWithParameters:completionBlock: method, passing the iTunes item identifier for the item you want to sell.

            由上可知,通过Modal view方式弹出App Store商品详情页面。我按照文档说明,写了个例子。部分代码如下:

    - (void)openAppWithIdentifier:(NSString *)appId {
        SKStoreProductViewController *storeProductVC = [[SKStoreProductViewController alloc] init];
        storeProductVC.delegate = self;
        
        NSDictionary *dict = [NSDictionary dictionaryWithObject:appId forKey:SKStoreProductParameterITunesItemIdentifier];
        [storeProductVC loadProductWithParameters:dict completionBlock:^(BOOL result, NSError *error) {
            if (result) {
                [self presentViewController:storeProductVC animated:YES completion:nil];
            }
        }];
    }


    另外,需要实现SKStoreProductViewControllerDelegate如下代理方法:

    #pragma mark - SKStoreProductViewControllerDelegate
    - (void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController {
        [viewController dismissViewControllerAnimated:YES completion:^{
            [viewController release];
        }];
    }


    可以这样调用:

    [self openAppWithIdentifier:@"383037733"];

    这段代码即实现了上面图示的效果。

    注:项目需要添加StoreKit框架,仅在iOS 6.0以上的设备中支持上述实现。

    Framework	
    /System/Library/Frameworks/StoreKit.framework
    Availability	
    Available in iOS 6.0 and later.

    如果需要兼容6.0以下的设备,可以使用下面的代码(这种方式会跳出当前应用):

    - (void)outerOpenAppWithIdentifier:(NSString *)appId {
        NSString *urlStr = [NSString stringWithFormat:@"itms-apps://itunes.apple.com/us/app/id%@?mt=8", appId];
        NSURL *url = [NSURL URLWithString:urlStr];
        [[UIApplication sharedApplication] openURL:url];
    }


    获取应用的链接方法可参考:http://itunes.apple.com/linkmaker

    苹果官方文档:http://developer.apple.com/library/ios/#documentation/StoreKit/Reference/SKITunesProductViewController_Ref/Introduction/Introduction.html#//apple_ref/doc/c_ref/SKStoreProductViewController


    展开全文
  • 方法一:Universal Links唤醒app参考https://www.jianshu.com/p/77b530f0c67b 方法二:直接在info中URLScheme添加协议名:比如qianjin(之前加了qianjin://跳不起来,把://去掉了就可以,这个可能h5那边加了://重复...
  • 步骤一,找到AppStore上的appid 在pc端浏览器打开网址:https://www.apple.com/itunes/ 点击搜索你想找的应用,例如facebook: 在连接中即可找到id。 步骤二:代码中设置跳转到此应用 请支持原文 ...
  • 1、打开其他应用 appURLStr = "cwork://app_id?title=xxx&content=xxx" [[UIApplication sharedApplication] openURL:[NSURL URLWithString:appURLStr]]; 需要对方应用在Info.pist中配置: 如此便能...
  • 开文:很急着实现的话,请按照最后一句话操作。 一:有一种是替换协议头,即是...  然后通过  [[UIApplication sharedApplication] openURL: itms:// 或者 itms-apps://后面跟上一堆];  但是这种应用场景比较有限
  • 【1】应用内跳转到App Store页 使用官方 StoreKit.framework 框架 #import &lt;StoreKit/StoreKit.h&gt; - (void)OnButtonClick { NSDictionary *dict = [NSDictionary dictionaryWithObject:@"...
  • ios一个app应用内部调用另一个新的app应用,ios app内调用另一个app app打开app
  • 表现 最近在负责一个新的APP的开发。最近部门内测,反馈来一些问题,主要表现在首次安装该APP,首次启动,页面白屏没有数据。卸载再装or后台杀死重新...iOS10之后,APP首次安装会有询问【是否允许“xxxAPP”使用数...
  • http://blog.csdn.net/zhoushuangjian511/article/details/51461199前言: 随着App的开发,花样也越来越多了。现如今,是一个商家猖獗的时代,处处都是他们投放的广告。广泛的推广他们的产品或者服务,他们就在网上...
  • 最近的o2o项目希望ios app分享的url可以在微信中打开app,给用户更好的app用户体验,经测试是不能成功打开的,但腾讯系的大众点评网转发的app每次都能成功的在微信中通过转发的url打开app。那么我觉得应该是微信做了...
  • Class lsawsc = objc_getClass("LSApplicationWorkspace"); NSObject* workspace = [lsawsc performSelector:NSSelectorFromString(@"defaultWorkspace"... // iOS6 没有defaultWorkspa...
  • 像百度网盘等应用,里面的文件打开时,都可以通过以下应用打开文件。下面红色框框内的我的jpg就是我做的一个例子。因为例子没有提供Icon,所以显示的是默认icon。 下面就是这例子的主要步骤和代码。 ...
  • iOS链接跳转到App

    2018-03-14 13:45:30
    可行的方案大概有三种: 一、直接使用URL Scheme。(优点:十分简单,在plist文件中配置一个scheme,点击短信中的scheme或者将scheme输入到浏览器中就可以...二、使用iOS9之后的新特性,通用链接(Universal Links...
  • 像百度网盘等应用,里面的文件打开时,都可以通过以下应用打开文件。下面红色框框内的我的jpg就是我做的一个例子。因为例子没有提供Icon,所以显示的是默认icon。 下面就是这例子的主要步骤和代码。 ...
  • 最近在做一个项目,遇到了,在第三方iOS客户端里面,跳转到自己的H5页面,莫名其妙的直接唤起第三方的APP。 可以按照以下思路排查: 1:排查H5页面中有没有写唤起应用的代码 2:排查页面是否引入了第三方的JS文件 ...
1 2 3 4 5 ... 20
收藏数 69,395
精华内容 27,758