码迷,mamicode.com
首页 > 其他好文 > 详细

应用间跳转

时间:2015-03-20 23:31:56      阅读:433      评论:0      收藏:0      [点我收藏+]

标签:

新建新闻和微信模拟项目,从新闻界面中跳转至微信实例

技术分享技术分享

技术分享技术分享

技术分享技术分享

 

如果app允许被外界跳转需要配置URL 项目->target->info->URL Types->URL Schemes进行配置

新闻:

/*
 URL:统一资源定位符 http://www.baidu.com tel://110 file:///apple/Desktop/
 协议头Scheme:http:// tel:// file://
 资源路径path:www.baidu.com 110 /apple/Desktop/
 
 项目->info->url types ->+ -> 配置协议头
 */

#import "ViewController.h"

@interface ViewController ()

/**
 *  点击之后跳转到微信
 */
- (IBAction)jump;
/**
 *  点击微信好友按钮跳转到微信
 */
- (IBAction)sesstion;
/**
 *  点击朋友圈按钮跳转到微信
 */
- (IBAction)timeline;

@end

@implementation ViewController

- (IBAction)jump {
    [self openWeiXin:@"weixin://"];
}

- (IBAction)sesstion {
    [self openWeiXin:@"weixin://session?news"];
}

- (IBAction)timeline {
    [self openWeiXin:@"weixin://timeline"];
}

- (void)openWeiXin:(NSString *)urlStr
{
    // 1.创建要打开的App的URL
    NSURL *weixinURL = [NSURL URLWithString:urlStr];
    
    // 2.判断是否该URL可以打开
    if ([[UIApplication sharedApplication] canOpenURL:weixinURL]) {
        
        // 3.打开URL
        [[UIApplication sharedApplication] openURL:weixinURL];
    }
}

 

微信:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property(nonatomic,copy)NSString *appURLStr;

@end

#import "ViewController.h"
#import "SessionViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"session"]) {
        SessionViewController *sessionVc = segue.destinationViewController;
        sessionVc.appURLStr = self.appURLStr;
    }
}

@end


#import "SessionViewController.h"

@interface SessionViewController ()

/**
 *  返回到跳转过来的APP
 */
- (IBAction)backToApp;

@end

#import <UIKit/UIKit.h>

@interface SessionViewController : UIViewController

@property(nonatomic,copy)NSString *appURLStr;

@end

@implementation SessionViewController

- (IBAction)backToApp {
    NSRange range = [self.appURLStr rangeOfString:@"?"];
    NSString *appStr = [self.appURLStr substringFromIndex:(range.location + 1)];
    
    NSString *appURL = [NSString stringWithFormat:@"%@://", appStr];
    
    NSURL *url = [NSURL URLWithString:appURL];
    
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        [[UIApplication sharedApplication] openURL:url];
    }
}
@end
#import "AppDelegate.h"
#import "ViewController.h"

@interface AppDelegate ()

@end

@implementation AppDelegate


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

//- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
//{
//    
//}

/**
 *  当通过别应用打开该应用的时候会执行该方法
 *
 *  @param url               通过哪一个URL跳转过来的
 */
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    // 取出来根控制器
    UINavigationController *rootNav = (UINavigationController *)self.window.rootViewController;
    
    // 回到根控制器
    [rootNav popToRootViewControllerAnimated:NO];
    
    // 取出ViewController<根控制器>
    ViewController *mainVc = [rootNav.childViewControllers firstObject];
    
    NSString *urlStr = url.absoluteString;
    if ([urlStr rangeOfString:@"session"].length) {
        
        mainVc.appURLStr = urlStr;
        
        // 根据segue标识,跳转到微信好友界面
        [mainVc performSegueWithIdentifier:@"session" sender:nil];
        
    } else if ([urlStr rangeOfString:@"timeline"].length){
        // 根据segue标识,跳转到朋友圈界面
        [mainVc performSegueWithIdentifier:@"timeline" sender:nil];
    }
    
    return YES;
}

@end

 

应用程序互相跳转笔记
应用程序互相跳转笔记

项目->Target->info->URL Types->URL schemes->提供应用共外界调用的协议头

1. 应用场景

1) 使用第三方用户登录,需要用户授权,还需要"返回到调用的程序,同时返回授权的用户名"

2) 应用程序推广,网易彩票,设置-推荐应用-有很多应用程序图标
-如果本机已经安装过,会直接跳转到另外一个应用程序
-软件的广告,推广结果,后续会有一些列的金钱上的结算

3)    支付宝,第三方支付,淘宝,电话费充值。。。

2. 要打开本机上的其他应用程序,需要设置schemes,自定义的协议头,可以打开其他的应用程序

跳转的代码如下:

- (IBAction)openWangyi:(id)sender
{
    // 跳转到其他应用程序
    // schemes: 网易的scheme wangyi
    NSURL *url = [NSURL URLWithString:@"wangyi://view?newsid=201410130001"];
    
    // 判断本机是否安装了目标程序
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        [[UIApplication sharedApplication] openURL:url];
    } else {
        NSLog(@"没有安装,可以再给定下载地址,前往");
    }
}

3. 新浪微博的授权界面说明:

1>    在新浪微博中,本身不能直接跳转到该界面
2> 用其他应用程序打开时,如果scheme时weibo://oaauth,直接进入此界面
3> 如果直接点击,返回,返回调用放应用程序
4> 如果点击表格行中的用户名,直接返回用户信息给调用应用程序


4. 如果要返回调用的应用程序,需要知道调用我们的应用程序的scheme


/** 只要是由其他应用程序打开的,就会调用此方法 */
/** URL 就是其他应用程序,打开当前程序使用的URL */
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

/**
 openURL 是打开当前应用程序的url
 sourceApplication 是当开当前应用程序的源程序的BundleId
 
 提示:一旦重写了新方法,旧方法就不再被执行
 但是:很多第三方框架,都建议两个方法全都写
 */
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

 

应用间跳转

标签:

原文地址:http://www.cnblogs.com/HJiang/p/4354742.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!