标签:
新建新闻和微信模拟项目,从新闻界面中跳转至微信实例
如果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