【不求人】手机端内应用或网页根据apk/ipa内的scheme/包名唤起别的应用
记录下,当别人要求唤起某个应用,但没提供太多信息(除了应用名称之外)的情况下,可能会用的上。
第一步,查看包名和Scheme,需要下载对应App的apk,ipa。
Android:解压apk,找出AndroidManifest.xml文件。使用AXMLPrinter2.jar对xml文件进行反编译。(环境要求:能运行java命令,在网上下载AXMLPrinter2.jar)
编译命令:
java -jar AXMLPrinter2.jar AndroidManifest.xml > main.txt
运行完毕后得到的main.txt里就是反编译后的明文xml。在其中找scheme和package就行;其中scheme可能有多个,你需要逐个去试下能不能唤起对应应用的期望界面;(按经验来说,含有“notification”字样的scheme大多符合唤起界面的要求)
IOS:将ipa移至macbook上,把后缀名改成zip,利用归档工具解压;点进去,有个“显示包内容”选项,里面找到info.plist文件;URL Types里找对应的URL Scheme就行;包名的话,就找“CFBundleIdentifier”这个字段对应的值;
第二步,编写唤起代码。(例子:包名:com.aaa.bbb;scheme:xxx)
Android应用: 根据包名唤起的方法:openAppcation("com.aaa.bbb");
public static boolean openAppcation(String packname){try {PackageManager packageManager = mContext.getPackageManager();Intent intent = new Intent();intent = packageManager.getLaunchIntentForPackage(packname);if (intent != null) {mContext.startActivity(Intent.createChooser(intent, ""));return true;}} catch (Exception e) {e.printStackTrace();}return false;}
根据scheme唤起:
public static void openXXX() {try {PackageManager packageManager = mContext.getPackageManager();Intent intent = new Intent();intent = packageManager.getLaunchIntentForPackage("com.aaa.bbb");if (intent == null) {//Toast提示之类("请安装XXX客户端");} else {mContext.startActivity(Intent.createChooser(intent, ""));}} catch (Exception e) {e.printStackTrace();}}
手机网页:根据scheme唤起:(TS版)
window.open("xxx://");
IOS内应用:根据包名唤起:[openAppcation:@"com.aaa.bbb"];
#import <objc/runtime.h> //objc_getClass 用到//唤起应用
+(NSString *)openAppcation:(NSString *)packname{Class lsawsc = objc_getClass("LSApplicationWorkspace");NSObject* workspace = [lsawsc performSelector:NSSelectorFromString(@"defaultWorkspace")];// iOS6 没有defaultWorkspaceif ([workspace respondsToSelector:NSSelectorFromString(@"openApplicationWithBundleID:")]){[workspace performSelector:NSSelectorFromString(@"openApplicationWithBundleID:") withObject:packname];return @"1";}//0 失败 1 成功 2其他平台默认return @"0";
}
根据URL Scheme唤起:
//打开XXX
+(void) openXXX:(NSString *)num{if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"xxx://"]]) {NSURL *url1 = [NSURL URLWithString:@"xxx://"];[[UIApplication sharedApplication] openURL:url1 options:@{} completionHandler:^(BOOL success) {if(success)NSLog(@"open xxx successed");else{NSLog(@"open xxx failed");}}];}else{NSLog(@"open xxx failed");//或者跳到APPSTORE里下载该应用//[XXX jumpAppStoreDL:@"该应用的appid"];}
}//跳转app store 下载应用
+(void) jumpAppStoreDL:(NSString *)appid{NSString *url = [NSString stringWithFormat:@"itms-apps://itunes.apple.com/app/id%@",appid];//应用 在App Store的 app IDNSURL *url2 = [NSURL URLWithString:url];if (@available(iOS 10.0, *)){[[UIApplication sharedApplication]openURL:url2 options:@{UIApplicationOpenURLOptionsSourceApplicationKey:@YES} completionHandler:^(BOOL success) {if (success) {NSLog(@"10以后可以跳转 App Store下应用 id:%@",appid);}else{NSLog(@"10以后不可以跳转App Store下应用 id:%@",appid);}}];}else{BOOL success = [[UIApplication sharedApplication]openURL:url2];if (success) {NSLog(@"10以前可以跳转 App Store下应用 id:%@",appid);}else{NSLog(@"10以前不可以跳转 App Store 下应用 id:%@",appid);}}
}
并且还要在你应用的Info.plist里白名单(LSApplicationQueriesSchemes)加上它的URL Scheme。
<key>LSApplicationQueriesSchemes</key><array><string>xxx</string><string>itms-apps</string><string>weixinULAPI</string><string>weixin</string><string>wechat</string><string>mqq</string><string>mqqwpa</string><string>mqzone</string><string>mqqapi</string><string>mqqopensdkapiv2</string><string>mqqopensdkapiV3</string><string>mqqopensdkapiV4</string><string>mqzoneopensdk</string><string>mqzoneopensdkapiV2</string><string>mqqopensdkminiapp</string><string>mqzoneopensdkapi19</string><string>mqzoneopensdkapi</string><string>mqqOpensdkSSoLogin</string></array>
至此,记录完毕。
【不求人】手机端内应用或网页根据apk/ipa内的scheme/包名唤起别的应用相关推荐
- html5多屏互动游戏,多屏互动 —— 手机端与PC端 网页互动的现有尝试及设想
不可否认,多屏时代已经到来. 手机/平板/笔记本/PC/TV等,多个显示平台的逐步构建,为信息传播及交互提供了多重平台及体验选择. 素材:多屏自适应网页设计/多屏延生设计 在此篇文章,取手机端与PC端 ...
- 外网远程唤醒群晖NAS:路由器唤醒/内网树莓派唤醒/手机端WOL软件远程唤醒/网页工具唤醒
一.内网区设置 1.电信光猫使用公网IP,设置桥接模式 2.路由器拨号上网,设置DDNS,开启远程管理(管理端口默认:8443) https:/删除/XXXXXXXX.mynetgea ...
- PC谷歌浏览器测试手机端安卓、IOS网页
在程序员开发工作中,我涉及到安卓和IOS兼容时,老是拿IOS实机来测试,安卓就直接在谷歌浏览器上测试,我发现这实在麻烦,因为在实机上有跨域问题,还要后端配合,今天心血来潮查了一翻资料,自己试了试,原来 ...
- 动画自动滚动div/像素基础知识/手机端样式选择/
大体上和原网页差不多,一个主页和一个子页面 动画自动滚动div: <!DOCTYPE html> <html> <head> <meta charset=&q ...
- ecshop手机端订单城市插件(基于gps定位)
以前曾看到有人说php能获取手机的ip,可是,在没有用WiFi并且手机是3G或者4G的卡时,根本无法获取手机的ip,所以在看到许多手机app都在用gps定位后,我也去研究了一下,经测试,确实可以获取所 ...
- 手机端联网,电脑端借助手机端网络上网
估计有wifi的电脑使用者,会经常使用电脑做热点,手机(也有wifi)借助电脑的网络来上网,这个估计大多数都有尝试,关于这个的文章,估计百度一搜,一大把.有时候会出现手机和电脑连上了,有信号,但不能上 ...
- 手机端h5唤起苹果地图
最近做一个项目分为pc和手机两个端,手机端需要调用第三方地图,可以选择高德地图和苹果地图,唤起高德地图的方法官网就有,网上一搜也是一大堆.这个不用多说,但唤起苹果地图的方法寥寥无几,几乎搜索不到,找了 ...
- 【fiddler学习问题记录】——手机端证书下载页打不开、无法将此证书安装(已解决)
目录 1.手机端下载页打不开 解决方法1)电脑端--将网络设置成公用(亲测有效) 解决方法2)手机端将fiddler设置为信任应用,不被拦截 (未试) 2.无法将此证书安装 方法一:修改证书后缀名ce ...
- 如何爬取手机端cookie
什么是cookie Cookie,有时也用其复数形式 Cookies.类型为"小型文本文件",是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经 ...
最新文章
- atexit()函数
- wpsppt怎样让图片模糊_图片优化的14个技巧!
- [ShapeInferenceError] Mismatch between number of source and target dimensions. Source=1 Target=0
- 生成式模型和判别式模型(转)
- python处理字典的方法_python字典的常用操作方法小结
- C++常见错误:LINK:fatal error LNL1123:转换到COFF期间失败,文件无效或者损坏
- 为什么程序员愿意加入管理糟糕的创业公司?
- 设计模式【单例模式】
- java判断栈中元素数目_Java数据结构与算法-栈和队列
- java删不了_java – 为什么我不能删除项目?
- 程序员因太过耿直,致苹果官网出现bug......
- http系列---Apache AB测试工具
- Java对象转Map的解决办法
- 如何利用Exif提取软件从图片中抓取有价值数据
- 等保2.0多少分合格?70分还是80分呢?
- Alpha阶段测试报告
- jquery引入外部CDN,失效后则引入本地jq库
- ThinkPad E420升级之路
- mybatis mapperLocations配置失效
- windows中定时操作(SetTimer函数用法)