购买插件for云打包,按照插件提示,选择使用插件的app;
输入ios和android名,即在hBuilderX 云打包时弹框里面的Android包名和Bundle ID;
在manifest.json文件的App原生插件配置中选择云端插件,导入刚刚购买的插件
一、android
如果是需要前端自己生成文件,则使用5+app的方法,写入文件
我这里需要把字符串写入文件,然后把写入的文件分享出去
portTextRequest([textstr, name,url]){
const vm=this
plus.io.requestFileSystem(plus.io.PUBLIC_DOWNLOADS, function(fs) {
fs.root.getFile(name+'.txt', {create: true
}, function(fileEntry) {
fileEntry.file(function(file) {
fileEntry.createWriter(function(writer) {
writer.onwrite = function() {
if(uni.getSystemInfoSync().platform=="android"){
uni.showModal({
title:'导出提示',
content:"txt文件导出成功,导出至:"+writer.fileName.match(/Android.*$/g)[0],
confirmText:'分享',
showCancel:true,
success(res) {
if(res.confirm){
const FileShare= uni.requireNativePlugin('life-FileShare');
FileShare.render({
type:"SYSTEM",
filePath:plus.io.convertLocalFileSystemURL(writer.fileName),
}, result => {
});
}
}
})
}
writer.seek(0);
writer.write(textstr);
}, function(e) {
file.resInfo = e;
});
});
});
}
这里说一下,textstr是要写入文件文本字符串,name是自定义的文件名,url android分享没用到,ios分享才用到。
const FileShare= uni.requireNativePlugin('life-FileShare');开始是引入我们前面导入的插件,FileShare.render是分享,其他ipa不明白可以查看uniapp官网和5+app官网。
我这里后面括号啥的可能写的不对,如果复制进去看到后面括号有问题就自己添加或者删除,代码就是这样。
二、ios
ios一串字符要以文件形式分享出去比android麻烦,但我花了一周时间终于走通了。
1. 申请app在微信公众平台的appid,这个是分享必要的,android使用上述插件可以不申请。
申请步骤:
(1)登录注册微信开放平台,申请成为开发者,需要开发认证费用,进入之后创建移动应用。填写相关信息,申请ios的appid时需要一个可以调起你app的通用链接Universal Link(这个申请过程中可以在表单上看到)。
(2)Universal Link申请有两种方法,一种是在hBuilderX的manifest.json的App模块配置中勾选Share(分享),然后勾选微信分享,在IOS平台通用链接那一条下点击自动生成,然后走uniCloud云服务空间那条路,这条路我没走通,需要的话可以自行研究;还有一种方法是原生生成Universal Link的方法
(3)具体可参考以下文章,我是照着下面这个文章走通的。UniApp:IOS篇:通用链接【Universal Links】配置_染小七的博客-CSDN博客_ios ulinks
(4)申请并配置成功后,在微信开放平台上填入,然后提交审核。
2. 在项目中配置
打开hBuilderX的manifest.json的App模块配置,勾选分享,填入以下信息
3. 代码实现
要想将文本转为文件,不能用上述android的方法,需要将文本内容转为base64格式的字符串,具体是先将字符串转为Blob对象,然后将Blob对象转为base64。uniapp不支持Blob对象,window对象这些,但renderjs里面支持。
文本转Base64代码:
let urlObject = window.URL || window.webkitURL || window;
let export_blob = new Blob([textstr],{ type: 'text/plain'});
this.blobToBase64(export_blob, (dataurl) => {
let pdfBase64 = dataurl; //这个pdfBase64就是base64格式
});
blobToBase64(blob, callback) {
const fileReader = new FileReader();
fileReader.onload = (e) => {
callback(e.target.result);
};
}
分享代码:
const FileShare= uni.requireNativePlugin('life-FileShare');
//下面的url是base64格式的文本
var dtask = plus.downloader.createDownload(url,
{filename:"_doc/pdf/"+name+'.txt'}, function(d, status){
if(status == 200){
FileShare.render({
type:"SYSTEM",
filePath:plus.io.convertLocalFileSystemURL(d.filename),
}, result => {
});
} else {
}
});
dtask.start();