HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

个推支持海外消息推送,助力APP扬帆出海

个推SDK 消息推送 移动APP

在全球化的浪潮之下,越来越多的国内开发者选择“乘风出海”。消息推送作为APP连接用户的有效途径,成为开发者进军海外市场的刚需。但由于海内外网络环境、应用生态等的差异,APP在海外推送的过程中,也面临着消息通道建设、海外用户精细运营、数据安全合规等方面的诸多挑战。

为此,个推推出海外消息推送解决方案,帮助APP高效整合海外消息通道,构建智能、精细、高效的用户触达体系,促进APP海外业务快速增长。

多链路触达体系,提升用户触达

用户触达通道,是APP与用户高效沟通的“桥梁”。但在APP构建海外消息通道的过程中,也存在着不少“隐痛”:一方面,自建通道或逐一对接各厂商海外通道,不仅费时费力且成本居高不下;另一方面,面对全球复杂的网络环境,若APP只采用FCM或APNs的系统通道,又会遇到消息送达率的瓶颈。

个推为APP构建了海外多链路触达体系,助其打破用户触达的壁垒。基于APP海外推送需求,个推不仅提供自有在线渠道,无缝对接FCM、APNs系统通道,还高效整合了小米、华为、荣耀、魅族、 OPPO等厂商推送能力。APP只需一次集成即可接入多厂商海外推送服务,实现在线、离线推送,保障消息稳定、高效送达。同时,个推还支持国际短信推送,帮助APP进一步拓宽海外用户触达渠道,全面提升消息到达率。

依托海外多链路触达体系, APP不仅可以自选消息下发通道触达海外用户,还能通过消息并发、分发、补发等方式,提高消息到达率。此外,个推还提供离线消息库、超长消息自动截短、厂商推送余量查询管理等能力,支持各阶段、各渠道推送数据后效分析,帮助APP科学管理渠道资源,以更低的成本实现用户触达效率的全面升级。

多样化推送策略,提升用户转化

消息点击率与运营转化效果密不可分。

基于海外推送场景,个推支持丰富的消息展示样式以及亮屏推送、A/B Test、消息分组、定时推送等消息运营工具,帮助APP精细化触达海外目标人群,提高消息点击转化率,提升用户活跃与留存。

保障数据合规,护航APP“扬帆出海

数据安全是全球关注的焦点,也是APP出海的“必修课”。

为全方位护航APP扬帆出海,个推构建了全球化的云服务集群,实现全球服务器多节点部署,保障海外推送的稳定性。此外,个推还提供分层权限管理、鉴权体系、日志监控、敏感内容审核过滤等多重保护机制,帮助APP降低运营风险,全方位保障数据安全、系统安全和内容安全。

深耕移动开发领域十余年,个推通过安全、稳定、可靠的产品及服务赢得了全球开发者的信赖。大航海时代,个推还将持续创新产品和技术服务,帮助更多开发者提升增长效率、开拓海外市场版图。

合作咨询

如果您对个推海外推送解决方案感兴趣,欢迎“码”上咨询,个推专属顾问,为您提供一对一服务!

继续阅读 »

在全球化的浪潮之下,越来越多的国内开发者选择“乘风出海”。消息推送作为APP连接用户的有效途径,成为开发者进军海外市场的刚需。但由于海内外网络环境、应用生态等的差异,APP在海外推送的过程中,也面临着消息通道建设、海外用户精细运营、数据安全合规等方面的诸多挑战。

为此,个推推出海外消息推送解决方案,帮助APP高效整合海外消息通道,构建智能、精细、高效的用户触达体系,促进APP海外业务快速增长。

多链路触达体系,提升用户触达

用户触达通道,是APP与用户高效沟通的“桥梁”。但在APP构建海外消息通道的过程中,也存在着不少“隐痛”:一方面,自建通道或逐一对接各厂商海外通道,不仅费时费力且成本居高不下;另一方面,面对全球复杂的网络环境,若APP只采用FCM或APNs的系统通道,又会遇到消息送达率的瓶颈。

个推为APP构建了海外多链路触达体系,助其打破用户触达的壁垒。基于APP海外推送需求,个推不仅提供自有在线渠道,无缝对接FCM、APNs系统通道,还高效整合了小米、华为、荣耀、魅族、 OPPO等厂商推送能力。APP只需一次集成即可接入多厂商海外推送服务,实现在线、离线推送,保障消息稳定、高效送达。同时,个推还支持国际短信推送,帮助APP进一步拓宽海外用户触达渠道,全面提升消息到达率。

依托海外多链路触达体系, APP不仅可以自选消息下发通道触达海外用户,还能通过消息并发、分发、补发等方式,提高消息到达率。此外,个推还提供离线消息库、超长消息自动截短、厂商推送余量查询管理等能力,支持各阶段、各渠道推送数据后效分析,帮助APP科学管理渠道资源,以更低的成本实现用户触达效率的全面升级。

多样化推送策略,提升用户转化

消息点击率与运营转化效果密不可分。

基于海外推送场景,个推支持丰富的消息展示样式以及亮屏推送、A/B Test、消息分组、定时推送等消息运营工具,帮助APP精细化触达海外目标人群,提高消息点击转化率,提升用户活跃与留存。

保障数据合规,护航APP“扬帆出海

数据安全是全球关注的焦点,也是APP出海的“必修课”。

为全方位护航APP扬帆出海,个推构建了全球化的云服务集群,实现全球服务器多节点部署,保障海外推送的稳定性。此外,个推还提供分层权限管理、鉴权体系、日志监控、敏感内容审核过滤等多重保护机制,帮助APP降低运营风险,全方位保障数据安全、系统安全和内容安全。

深耕移动开发领域十余年,个推通过安全、稳定、可靠的产品及服务赢得了全球开发者的信赖。大航海时代,个推还将持续创新产品和技术服务,帮助更多开发者提升增长效率、开拓海外市场版图。

合作咨询

如果您对个推海外推送解决方案感兴趣,欢迎“码”上咨询,个推专属顾问,为您提供一对一服务!

收起阅读 »

乐乐音乐H5网页版-支持krc歌词(动感歌词、翻译和音译歌词)

简介

乐乐音乐H5网页版主要是基于uni-app框架开发的音乐播放器,目前只支持krc歌词(支持歌词颜色、字体大小、歌词进度调整和翻译和音译歌词),不支持歌词快进功能。

环境配置

HBuilder 3.5.3.20220729  
Vue 2.0  

功能截图

网络

默认歌词

翻译歌词

音译歌词

设置

关于

反馈

性能

注:该版本主要是针对H5来开发,如果在手机上运行卡顿严重,建议下载Android版本;如果放到电脑网页上运行,性能较好。

参考

uni-app官网

https://uniapp.dcloud.net.cn/

uni Canvas

https://uniapp.dcloud.net.cn/api/canvas/CanvasContext.html

popmotion JS动画库

https://github.com/Popmotion/popmotion.git

乐乐音乐Android版本

https://github.com/zhangliangming/HappyPlayer5.git

项目地址

https://github.com/zhangliangming/HappyPlayer-Uni.git

其他

  • 使用hb编译时,因为会存在跨域问题,建议使用内置浏览器运行。
  • 由于uni是一种多平台的框架,有兴趣的可将代码编译到其他的平台和拓展其他格式的歌词。
  • 目前是将Java代码语言翻译成对应的Js语言,在手机端上运行性能比较差,如果在PC上运行性能相对较好。
继续阅读 »

简介

乐乐音乐H5网页版主要是基于uni-app框架开发的音乐播放器,目前只支持krc歌词(支持歌词颜色、字体大小、歌词进度调整和翻译和音译歌词),不支持歌词快进功能。

环境配置

HBuilder 3.5.3.20220729  
Vue 2.0  

功能截图

网络

默认歌词

翻译歌词

音译歌词

设置

关于

反馈

性能

注:该版本主要是针对H5来开发,如果在手机上运行卡顿严重,建议下载Android版本;如果放到电脑网页上运行,性能较好。

参考

uni-app官网

https://uniapp.dcloud.net.cn/

uni Canvas

https://uniapp.dcloud.net.cn/api/canvas/CanvasContext.html

popmotion JS动画库

https://github.com/Popmotion/popmotion.git

乐乐音乐Android版本

https://github.com/zhangliangming/HappyPlayer5.git

项目地址

https://github.com/zhangliangming/HappyPlayer-Uni.git

其他

  • 使用hb编译时,因为会存在跨域问题,建议使用内置浏览器运行。
  • 由于uni是一种多平台的框架,有兴趣的可将代码编译到其他的平台和拓展其他格式的歌词。
  • 目前是将Java代码语言翻译成对应的Js语言,在手机端上运行性能比较差,如果在PC上运行性能相对较好。
收起阅读 »

iOS 本地消息推送通知

消息推送 iOS

效果如图

参考 iOS 最新的 UNNotificationRequest API

function notifyWithInterval(interval) {  

    //content https://developer.apple.com/documentation/usernotifications/unmutablenotificationcontent?language=objc  
    const content = plus.ios.newObject("UNMutableNotificationContent")  
    const Sound = plus.ios.importClass('UNNotificationSound')  
    content.plusSetAttribute("title", 'title');  
    content.plusSetAttribute("subtitle", 'subtitle');  
    content.plusSetAttribute("body", 'body_' + interval);  
    content.plusSetAttribute('sound', Sound.defaultSound());  

    //trigger https://developer.apple.com/documentation/usernotifications/unnotificationtrigger?language=objc  
    const Trigger = plus.ios.importClass("UNTimeIntervalNotificationTrigger")  
    const trigger = Trigger.triggerWithTimeIntervalrepeats(interval, false)  

    const UUID = plus.ios.newObject('NSUUID')  
    const uuid = UUID.plusGetAttribute('UUIDString')  
    // const uuid = plus.tools.UUID('TIMER');  

    //request  
    const Req = plus.ios.importClass('UNNotificationRequest')  
    const req = Req.requestWithIdentifiercontenttrigger(uuid, content, trigger)  

    const NotiCenter = plus.ios.importClass("UNUserNotificationCenter")  
    const userNotiCenter = NotiCenter.currentNotificationCenter()  

    userNotiCenter.addNotificationRequest(req)  
}

调用如下:

export default {  
    ......  
    onLaunch: function() {  
        ......  
        // 5 秒后推送本地提醒  
        notifyWithInterval(5)  
    }  
    ......  
}

其实不复杂,只是参考资料太少了,花两百买了一段代码,结果还是iOS废弃的api,自己看 iOS的文档重写了一个。
这里只写了一个 triggerWithTimeIntervalrepeats 的例子,其他的可参考 unnotificationtrigger

比较遗憾的是 delegate功能一直没调通,也就是自定义收到消息的后续操作,完全按 iOS 的文档实现 UNUserNotificationCenterDelegate
怎么都不行,有实现了的可以交流下,不打算弄原生插件,打算弃坑了……

继续阅读 »

效果如图

参考 iOS 最新的 UNNotificationRequest API

function notifyWithInterval(interval) {  

    //content https://developer.apple.com/documentation/usernotifications/unmutablenotificationcontent?language=objc  
    const content = plus.ios.newObject("UNMutableNotificationContent")  
    const Sound = plus.ios.importClass('UNNotificationSound')  
    content.plusSetAttribute("title", 'title');  
    content.plusSetAttribute("subtitle", 'subtitle');  
    content.plusSetAttribute("body", 'body_' + interval);  
    content.plusSetAttribute('sound', Sound.defaultSound());  

    //trigger https://developer.apple.com/documentation/usernotifications/unnotificationtrigger?language=objc  
    const Trigger = plus.ios.importClass("UNTimeIntervalNotificationTrigger")  
    const trigger = Trigger.triggerWithTimeIntervalrepeats(interval, false)  

    const UUID = plus.ios.newObject('NSUUID')  
    const uuid = UUID.plusGetAttribute('UUIDString')  
    // const uuid = plus.tools.UUID('TIMER');  

    //request  
    const Req = plus.ios.importClass('UNNotificationRequest')  
    const req = Req.requestWithIdentifiercontenttrigger(uuid, content, trigger)  

    const NotiCenter = plus.ios.importClass("UNUserNotificationCenter")  
    const userNotiCenter = NotiCenter.currentNotificationCenter()  

    userNotiCenter.addNotificationRequest(req)  
}

调用如下:

export default {  
    ......  
    onLaunch: function() {  
        ......  
        // 5 秒后推送本地提醒  
        notifyWithInterval(5)  
    }  
    ......  
}

其实不复杂,只是参考资料太少了,花两百买了一段代码,结果还是iOS废弃的api,自己看 iOS的文档重写了一个。
这里只写了一个 triggerWithTimeIntervalrepeats 的例子,其他的可参考 unnotificationtrigger

比较遗憾的是 delegate功能一直没调通,也就是自定义收到消息的后续操作,完全按 iOS 的文档实现 UNUserNotificationCenterDelegate
怎么都不行,有实现了的可以交流下,不打算弄原生插件,打算弃坑了……

收起阅读 »

相册获取所有照片图片和视频(ios)

相册获取所有照片图片和视频(ios) :https://ext.dcloud.net.cn/plugin?id=9060

相册获取所有照片图片和视频(ios) :https://ext.dcloud.net.cn/plugin?id=9060

通讯录选择联系人、可单选、多选、详情(ios)

通讯录选择联系人、可单选、多选、详情(ios):https://ext.dcloud.net.cn/plugin?id=9107

通讯录选择联系人、可单选、多选、详情(ios):https://ext.dcloud.net.cn/plugin?id=9107

App封装源码|分发平台搭建ios免签封装

源码分享

  快速发展的技术已推动企业在整个组织中使用各种应用程序。应用程序现在已成为提高生产力的组织不可或缺的一部分。App封装源码中全面的“应用程序管理”功能让您可以无缝地安装、控制和保护应用程序。
  
  App封装源码及演示:s.appwin.top
  
  什么是 App封装源码?
  
  App封装源码最近在其应用库中添加了大量应用,以向其消费者提供改进的服务。每个 App封装源码工具都旨在帮助开发人员以更好的方式构建、发展和改进。
  
  它可以帮助您测试跨平台,这意味着它可以让您上传两个 iOS 以构建一个 android APK 到同一个服务并将您的应用程序分发给适当的用户。
  
  更令人惊奇的是,有多少用户可以测试应用程序是没有限制的。如果您已经在使用 App封装源码分析,则此服务很容易实施。更重要的是,它使比较和管理应用程序的多个 beta 版本变得简单。

  App封装源码允许您通过无线方式将 iPhone、iPad 和 Android 应用程序分发给您的客户。
  
  它由 2 个组件组成:
  
  一个App封装源码管理界面,允许您上传应用程序并将其分配给用户。
  
  一个移动优化的、受登录保护的下载区域,您的客户可以在其中下载与其登录凭据关联的应用程序。
  
  支持 Python 2.7、3(在 3.4、3.5 上测试)和App封装源码­= 1.7。
  
  安装App封装源码­= 1.7
  
  pip install app-distribution
  
  在项目的 settings.py 中添加app_distribution到您的列表中。INSTALLED_APPS
  
  添加contrib.sites到INSTALLED_APPS项目的 settings.py 列表中。
  
  启用消息框架
  
  确保您已设置MEDIA_ROOT、MEDIA_URL、STATIC_URL和STATIC_ROOT。
  
  添加BASE_PATH(或BASE_DIR)到您项目的 settings.py,例如import os.path BASE_PATH = os.path.dirname(file). 为了在与项目的 settings.py 相同的级别上创建 Android 上传文件夹,必须对其进行设置。
  
  运行python manage.py migrate
  
  运行python manage.py collectstatic
  
  确保与android/android_apps项目的 settings.py 处于同一级别的文件夹可由您的网络服务器读写。
  
  如果您的网络服务器无法为您创建它们,您必须手动创建它们。有关详细信息,请参阅下面的安全注意事项。
  
  app_distribution.urls在您选择的挂载点包含到项目的 urls.py 文件中。这将是您的客户下载她的应用程序的地方。
  
  包含app_distribution.auth_urls在您项目的 urls.py 中。
  
  将LOGIN_REDIRECT_URL添加到项目的 settings.py 中。这是您在第 7 步中选择的 URL。如果您使用下面的示例,请将其设置为/distribute/.
  
  将项目 settings.py 中的SITE_ID值添加到表示您的站点的 Site 对象的主键中。
  
  登录到App封装源码Admin 并将服务器的 URL 添加到 Site 对象的域名(如果需要,创建一个)。在开发服务器上,这将是http://127.0.0.1:8000/

   

  
  网址设置
  
  在你的项目里面urls.py

  from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^distribute/', include('django_mobile_app_distribution.urls')),
url(r'^accounts/', include('django_mobile_app_distribution.auth_urls')),
]

  在您的项目settings.py文件中
  
  import os.path
  BASE_PATH = os.path.dirname(file) # BASE_DIR is also available.
  LOGIN_REDIRECT_URL = '/distribute/'
  SITE_ID = 1

  如果您在上传 Android APK 时收到权限被拒绝错误,请确保android/android_apps与您的项目的 settings.py 处于同一级别的文件夹可被您的网络服务器写入。
  
  导出您的 iOS 应用程序以进行无线分发
  
  在浏览器中登录App封装源码Admin 并导航到app_distribution ­ IOS Apps
  
  创建一个新的 iOS 应用程序。
  
  选择用户或组
  
  添加应用名称、捆绑版本、捆绑标识符和注释
  
  打开 Xcode
  
  在 Xcode 中将您的应用程序导出为存档:产品 ­ 存档
  
  确保您已获得配置权并使用分发证书进行签名
  
  转到管理器 ­ 档案
  
  选择您的存档并点击导出
  
  为企业或临时部署选择保存
  
  选择您的协同设计身份
  
  在 Xcode 中点击导出
  
  选择要保存到的文件夹并记住它
  
  在您的浏览器中将 IPA 文件上传到相应的字段中
  
  在下载页面上,您应该能够使用正确配置的设备进行无线下载和安装
  
  App封装源码优势
  
  以下是 App封装源码App Distribution 的一些最显着的优势,您必须知道:
  
  1. 有价值的发布前见解
  
  应用分发可以为您提供一个仪表板,以查看有关您的预发布应用版本的见解。测试人员可以为您提供及时的反馈,而 Crashlytics 可以让您对用户的状态有可操作的见解。
  
  2. 灵活快捷的服务
  
  使用 App封装源码App Distribution,开始使用分发变得轻而易举。您无需安装 SDK、填写冗长的表格或执行任何其他操作即可开始使用它。这只是将您的应用程序载入 App封装源码并通过 CLI 或控制台发送您的应用程序构建。
  
  3. 更易于测试人员使用
  
  您可以使用简单的 UI 向应用测试人员发送电子邮件通知,以简化注册过程。此工具还使所有测试人员可以更轻松高效地通过应用管理器访问您的应用程序及其正在测试的版本。
  
  App封装源码功能
  
  让我们看看下面给出的 App封装源码App Distribution 的关键特性:
  
  App封装源码App Distribution 可以让您管理您的 Android 和 iOS 测试,以便在发布之前分发您的应用程序。
  
  快速将您的版本交到测试人员手中。它提供快速入门,无需安装 SDK。更重要的是,App封装源码App Distribution 还提供及时交付。
  
  您可以通过不同的方式分发您的应用构建,包括 App封装源码CLI、控制台或 Gradle。您还可以使用它自动化您的应用程序分发。
  
  它可以让你管理和组织你的测试团队成组。您可以通过入职流程通过简单的电子邮件邀请添加新测试人员。您甚至还可以跟踪每个测试人员的状态。
  
  您可以将此工具与 Crashlytics 结合使用,以深入了解您的发行版的稳定性。
  
  结论
  
  App封装源码App Distribution 可以让您全面了解您的应用在 Android 和 iOS 上的 Beta 测试计划。
  
  此外,它还可以在制作新版本之前为您提供有价值的反馈。它可以让您使用 CI 服务器和控制台发送应用程序的预版本。更令人惊讶的是,安装应用程序对测试人员来说也更加舒适。

继续阅读 »

  快速发展的技术已推动企业在整个组织中使用各种应用程序。应用程序现在已成为提高生产力的组织不可或缺的一部分。App封装源码中全面的“应用程序管理”功能让您可以无缝地安装、控制和保护应用程序。
  
  App封装源码及演示:s.appwin.top
  
  什么是 App封装源码?
  
  App封装源码最近在其应用库中添加了大量应用,以向其消费者提供改进的服务。每个 App封装源码工具都旨在帮助开发人员以更好的方式构建、发展和改进。
  
  它可以帮助您测试跨平台,这意味着它可以让您上传两个 iOS 以构建一个 android APK 到同一个服务并将您的应用程序分发给适当的用户。
  
  更令人惊奇的是,有多少用户可以测试应用程序是没有限制的。如果您已经在使用 App封装源码分析,则此服务很容易实施。更重要的是,它使比较和管理应用程序的多个 beta 版本变得简单。

  App封装源码允许您通过无线方式将 iPhone、iPad 和 Android 应用程序分发给您的客户。
  
  它由 2 个组件组成:
  
  一个App封装源码管理界面,允许您上传应用程序并将其分配给用户。
  
  一个移动优化的、受登录保护的下载区域,您的客户可以在其中下载与其登录凭据关联的应用程序。
  
  支持 Python 2.7、3(在 3.4、3.5 上测试)和App封装源码­= 1.7。
  
  安装App封装源码­= 1.7
  
  pip install app-distribution
  
  在项目的 settings.py 中添加app_distribution到您的列表中。INSTALLED_APPS
  
  添加contrib.sites到INSTALLED_APPS项目的 settings.py 列表中。
  
  启用消息框架
  
  确保您已设置MEDIA_ROOT、MEDIA_URL、STATIC_URL和STATIC_ROOT。
  
  添加BASE_PATH(或BASE_DIR)到您项目的 settings.py,例如import os.path BASE_PATH = os.path.dirname(file). 为了在与项目的 settings.py 相同的级别上创建 Android 上传文件夹,必须对其进行设置。
  
  运行python manage.py migrate
  
  运行python manage.py collectstatic
  
  确保与android/android_apps项目的 settings.py 处于同一级别的文件夹可由您的网络服务器读写。
  
  如果您的网络服务器无法为您创建它们,您必须手动创建它们。有关详细信息,请参阅下面的安全注意事项。
  
  app_distribution.urls在您选择的挂载点包含到项目的 urls.py 文件中。这将是您的客户下载她的应用程序的地方。
  
  包含app_distribution.auth_urls在您项目的 urls.py 中。
  
  将LOGIN_REDIRECT_URL添加到项目的 settings.py 中。这是您在第 7 步中选择的 URL。如果您使用下面的示例,请将其设置为/distribute/.
  
  将项目 settings.py 中的SITE_ID值添加到表示您的站点的 Site 对象的主键中。
  
  登录到App封装源码Admin 并将服务器的 URL 添加到 Site 对象的域名(如果需要,创建一个)。在开发服务器上,这将是http://127.0.0.1:8000/

   

  
  网址设置
  
  在你的项目里面urls.py

  from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^distribute/', include('django_mobile_app_distribution.urls')),
url(r'^accounts/', include('django_mobile_app_distribution.auth_urls')),
]

  在您的项目settings.py文件中
  
  import os.path
  BASE_PATH = os.path.dirname(file) # BASE_DIR is also available.
  LOGIN_REDIRECT_URL = '/distribute/'
  SITE_ID = 1

  如果您在上传 Android APK 时收到权限被拒绝错误,请确保android/android_apps与您的项目的 settings.py 处于同一级别的文件夹可被您的网络服务器写入。
  
  导出您的 iOS 应用程序以进行无线分发
  
  在浏览器中登录App封装源码Admin 并导航到app_distribution ­ IOS Apps
  
  创建一个新的 iOS 应用程序。
  
  选择用户或组
  
  添加应用名称、捆绑版本、捆绑标识符和注释
  
  打开 Xcode
  
  在 Xcode 中将您的应用程序导出为存档:产品 ­ 存档
  
  确保您已获得配置权并使用分发证书进行签名
  
  转到管理器 ­ 档案
  
  选择您的存档并点击导出
  
  为企业或临时部署选择保存
  
  选择您的协同设计身份
  
  在 Xcode 中点击导出
  
  选择要保存到的文件夹并记住它
  
  在您的浏览器中将 IPA 文件上传到相应的字段中
  
  在下载页面上,您应该能够使用正确配置的设备进行无线下载和安装
  
  App封装源码优势
  
  以下是 App封装源码App Distribution 的一些最显着的优势,您必须知道:
  
  1. 有价值的发布前见解
  
  应用分发可以为您提供一个仪表板,以查看有关您的预发布应用版本的见解。测试人员可以为您提供及时的反馈,而 Crashlytics 可以让您对用户的状态有可操作的见解。
  
  2. 灵活快捷的服务
  
  使用 App封装源码App Distribution,开始使用分发变得轻而易举。您无需安装 SDK、填写冗长的表格或执行任何其他操作即可开始使用它。这只是将您的应用程序载入 App封装源码并通过 CLI 或控制台发送您的应用程序构建。
  
  3. 更易于测试人员使用
  
  您可以使用简单的 UI 向应用测试人员发送电子邮件通知,以简化注册过程。此工具还使所有测试人员可以更轻松高效地通过应用管理器访问您的应用程序及其正在测试的版本。
  
  App封装源码功能
  
  让我们看看下面给出的 App封装源码App Distribution 的关键特性:
  
  App封装源码App Distribution 可以让您管理您的 Android 和 iOS 测试,以便在发布之前分发您的应用程序。
  
  快速将您的版本交到测试人员手中。它提供快速入门,无需安装 SDK。更重要的是,App封装源码App Distribution 还提供及时交付。
  
  您可以通过不同的方式分发您的应用构建,包括 App封装源码CLI、控制台或 Gradle。您还可以使用它自动化您的应用程序分发。
  
  它可以让你管理和组织你的测试团队成组。您可以通过入职流程通过简单的电子邮件邀请添加新测试人员。您甚至还可以跟踪每个测试人员的状态。
  
  您可以将此工具与 Crashlytics 结合使用,以深入了解您的发行版的稳定性。
  
  结论
  
  App封装源码App Distribution 可以让您全面了解您的应用在 Android 和 iOS 上的 Beta 测试计划。
  
  此外,它还可以在制作新版本之前为您提供有价值的反馈。它可以让您使用 CI 服务器和控制台发送应用程序的预版本。更令人惊讶的是,安装应用程序对测试人员来说也更加舒适。

收起阅读 »

关于荣耀Magic UI系列HBuilder真机调试检测不到解决办法


最近用新买的荣耀手机调试app死活检测不到,去附件门店找技术人员,然后他们回复说他们也不知道原因,他们也没有办法,然后也测试了店里的其他的荣耀手机,结果都一样,华为的就正常,惊呆了,然后……………………………………
第二天,就各种整,然后……可以了,就是比较奇葩,直接上截图:
1、开启USB调试

2、选择USB配置,选择音频来源,奇葩吧

3、连接OK

继续阅读 »


最近用新买的荣耀手机调试app死活检测不到,去附件门店找技术人员,然后他们回复说他们也不知道原因,他们也没有办法,然后也测试了店里的其他的荣耀手机,结果都一样,华为的就正常,惊呆了,然后……………………………………
第二天,就各种整,然后……可以了,就是比较奇葩,直接上截图:
1、开启USB调试

2、选择USB配置,选择音频来源,奇葩吧

3、连接OK

收起阅读 »

nvue模式下动态class有时会失效的处理方法

nvue

这个问题也是偶尔出现,之前连续显示一排头像时,有时突然会发生一个头像的图片样式失效了,变得奇大无比。但是其他的头像都正常。查看代码并没有什么问题。但是仍然是偶尔出现,一旦出现,如果在同样的位置渲染的图也会一样的问题。百思不解。后我尝试将动态的class修改成动态的style就没这个问题了。此类问题也出现在其他地方。概率不高,但是偶尔就会出现。这个问题困扰了很久,如果刻意去测试还不太容易重现。估计是nvue的动态class的机制是不是在一些复杂的页面会有一些问题。分享给大家,避免踩坑。

继续阅读 »

这个问题也是偶尔出现,之前连续显示一排头像时,有时突然会发生一个头像的图片样式失效了,变得奇大无比。但是其他的头像都正常。查看代码并没有什么问题。但是仍然是偶尔出现,一旦出现,如果在同样的位置渲染的图也会一样的问题。百思不解。后我尝试将动态的class修改成动态的style就没这个问题了。此类问题也出现在其他地方。概率不高,但是偶尔就会出现。这个问题困扰了很久,如果刻意去测试还不太容易重现。估计是nvue的动态class的机制是不是在一些复杂的页面会有一些问题。分享给大家,避免踩坑。

收起阅读 »

Uni解析Krc酷狗歌词


const buffer = uni.base64ToArrayBuffer(contentBase64);  
            // var defArrayData = new Uint8Array(buffer);  
            // console.log(defArrayData);  
            //skip跳过4位  
            var slice = buffer.slice(4);  
            var zip_byte = new Uint8Array(slice);  

            //{'@', 'G', 'a', 'w', '^', '2', 't', 'G','Q', '6', '1', '-', 'Î', 'Ò', 'n', 'i'}  
            var key = [64, 71, 97, 119, 94, 50, 116, 71, 81, 54, 49, 45, 206, 210, 110, 105];  
            // console.log(zip_byte);  
            var j = zip_byte.length;  
            for (var k = 0; k < j; k++) {  
                var l = k % 16;  
                var tmp67_65 = k;  
                var tmp67_64 = zip_byte;  
                tmp67_64[tmp67_65] = tmp67_64[tmp67_65] ^ key[l];  
            }  
            //console.log(zip_byte);  
            var lrcContent = pako.ungzip(zip_byte, { to: 'string' }); //解压成字符串  
            // console.log(lrcContent);  
继续阅读 »

const buffer = uni.base64ToArrayBuffer(contentBase64);  
            // var defArrayData = new Uint8Array(buffer);  
            // console.log(defArrayData);  
            //skip跳过4位  
            var slice = buffer.slice(4);  
            var zip_byte = new Uint8Array(slice);  

            //{'@', 'G', 'a', 'w', '^', '2', 't', 'G','Q', '6', '1', '-', 'Î', 'Ò', 'n', 'i'}  
            var key = [64, 71, 97, 119, 94, 50, 116, 71, 81, 54, 49, 45, 206, 210, 110, 105];  
            // console.log(zip_byte);  
            var j = zip_byte.length;  
            for (var k = 0; k < j; k++) {  
                var l = k % 16;  
                var tmp67_65 = k;  
                var tmp67_64 = zip_byte;  
                tmp67_64[tmp67_65] = tmp67_64[tmp67_65] ^ key[l];  
            }  
            //console.log(zip_byte);  
            var lrcContent = pako.ungzip(zip_byte, { to: 'string' }); //解压成字符串  
            // console.log(lrcContent);  
收起阅读 »

mac下 /bin/bash: npm: command not found

macos 10.15 后就默认使用zsh,Hbuider确还是使用bash,导致node环境变量可能未配置。这个应该工具自己处理
编辑~/.bash_profile加下面三行

PATH=/usr/local/bin/:$PATH  
export PATH  
export NODE_PATH="/usr/local/lib/node"

这个社区感觉死气沉沉的,交流群也是.

继续阅读 »

macos 10.15 后就默认使用zsh,Hbuider确还是使用bash,导致node环境变量可能未配置。这个应该工具自己处理
编辑~/.bash_profile加下面三行

PATH=/usr/local/bin/:$PATH  
export PATH  
export NODE_PATH="/usr/local/lib/node"

这个社区感觉死气沉沉的,交流群也是.

收起阅读 »

video组件全屏时能显示视频标题吗

video

video组件全屏时能显示视频标题吗?有没有大佬能够在不重新写controls的情况下显示视频标题啊。不然为了显示个视频的标题得把进度条,手势操作都重新写一遍,好烦啊。官方就不能加一个这个功能吗,难道很复杂吗

video组件全屏时能显示视频标题吗?有没有大佬能够在不重新写controls的情况下显示视频标题啊。不然为了显示个视频的标题得把进度条,手势操作都重新写一遍,好烦啊。官方就不能加一个这个功能吗,难道很复杂吗