热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOS原生苹果缓存HTML技巧与分享URL实战经验分享

在处理分享功能时,以往通常会首先考虑使用第三方SDK,如友盟等。然而,通过实际项目经验发现,利用iOS原生的UIActivityViewController不仅可以实现高效、稳定的分享功能,还能更好地控制用户体验。本文将详细介绍如何利用iOS原生技术缓存HTML内容,并结合URL分享的最佳实践,帮助开发者在实际开发中提升应用性能和用户满意度。

以前,当有需求说要做分享,第一反应,找第三方 SDK 呀,用友盟呀,从来没有用过原生的 UIActivityViewController去处理分享,依稀只记得原生的分享,只能在微信卡片上显示自定义的标题和缩略图,描述确显示不出来,只会显示当前分享的网址,QQ 不显示网址,但是也没有办法显示出我需要的摘要。

比如:

f1b5e2b88395?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

微信分享示例

但是现在需求来了,需要显示摘要,怎么办呢,突然想到 Appstore 是怎么做的分享呢,作为苹果自己的软件,总不会去用第三方吧,在经过测试后,发现,嘿呀 appstore 怎么就能在微信和QQ都显示出自己的摘要呢。接下来就是人生的起起伏伏了。

惊喜 NO.1:

在从appstore 分享出来的网址源代码中,搜索显示的摘要发现了在一个标签

og 协议,即Open Graph Protocol(开放内容协议),网页遵循了og协议,即代表允许社会化网站引用,SNS 网站也可以根据 og 的设置提取有用信息提供给用户。经验证,微信正是可以通过 og 协议,提取 title,desc, 和 image,当然协议属性不止这三个。事实上,如果没有设置 og:image ,原生分享到微信,会自动读取网页中

内第一个。如果没有设置og:title ,也会自动读取,唯一需要搞定的其实就是description。

此处对与 og 标签属性做一个记录:og:type(页面类型),og:title(页面标题),og:description(页面的简单描述),og:url(页面地址),og:image(缩略图地址),og:site_name (页面所在网站名),og:videosrc(视频或者Flash地址),og:audiosrc(音频地址)

坑 NO.1:

微信可以了,但是 QQ 还不行呀,找遍 appstore 源代码,也再没有相关标签了,他好像并不是用 meta 来实现的。

惊喜 NO.2:

遍查资料发现,QQ也是有 meta 的,官方文档里就有通过meta的实现的例子。这可把自己激动坏了,感觉这事要成了。

f1b5e2b88395?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

截自腾讯移动 web 开发平台

坑 NO.2:

我把含有标签的网页在自己电脑上发布了,同一局域网下在手机上进行分享,然而!不行!分享还是老样子啊,还是没有取到 title,desc,image阿。这可如何是好,遍查网络,也来来回回看了官方介绍,也没有介绍。

惊喜 NO.3:

偶然间,看到说 QQ 的分享,分享的网页要和设置的 url 在同一域名下。灵光乍现!!!域名!!!!!自己电脑上发布的,测验的网址都是以ip 地址的形式的,后来,发布到了服务端,通过域名的方式做分享操作,喜极而泣!!!!

坑 NO.3:

我以为这都已经好了,我也告诉 boss 都好了,然而还是我太年轻了,第二天整理的时候发现,咦???QQ分享的缩略图呢!被谁吃了哇。没道理标题和描述都可以,但是图片没有呀。

惊喜 NO.4:

偶然机会发现网站地址更换了后,图片是可以拿到的,那大概率是缓存了吧,然鹅把 app 卸了装装了卸,清各种缓存,并不行,沙盒里也没有找到这图片,那么存在哪里了,到现在也不知道。希望后面能学习的更深,了解到内部机制。现在就通过改变网址了。虽然还不知道原因,但是起码知道获取是没问题的,也是个惊喜了。

坑 NO.5:

经历了起起伏伏,个人觉得总没问题了,然而这都是我以为。确实,自己各种验证过了可以了,正式使用时候发现还有坑!在我们项目系统中生成的 html,添加了标签,但是 我!拿不到!一度跟 web 开发人员发生争执。web坚称她用 safari 分享这个网页的时候,QQ有正常显示摘要,微信没有,还一度怀疑是不是微信有问题。想哭!可是我自己发布网站的时候可以的呀。

惊喜 NO.6:

最后取了网页源文件知道了原因,这个网页一开始的机制是前台进行网页渲染,也就是我拿到的待分享的网址,其实是空的,在浏览器打开的过程中,网页通过结果获取数据各种填充进去,把界面渲染出来。网址里面的内容在加载的时候是有一个从无到有的过程,这也是为什么看这个网页的源代码的时候,资源文件里是标签里动态数据是空的,但是元素里又是有的。

f1b5e2b88395?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

网页源代码

但是,当使用原生分享的时候,并没有一个渲染展示这个网页的过程,app 使用UIActivityViewController的时候只把 NSURL 传送给了系统,系统通过 url 分析内容,并没有这个过程。至于为什么 safari 上,QQ 的分享是能有解析出来的,这只能暂时猜测在 Safari 里是不是有 js 什么的机制处理过了吧。也不是很懂网站的机制。

最后的最后,通过网页端更改渲染方式,由前台渲染改成在服务端渲染解决了问题,万幸自己的功夫没有白费。不然在解决不了的情况下,估计又只能找第三方 SDK 了。

Tip:

在处理完这些还做了小常识,对于里面imge 的提供形式。

尝试1:在服务端,网址同域名下存放了一张图片,在 html 里使用不完整路径。

结果:微信无法正常显示图片,QQ可以,QQ 应该是会自己给图片地址拼接当前网址的域名

尝试2:设置图片不使用网络图片形势,直接放缩略图的 data

结果:微信可以通过图片的源文件来显示,但是 QQ 不行,QQ 无法正常显示

——all:还是放有完整路径的网络图片吧。

总结:

虽然花了一些功夫,但是我觉得坑啊,不自己踩一踩,永远都没有长进。看似遇到一个又一个的问题,谁说不是自己的能力不足呢,还是需要全面发展。多看多试多学习,曾经踩过的坑都是脑子里的洞。

小菜鸟第一次写文章,主要也为了以后不会忘记掉遇到过的问题,做此记录,希望有写的不对的多多指正。



推荐阅读
  • 深入解析 AngularJS 表达式的应用与优化技巧
    本文深入探讨了AngularJS表达式的应用及其优化策略。在AngularJS中,表达式主要通过$digest循环进行自动解析,但在某些场景下,手动解析表达式也是必要的。文章详细介绍了如何利用$parse服务实现手动解析,并提供了多种优化技巧,以提高应用性能和响应速度。 ... [详细]
  • SQLmap自动化注入工具命令详解(第28-29天 实战演练)
    SQL注入工具如SQLMap等在网络安全测试中广泛应用。SQLMap是一款开源的自动化SQL注入工具,支持12种不同的数据库,具体支持的数据库类型可在其插件目录中查看。作为当前最强大的注入工具之一,SQLMap在实际应用中具有极高的效率和准确性。 ... [详细]
  • 2017-09-07前端日报精选JavaScriptEventLoop机制详解与Vue.js中实践应用Redux基础与实践如何用js获取虚拟键盘高度?( ... [详细]
  • 本文将介绍一种扩展的ASP.NET MVC三层架构框架,并通过使用StructureMap实现依赖注入,以降低代码间的耦合度。该方法不仅能够提高代码的可维护性和可测试性,还能增强系统的灵活性和扩展性。通过具体实践案例,详细阐述了如何在实际开发中有效应用这一技术。 ... [详细]
  • 深入解析 Spring MVC 的核心原理与应用实践
    本文将详细探讨Spring MVC的核心原理及其实际应用,首先从配置web.xml文件入手,解析其在初始化过程中的关键作用,接着深入分析请求处理流程,包括控制器、视图解析器等组件的工作机制,并结合具体案例,展示如何高效利用Spring MVC进行开发,为读者提供全面的技术指导。 ... [详细]
  • 在第七天的深度学习课程中,我们将重点探讨DGL框架的高级应用,特别是在官方文档指导下进行数据集的下载与预处理。通过详细的步骤说明和实用技巧,帮助读者高效地构建和优化图神经网络的数据管道。此外,我们还将介绍如何利用DGL提供的模块化工具,实现数据的快速加载和预处理,以提升模型训练的效率和准确性。 ... [详细]
  • 本书《.NET Core 2.* 开发者指南》是面向开发者的全面学习与实践手册,涵盖了从基础到高级的各个层面。书中详细解析了 .NET Core 的核心概念,包括如何创建 .NET Core 网站,并通过视频教程直观展示操作过程。此外,还深入探讨了 Startup 类的作用、项目目录结构的组织方式以及如何在应用中使用静态文件等内容。对于希望深入了解 .NET Core 架构和开发技巧的开发者来说,本书提供了丰富的实践案例和详尽的技术指导。 ... [详细]
  • Kali Linux 渗透测试实战指南:第24章 客户端安全威胁分析与防御策略
    客户端安全威胁分析与防御策略主要探讨了终端设备(如计算机、平板电脑和移动设备)在使用互联网时可能面临的各种安全威胁。本章详细介绍了这些设备如何作为信息和服务的提供者或接收者,以及它们在与服务器等其他系统交互过程中可能遇到的安全风险,并提出了有效的防御措施。 ... [详细]
  • Spring 中获取 Request 的多种方式及其线程安全性的深入解析
    本文深入探讨了在Spring MVC框架下获取HTTP请求对象的多种方法,详细分析了每种方法的实现原理及其线程安全性,为开发者提供了全面的技术参考。 ... [详细]
  • 本文初步探讨了PHP中基于JWT(JSON Web Token)的身份验证机制。具体流程包括:1. 客户端通过用户名和密码发起登录请求;2. 服务器接收并验证用户凭证的合法性,若验证通过,则生成并返回一个JWT令牌;3. 客户端接收该令牌,并在后续请求中携带此令牌以完成身份验证。这一机制不仅提高了安全性,还简化了会话管理。 ... [详细]
  • AngularJS uirouter模块下的状态管理机制深入解析
    本文深入探讨了 AngularJS 中 ui-router 模块的状态管理机制。通过详细分析状态配置、状态转换和嵌套状态等核心概念,结合实际案例,帮助开发者更好地理解和应用这一强大工具,提升单页面应用的开发效率和用户体验。 ... [详细]
  • 消息功能:ExchangeOnline中的电子邮件和日历功能Mac用户可以使用如下客户端程序来访问自己的ExchangeOnline邮箱和日历:*Mic ... [详细]
  • 初探SpringMVC框架:首日入门指南
    2019独角兽企业重金招聘Python工程师标准1.搭建环境2.如何完成Controller和Viewer的映射3.如何把值传递给Controller4.Controller ... [详细]
  • Ihavecheckedthe(TopPaidApps)samplecodefromApplewebsitewhereyoucanseeallthetopapps ... [详细]
  • 代码:headersAccept:texthtml,applicationxhtml+xml,applicationxml;q0.9,imagewebp,image ... [详细]
author-avatar
手机用户2502926053_634
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有