iOS APP添加桌面快捷方式

e4fd443920b497dbc86f470ea19353ab.jpeg

 0acffd46c00676fa04b547e2b401fc0d.gif 

本文字数:13900

预计阅读时间:35 分钟

iOS APP添加桌面快捷方式

背景

新接到一个需求,需要APP内的某些功能,能够把入口添加到桌面,点击桌面到入口可以直接跳转APP对应界面(类似于下面这张示例图),于是就做了一番调研。

其实很多APP目前都已经实现了类似的功能,比如支付宝、云闪付等等,其中的每一个独立功能都可以单独添加到桌面,所以网上有很多实现的方法,笔者做的是整理和试错。

f80622eb74b5759d9da883b7be752c4e.png

实现

首先,添加到桌面功能的操作流程是:

客户端打开APP -> 进入到对应到APP功能模块 -> 点击添加快捷方式到桌面按钮 -> 跳转浏览器,并加载引导页面,点击分享,选择添加到主屏幕 -> 从主屏幕点击刚刚添加到快捷功能,跳转到APP的对应界面。

ae44f31ca554c03fe36be1634dd5b638.png


iOS开发内部功能生成桌面快捷方式.png

根据笔者了解到的信息,目前实现这种功能,大致可以分为两种实现方式:

  • 方法一:H5提供网页,每个不同的功能提供不同的网页,服务端返回这些网页的URL,客户端配置打开URL Scheme,然后使用Safari直接加载URL,加载的网页中根据进入方式的不同,自动重定向打开APP的URL Scheme。

  • 方法二:H5提供通用的网页,客户端替换通用网页中的内容,比如标题、图标等,并转为DataURI格式,服务端提供接口URL,客户端配置打开URL Scheme,使用Safari加载,接口返回强制重定向加载DataURI数据

    其中方法二还有另一种实现方式,即客户端使用HttpServer模拟服务端。但笔者看来,无论是服务端返回URL还是客户端使用HttpServer,其实是服务端的不同实现方式,故而没有单独分类。

准备

第一步 客户端:iOS 打开已有Xcode项目,选中Target,添加URL Scheme,这个URL Scheme是自己定义的,在这个地方定义了xxx之后,可以通过在浏览器中输入xxx://来唤起APP,比如笔者定义了一个mkaddtohomescreen,然后在浏览器中输入mkaddtohomescreen://,就会弹出是否打开对应APP的提示

a539e10256ad8a1084239f697bdd4d49.png

59640204157d4eaf2bbe69f8dc0e3652.png


定义好了Scheme之后,可以考虑Scheme添加参数的问题,通过在scheme后添加参数,在Appdelegate中 applicaiton:open:options: 方法拦截到,根据对应参数跳转不同界面

比如Scheme为mkaddtohomescreen://page/view1,在applicaiton:open:options:中,url.absouluteString = mkaddtohomescreen://page/view1,url.host = page,url.path = /view1,所以可以根据path的不同跳转不同的界面。

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {if let navController = window?.rootViewController as? UINavigationController,let topController = navController.topViewController {// eg: mkaddtohomescreen://page/view1// url.host = page// url.path = /view1if url.absoluteString.hasPrefix("mkaddtohomescreen://") {// 说明是APP的URL Scheme,处理let targetVC = targetViewController(from: url.path)if targetVC != nil {// 判断当前显示的界面是否是要跳转的界面if topController.classForCoder == targetVC?.classForCoder {return true}navController.pushViewController(targetVC!, animated: true)}else {return true}}}return true}// 根据URL path返回要跳转的界面func targetViewController(from path: String) -> UIViewController? {var targetVC: UIViewController?switch path {// 根据URL的path跳转不同路径case "/view1":targetVC = Method1ViewController()breakcase "/view2":targetVC = Method2ViewController()breakcase "/view3":targetVC = Method3ViewController()breakdefault:targetVC = nilbreak}return targetVC}

第二步 H5参考47.给App的某个功能添加快捷方式中的shortcuts.html,其中共有三部分,大致为:

  • header部分定义了网页的标题,以及显示到桌面快捷方式的图标和标题

  • body部分则定义来这个网页的内容,其实是引导用户如何添加到桌面

  • script部分则是做了一个判断,判断是桌面快捷方式进入的情况,自己调用redirect

代码如下:

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="UTF-8"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="#ffffff"><meta name="apple-mobile-web-app-title" content="\(title)"><link rel="apple-touch-icon-precomposed" href="data:image/jpeg;base64,\(feature_icon)"/><title>\(title)</title></head><script>document.documentElement.style.fontSize = 100 * document.documentElement.clientWidth / 375 + "px"</script><style>/* css代码见链接 https://github.com/mokong/WKAddToHomeScreen */</style><body><a id="redirect" href="\(urlToRedirect.absoluteString)"></a><div id="container"><div class="main"><div class="subject">添加快捷功能到桌面</div></div><div class="guide"><div class="content"><p class="tips">点击下方工具栏上的<img class="icon" src="https://dariel-1256714552.cos.ap-shanghai.myqcloud.com/XEbFrgamEdvSxVFOBeuZ.png"></p><p class="tips">并选择<img class="icon" src="https://dariel-1256714552.cos.ap-shanghai.myqcloud.com/IkKEhyTLQpYtqXMZBYtQ.png">“<strong>添加到主屏幕</strong>”</p><img class="toolbar" src="https://dariel-1256714552.cos.ap-shanghai.myqcloud.com/oFNuXVhPJYvBDJPXJTmt.jpg"><img class="arrow" src="https://dariel-1256714552.cos.ap-shanghai.myqcloud.com/FlBEnTRnlhMyLyVhlfZT.png"></div></div></div></body>
</html><script type="text/javascript">if (window.navigator.standalone) {var element = document.getElementById('container');element.style.display = "none";var element = document.getElementById('redirect');var event = document.createEvent('MouseEvents');event.initEvent('click', true, true, document.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);document.body.style.backgroundColor = '#FFFFFF';setTimeout(function() { element.dispatchEvent(event); }, 25);} else {var element = document.getElementById('container');element.style.display = "inline";}</script>

其中有关于涉及到桌面快捷方式图标和标题设置的解释可参考苹果官方的Configuring Web Applications,如下

<!-- Specifying a Webpage Icon for Web Clip -->
<link rel="apple-touch-icon" href="touch-icon-iphone.png"><!-- apple-touch-icon-precomposed与apple-touch-icon的区别为前者是原图,后者是会被苹果处理的图片,这两个的使用二选一即可
<link rel="apple-touch-icon-precomposed" href="xxx.png"> --><!-- Specifying a Launch Screen Image -->
<link rel="apple-touch-startup-image" href="/launch.png"><!-- Adding a Launch Icon Title -->
<meta name="apple-mobile-web-app-title" content="AppTitle"><!-- Hiding Safari User Interface Components -->
<meta name="apple-mobile-web-app-capable" content="yes"><!-- Changing the Status Bar Appearance> -->
<meta name="apple-mobile-web-app-status-bar-style" content="black"><!-- Linking to Other Native Apps -->
<a href="tel:1-408-555-5555">Call me</a>

方法一

H5提供网页,比如上面示例的代码,然后把其中header部分的内容设置为固定的

  • "apple-mobile-web-app-title"是桌面快捷方式的标题

  • "apple-touch-icon-precomposed"是桌面快捷方式的图片,其中的格式可以选择使用DataURI的这种样式,生成方法可以参考下面的

  • "title"则是页面的标题

  • \(urlToRedirect.absoluteString)是定义好的URL Scheme链接

获取图片DataURI格式的数据Swift的代码如下

// 获取图片DataURI格式的数据if let iconData = UIImage(named: "homeScreen")?.jpegData(compressionQuality: 0.5) {let iconDataURI = iconData.base64EncodedString()}

具体步骤如下:

  1. 配置好客户端的URLScheme

  2. H5提供编写好的网页,如果没有H5,可使用上面的shortcuts.html内容,把其中的待替换字段\(title)、\(feature_icon)、以及\(urlToRedirect.absoluteString)设置为自己APP的,其中的apple-touch-icon-precomposed需要放图标经过DataURI后的String

  3. 需要服务端提供URL,返回这个网页,然后客户端打开这个URL。如果服务端也没有。。。那就跟我一样,使用模拟接口返回,打开mocky,(可能需要注册),Response Content Type 设置为text/html,HTTP Response Body 中放入下面的网页内容,然后点击底部的GENERATE MY HTTP RESPONSE,就会生成一个URL

    b52da4259fd00c0f41b35a77572889eb.png

  4. 在点击添加快捷方式的地方,直接openURL即可

    func addMethod1(_ sender: Any) {// 方法一,不需要本地放H5数据,只需要打开指定URL即可// 可使用mocky来提供模拟接口let urlStr = "https://run.mocky.io/v3/98baaf4a-edec-4956-8506-7bbfca349d07"UIApplication.shared.open(URL(string: urlStr)!, options: [:], completionHandler: nil)}

方法二

可参考给App的某个功能添加快捷方式,文章中使用的是客户端自建服务器返回DataURI数据的方法,具体操作如下:

  1. 配置好客户端的URL Schemes

  2. 客户端使用Pod添加Swifter,用于自建服务器

  3. H5提供编写好的网页,使用上面的shortcuts.html内容,其中的待替换字段不要动

  4. 在点击添加快捷方式时,客户端读取html的内容并替换里面指定字段,转为DataURI,启动本地服务器,并返回DataURI数据

    func addMethod2(_ sender: Any) {// 定义好的URL Schemelet schemeStr = "mkaddtohomescreen://page/view2"// 要替换的桌面快捷方式图标let shortcutImageData = UIImage(named: "homescreen")?.jpegData(compressionQuality: 0.5)// 要替换的桌面快捷方式标题let shortcutTitle = "添加到主屏幕2"guard  let schemeURL = URL(string: schemeStr),let shortcutImageStr = shortcutImageData?.base64EncodedString() else {return}// 替换H5中的内容let htmlStr = htmlFor(title: shortcutTitle, urlToRedirect: schemeURL.absoluteString, icon: shortcutImageStr)guard let base64 = htmlStr.data(using: .utf8)?.base64EncodedString() else {return}// 启动本地服务器,端口号是9081if let shortcutUrl = URL(string: "http://localhost:9081/s") {// 转为dataURI格式let server = HttpServer()server["/s"] = { request inreturn .movedPermanently("data:text/html;base64,\(base64)")}try? server.start(9081)UIApplication.shared.open(shortcutUrl, options: [:], completionHandler: nil)}}func htmlFor(title: String, urlToRedirect: String, icon: String) -> String {let shortcutsPath = Bundle.main.path(forResource: "content2", ofType: "html")var shortcutsContent = try! String(contentsOfFile: shortcutsPath!) as StringshortcutsContent = shortcutsContent.replacingOccurrences(of: "\\(title)", with: title)shortcutsContent = shortcutsContent.replacingOccurrences(of: "\\(urlToRedirect.absoluteString)", with: urlToRedirect)shortcutsContent = shortcutsContent.replacingOccurrences(of: "\\(feature_icon)", with: icon)print(shortcutsContent)return shortcutsContent}

还没完

代码放到了Github,大家下载运行后会发现还有一个问题待解决,即:当使用方法一,添加快捷标签到桌面后,第一次点击桌面的快捷标签打开了APP;再次点击桌面的快捷标签,显示白屏,原因是第一次打开快捷标签没有关闭,重新打开时没有触发加载,所以也就没有跳转APP。而使用了DataURI加载的方法二,则没有这个问题,每次点击图标均可以直接跳转。

但是对比支付宝的添加到桌面发现支付宝的也是采用的方法一,第一次从桌面添加的快捷打开时自动跳转到支付宝,第二次点击桌面到快捷图标时,发现也是停留在一个页面,但是支付宝在这个页面上放了东西,可以称之为中间页。如下:

77f40fd70beb6c61699429f3c7205c72.png

要怎么实现中间页那种效果呢,目前笔者方法一的实现,点击时依赖的是服务端返回的H5网页内容,里面的Script会根据进入方式的不同,直接自跳转打开APP的URL Scheme;所以想要添加中间页,嗯,想法是:嵌套一层。即:

  • 服务端返回的H5网页内容,里面的Script不直接跳转打开APP的URL Scheme,而是跳转中间页的链接

  • 中间页的页面,同样的逻辑,再次跳转打开APP的URLScheme;同时中间页的页面添加按钮,点击也是跳转APP的URLScheme。这样,第一次点击时,是桌面-中间页-APP的URL Scheme;第二次点击时,则是直接显示中间页,然后手动点击中间页上的立即进入,再次打开APP。

下面来尝试一下:首先编辑中间页面的H5,大致内容如下,仅供参考。就是把之前H5页面的body部分简单修改一下,添加一个button,事件是点击打开Scheme,同时自动跳转Scheme的逻辑也还存在。

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="UTF-8"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="#ffffff"><meta name="apple-mobile-web-app-title" content="方法三中间页内容"><title>"方法三中间页标题"</title></head><script>document.documentElement.style.fontSize = 100 * document.documentElement.clientWidth / 375 + "px"</script><style>/* css代码见链接 https://github.com/mokong/WKAddToHomeScreen */</style><body><a id="redirect" href="mkaddtohomescreen://page/view3"></a><div id="B_container" class="backguide" style="display: block; width='100%'; background-color=#cyan"><div class="tips">你即将进入</div><img id="B_icon" class="icon" src=""></img><div id="B_appname" class="appname">MKAddToHomeScreen</div><button class="enter" onclick="jumpSchema()" style="background-color: #red; widht=100%; height=64px">立即进入</button></div></body>
</html><script type="text/javascript">function jumpSchema() {var element = document.getElementById('redirect');var event = document.createEvent('MouseEvents');event.initEvent('click', true, true, document.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);document.body.style.backgroundColor = '#FFFFFF';setTimeout(function() { element.dispatchEvent(event); }, 25);}if (window.navigator.standalone) {var element = document.getElementById('redirect');var event = document.createEvent('MouseEvents');event.initEvent('click', true, true, document.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);document.body.style.backgroundColor = '#FFFFFF';setTimeout(function() { element.dispatchEvent(event); }, 25);} else {var element = document.getElementById('container');element.style.display = "inline";}</script>

把中间页的网页放到mocky中按照同样的方式(Response Content Type 设置为text/html,HTTP Response Body 中放入网页内容),生成一个URL,然后把这个URL放到之前网页要自跳转的href中,然后再把之前网页再用mocky生成一个链接,在APP中使用openURL的方式打开最后生成的这个链接,运行,调试。

发现结果是期望的,即第一次打开直接跳转,第二次打开显示中间页上面有点击跳转按钮;但是中间页的样式看起来确跟支付宝的不一样,这样生成的中间页因为经过了一次跳转,所以顶部和底部都显示了Safari二级页面的样式,嗯哼,这个不是笔者所希望的效果,而且体验支付宝的效果之后,发现支付宝的中间页是没有二级页面的那种头部和底部的,所以,那是怎么实现的呢?

05258b287482e4a10a6882cc942251a5.jpeg


如果不想要中间页显示为二级页面的形式,就不能采用上面那种经过一次跳转方法。只能采用单一页面的方法,在一个H5页面上想办法。所以现在想要的是,在同一个页面上,从APP跳转的时候显示“引导添加到桌面”的样式,从桌面打开时显示“中间页”的样式。

按照这个逻辑来,用两个div,包括两段样式,根据进入方式的不同,设置两个div的显示隐藏是不是就可以了呢?说做就做,把上面第二个html中的内容和样式放到第一个html中,代码如下:middle_container是中间页的div,jump_container是引导页div,然后根据window.navigator.standalone判断显示哪一个div,middle_container中按钮点击是跳转打开APP,同时再把第一个html的跳转由跳转中间页改为打开APP

Ps:

要检测Web应用程序当前是否运行在全屏状态,只要检测window.navigator.standalone是否为true就可以了,如果这个属性为true则表示Web应用程序当前运行在全屏状态,否则运行在非全屏状态。可用于检测到Web应用程序运行在非全屏状态时提示用户把Web应用程序的图标添加到主屏幕。

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="UTF-8"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="#ffffff"><meta name="apple-mobile-web-app-title" content="方法三标题"><link rel="apple-touch-icon-precomposed" href="data:image/jpeg;base64,imageData"/><title>方法三网页标题</title></head><script>document.documentElement.style.fontSize = 100 * document.documentElement.clientWidth / 375 + "px"</script><style>/* css代码见链接 https://github.com/mokong/WKAddToHomeScreen */</style><body><a id="redirect" href="mkaddtohomescreen://page/view3"></a><div id="middle_container" class="backguide"><div class="middle_tips">你即将进入</div><img class="middle_icon" src=""></img><div class="middle_appname">MKAddToHomeScreen</div><button class="middle_enter" onclick="jumpSchema()" style="background-color: #red; widht=100%; height=64px">立即进入</button></div><div id="jump_container"><div class="main"><div class="subject">添加快捷功能到桌面</div></div><div class="guide"><div class="content"><p class="tips">点击下方工具栏上的<img class="icon" src="https://dariel-1256714552.cos.ap-shanghai.myqcloud.com/XEbFrgamEdvSxVFOBeuZ.png"></p><p class="tips">并选择<img class="icon" src="https://dariel-1256714552.cos.ap-shanghai.myqcloud.com/IkKEhyTLQpYtqXMZBYtQ.png">“<strong>添加到主屏幕</strong>”</p><img class="toolbar" src="https://dariel-1256714552.cos.ap-shanghai.myqcloud.com/oFNuXVhPJYvBDJPXJTmt.jpg"><img class="arrow" src="https://dariel-1256714552.cos.ap-shanghai.myqcloud.com/FlBEnTRnlhMyLyVhlfZT.png"></div></div></div></body>
</html><script type="text/javascript">function jumpSchema() {var element = document.getElementById('redirect');var event = document.createEvent('MouseEvents');event.initEvent('click', true, true, document.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);document.body.style.backgroundColor = '#FFFFFF';setTimeout(function() { element.dispatchEvent(event); }, 25);}if (window.navigator.standalone) {var middle_element = document.getElementById('middle_container');var jump_element = document.getElementById('jump_container');middle_element.style.display = "inline";jump_element.style.display = "none"var element = document.getElementById('redirect');var event = document.createEvent('MouseEvents');event.initEvent('click', true, true, document.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);document.body.style.backgroundColor = '#FFFFFF';setTimeout(function() { element.dispatchEvent(event); }, 25);} else {var middle_element = document.getElementById('middle_container');var jump_element = document.getElementById('jump_container');middle_element.style.display = "none";jump_element.style.display = "inline";}</script>

然后用当前内容放到mocky生成一个链接,在程序中打开这个链接,运行调试,发现结果和预期一致,没有了二级界面的样式,而且再次打开,页面显示也不是空白,而是如下样式:

a93395ab6f2c36092dc4c48ac7a59ecf.png

总结

完整代码在:Github。

笔者感觉两种方式各有优缺点:方法一依赖于网络,因为需要服务端返回的网页内容,加载完成后才能进行下一步跳转。而方法二采用DataURI方式的,把数据已经转为string放在了本地,点击时直接加载,故而不依赖网络。但方法一实现简单,客户端、H5、和服务端配合虽然有些冗余,但工作量小,很容易实现。方法二的加载采用DataURI,查看调试数据不方便。根据笔者的观察,支付宝其实采用的是方法二,没网络的时候也可以加载打开主APP,且在方法二的基础上还加上了中间页。

附图:

2ea1e80ee087c03ef73e96eb964f86fc.png

参考

  • iOS开发 将App内部功能块生成桌面快捷方式

  • 给App的某个功能添加桌面快捷方式

  • ios app内页面添加到桌面

  • ios 关于支付宝添加桌面快捷方式的探究

  • 模拟接口返回

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/36315.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac快捷键标志 ,图案,图标, 常用快捷键

Mac中主要有四个修饰键&#xff0c;分别是Command&#xff0c;Control&#xff0c;Option和Shift。这四个键分别有自己的图案 . Command-Z 撤销  Command-X 剪切   Command-C 拷贝&#xff08;Copy&#xff09;   Command-V 粘贴   Command-A 全选&#xff08;All&…

ShortcutManager桌面app图标长按快捷入口

1.动态方式实现 1.kotlin版代码 1.1 直接实现 对应代码&#xff1a; fun shortcut(){if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.N_MR1) {val scManager: ShortcutManager getSystemService(ShortcutManager::class.java)//跳转Secondval…

MAC OSX 快捷方式更换图标

1、MAC OSX快捷方式创建图标 右键快捷方式——显示简介 将你的icon图片文件&#xff08;大小为128x128像素&#xff09;拖入当前图标位置 2、修改你的icon图标文件 有时你会需要让你的桌面图标看起来更加统一&#xff0c;这时你就需要修改你的图标 打开PS&#xff0c;新建1…

正大国际期货:用狼性思维参与外盘期货

投资源于生活&#xff0c;而生活启示了投资交易的方法。因为我们知道在地球上&#xff0c;除了人类&#xff0c;狼应该是最聪明智慧的动物了&#xff0c;那么在狼的智慧中&#xff0c;有怎样的期货投资启示呢&#xff1f;下面正大IxxxuanI详细给大家讲解一下&#xff01; 1、当…

欧元区通胀率升至9.1% 将跟随美联储“鹰派”步伐?如何使资产保值成为现实需要

欧盟统计局数据显示&#xff0c;由于能源和食品价格持续飙升&#xff0c;欧元区8月调和CPI同比上升9.1%&#xff0c;距离两位数通胀近在咫尺。 伴随着通胀数据屡创新高&#xff0c;摩根大通、高盛和美国银行的分析师均预计&#xff0c;欧央行将在下周的会议上加息75个基点&…

外汇天眼:美联储认为美国房价有大跌的风险!

美联储周五表示&#xff0c;在超低利率的背景下&#xff0c;近年来房价大幅上涨后&#xff0c;高位房价可能会急剧下跌。 “由于估值处于高位&#xff0c;房价可能对冲击特别敏感&#xff0c;”美联储在周五发布的半年度金融稳定报告中表示。 央行表示&#xff0c;尽管最近随…

股票和外汇究竟哪个更存在风险呢?

股票和外汇究竟哪个更存在风险呢&#xff1f; 1、股票T1交易制度&#xff0c;今天买入&#xff0c;明天才能卖出&#xff1b;外汇T0交易制度&#xff0c;随时买入&#xff0c;随时可以卖出。流动性方面看&#xff0c;外汇风险较小。 2、外汇手续费很低&#xff0c;只有买入时扣…

外汇天眼:美元多头仍在掌控中 美联储将加大鹰派立场力度

美元多头不太可能在短期内被推翻&#xff0c;因为美联储(fed)可能会在其普遍预期的加息之后&#xff0c;在本周发表强硬言论&#xff0c;这可能迫使交易员重新考虑利率在见顶前能达到多高。 衡量美元兑一篮子六种主要货币贸易加权汇率的美元指数下跌0.1%&#xff0c;至109.44点…

外汇天眼:美国中期选举共和党若大获全胜!美元未来走势不利

周二&#xff0c;美元企稳&#xff0c;因为交易员们展望美国中期选举&#xff0c;而中国放松对冠状病毒的限制的兴奋情绪有所减弱&#xff0c;这一直在提振投资者人气&#xff0c;并令避险的美元承压。 中期选举的最终结果可能需要几天的时间&#xff0c;但预测显示&#xff0c…

外汇天眼:利空美元!2023年美国经济将如履薄冰?各大银行预测整体不乐观!

高盛表示&#xff0c;美国经济可能避免衰退。摩根士丹利预计&#xff0c;美国经济在2023年只是避开了衰退&#xff0c;但着陆并不那么软。瑞士信贷认为&#xff0c;美国明年可以避免经济下滑。摩根大通警告称&#xff0c;明年很有可能出现经济衰退。美国银行预测2023年第一季度…

理财实践之港股和美股的投资办法、下篇

文章目录 一、美股投资的主要风险有&#xff1a;二、投资美股的注意事项三、选出好公司四、等待好价格五、举例 一、美股投资的主要风险有&#xff1a; 市场风险 – 因股市价格大幅下跌导致股票投资者亏损的风险。这是很正常的市场行为&#xff0c;对于普通投资者来说这是风 …

chatGPT人工智能系统软件开发

ChatGPT是一个由OpenAI开发的人工智能语言模型&#xff0c;可以实现自然语言处理、对话生成等功能。要开发一个类似ChatGPT的人工智能系统软件&#xff0c;可以遵循以下步骤&#xff1a; 确定应用场景&#xff1a;确定人工智能系统软件要解决的问题和应用场景&#xff0c;例…

BERT论文解读: Pre-training of Deep Bidirectional Transformers for Language Understanding(2018)

论文总结 BERT模型的提出几乎就是针对于GPT的&#xff0c;文章实验部分主要就是在和GPT进行效果对比。因此&#xff0c;BERT模型总体上就是在GPT提出的基础上&#xff0c;进行了一部分创新和优化&#xff0c;提出了Bidirectional双向语言模型&#xff0c;预训练阶段采用遮罩语…

开源 LLM (大语言模型)整理(一)

Large Language Model (LLM) 即大规模语言模型,是一种基于深度学习的自然语言处理模型,它能够学习到自然语言的语法和语义,从而可以生成人类可读的文本。 所谓 "语言模型",就是只用来处理语言文字(或者符号体系)的 AI 模型,发现其中的规律,可以根据提示 (pr…

Microsoft 帐户异常登录活动,QQ邮箱代收hotmail邮件不成功

最近打算让QQ邮箱代收hotmail的邮件&#xff0c;总是提示不成功&#xff0c;而且homail里的备用邮箱一直到“安全阻止登录”邮件&#xff0c;同时QQ添加代收也不成功。而且关闭了二步验证还是不行。经过和微软客服沟通&#xff0c;说是为了安全。 好吧&#xff0c;只能自己想办…

邮箱客户端 gmail支持_如何联系Gmail支持

邮箱客户端 gmail支持 Although you may not be able to directly contact Gmail support without subscribing to G Suite for businesses, there are a couple of ways to get the answers you’re looking for online. Let’s look at how you can get help with your Gmail…

网易邮箱账号注册twitter开发者api权限,无法收到确认邮件

问题是这样的&#xff1a;今天想去申请一个访问twitter的开发者api权限&#xff0c;但是最后一步确认邮件&#xff0c;网易邮箱收不到 因为我的twitter账号是网易163邮箱&#xff0c;twitter发验证码&#xff0c;邮箱都能正常收到&#xff0c;以为没问题&#xff0c;谁知道在最…

通过 JavaMail 访问 Hotmail 邮箱(hotmail不提供smtp和pop3服务)

简介&#xff1a; 相信许多人都有 MSN 聊天工具的帐号&#xff0c;例如 abchotmail.com &#xff0c;这个账号其实也是一个邮件地址&#xff0c;可以进行正常的邮件收发功能&#xff0c;你可以通过网址 http://www.hotmail.com 来访问和操作这个邮箱进行邮件的收发。但是这个邮…

C# SmtpClient好像不支持STARTTLS,outlook邮箱不能发了

最近发现我之前的程序不能用了。于是我想代替程序&#xff0c;于是找到MailKit了&#xff0c;我先试一下水。 using System; using System.Text; using System.Net.Mail; using System.Net;namespace sendmail {internal class Program{static void Main(string[] args){try{Sm…

Outlook和Foxmail里设置Gmail(Google)谷歌企业邮箱

在大多数客户眼中&#xff0c;Gmail堪称完美邮箱的代表&#xff0c;支持POP3/SMTP&#xff0c;超大容量&#xff0c;绝对强大的反垃圾功能&#xff0c;发国外不退信&#xff0c;由世界最大的Google提供&#xff0c;稳定放心…… 注册开通地址&#xff1a; http://www.google.c…