如果你想在自己的app里通过系统分享弹窗直接分享视频到微信,并且是以卡片消息的形式,那么下面的两个接口可能会对你有所帮助!
实现这个需求:
- 首先需要将视频保存到系统相册,获取相册内的该资源URL;
- 这个相册资源URL与新版的系统接口返回的URL格式不同;
- 调用系统的UIActivityViewController,即可;
说明:
- 新的iOS版本,已经弃用了这种老的分享方式;
- 除了微信,其他app对这种老的分享方式支持的并不好;
- 通过ALAssetsLibrary的保存,没有返回资源的localId,在参数上对其他sdk不兼容。
+ (void)saveShareVideoToAlbum:(NSURL *)fileUrl completion:(void(^)(BOOL isSucceeded, NSURL *assetURL))completion {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library writeVideoAtPathToSavedPhotosAlbum:fileUrl completionBlock:^(NSURL *assetURL, NSError *error) {
BOOL isSuccessed = error == nil && assetURL != nil;
completion(isSuccessed , assetURL);
}];
#pragma clang diagnostic pop
}
+ (void)checkAssetExists:(NSURL *)assetURL completion:(void(^)(BOOL isExist))completion {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library assetForURL:assetURL resultBlock:^(ALAsset *asset) {
BOOL isExist = asset != nil;
completion(isExist);
} failureBlock:^(NSError *error) {
NSLog(@"checkAssetExists error: %@", error.localizedDescription);
completion(NO);
}];
#pragma clang diagnostic pop
}
相册资源URL:asserts-library://.....
新版的系统接口返回的URL格式:file://.....
而,这两种url作为参数,传至UIActivityViewController之后,展示形式和效果都不一样,
所以,这种方式也仅限于分享到微信使用,挖擦!
网友评论