今天主要说下 Share Extension 网上有很多教程,自个也亲自实现了一次!
一 、Extension的种类
我们可以在Xcode的File--->New--->Target里面看到不同平台的Extension,包括iOS、watchOS、tvOS、macOS等等。这里主要介绍iOS,主要包括以下几种Extensions:
1.Action Extension:动作扩展,在另一个应用程序的上下文中操作或者查看内容
2.Audio Unit Extension:音频单元扩展
3.Broadcast UI Extension:广播UI 扩展
4.Broadcast Upload Extension:广播上传扩展
5.Call Directory Extension:呼叫目录扩展
6.Content Blocker Extension:内容拦截器扩展
7.Custom Keyboard Extension:键盘扩展,例如第三方的键盘,搜狗输入法,百度输入法等。
8.iMessage Extension:消息的扩展
9.Intents Extension:Intents扩展
10.Intents UI Extension:Intents UI扩展
11.Notification Content Extension:通知内容扩展
12.Notification Service Extension:通知服务扩展
13.Photo Editing Extension:图片编辑扩展,在照片app中编辑照片或者视频
14.Share Extension:分享扩展,发布一个共享网站或者与其他应用共享内容。
15.Shared Links Extension:分享链接扩展
16.Spotlight Index Extension:Spotlight 索引扩展
17.Sticker Pack Extension:贴纸包扩展
18.Today Extension:Today扩展,可以快速获取更新或者在通知中心的近日视图中执行一项快速任务。
等等。也可直接在苹果官方文档参见更多extension。
可能用到的技术:
将App添加到系统分享列相册和截图
在系统分享列表中加入自己的应用-此方法仅限于分享文件
分享1
分享2
分享3
分享4
分享5
总有一篇适合你看懂的
- 上架注意:分享的扩展里不可有延时操作,版本号和主工程保持一致,证书group记着上线看看打开可用状态,不可单独上线。
二 、你可能使用到的技术
给你的iOS应用注册url scheme(就是别的APP可以跳转到你的APP的一个接口)
如何注册?
每个应用都有一个或多个plist文件,即info.plist,在这个苹果自带配置文件中增加相关key-value。
第一步:添加URL types
第二步:展开URL types,第1个元素(即item 0)下方添加URL Schemes
第三步:展开URL Schemes,第1个元素(即item 0)修改value为自定义的字符串,例如test
测试:
1.打开手机Safari,输入test://
2.Safari提示,点击“打开”,ok!
3.如果应用处于调试状态,可以断点在AppDegate中的application:openURL:options:方法里,可以拿到对应的url。对于使用基于url scheme页面导航框架的应用来说,hi可以做很多其他有意思的事。
- APP之间跳转
if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:url]]){
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
}
三、iOS 获取当前屏幕显示的viewcontroller
此功能用于跳转(分享的时候 跳转到自个APP 然后获取当前VC 然后就可以推出到任何VC进行分享 之后且返回当前VC 前提APP在登录情况下)
//获取当前屏幕显示的viewcontroller
- (UIViewController *)getCurrentVC
{
UIViewController *rootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
UIViewController *currentVC = [self getCurrentVCFrom:rootViewController];
return currentVC;
}
- (UIViewController *)getCurrentVCFrom:(UIViewController *)rootVC
{
UIViewController *currentVC;
if ([rootVC presentedViewController]) {
// 视图是被presented出来的
rootVC = [rootVC presentedViewController];
}
if ([rootVC isKindOfClass:[UITabBarController class]]) {
// 根视图为UITabBarController
currentVC = [self getCurrentVCFrom:[(UITabBarController *)rootVC selectedViewController]];
} else if ([rootVC isKindOfClass:[UINavigationController class]]){
// 根视图为UINavigationController
currentVC = [self getCurrentVCFrom:[(UINavigationController *)rootVC visibleViewController]];
} else {
// 根视图为非导航类
currentVC = rootVC;
}
return currentVC;
}