所以在博客世界颇为出名,在模拟器上运行app非

来源:http://www.fengfeiyuan.com 作者:天天头条 人气:179 发布时间:2019-09-23
摘要:原文:Android M App Links: implementation, drawbacks andsolutions 在上次的I/O大会上,谷歌宣布了Android M 支持app链接(AppLinks),谷歌正在不遗余力的推动深度链接(deep linking)。这将对AndroidM的用

图片 1

原文:Android M App Links: implementation, drawbacks and solutions
在上次的I/O大会上,谷歌宣布了Android M 支持app链接(App Links),谷歌正在不遗余力的推动深度链接(deep linking)。这将对Android M的用户体验造成深远的积极影响,用户点击一个web链接就能直接跳转到app。
在Android M之前,点击一个链接会产生一个弹出框,询问用户打开哪个应用 - 包括浏览器应用。但是谷歌在Android M 实现了一个自动认证(auto-verify)机制,让开发者可以避开这个弹出框,使用户不必去选择一个列表,直接跳转到他们的app。

在你自己的设备上运行app

作为一位著名的软件开发者和博客世界的先驱者,戴夫·温纳(Dave Winer)于1997年创办了Scripting News(最早的博客网站之一)。由于他总是与微软、谷歌等大公司隔空对骂,所以在博客世界颇为出名。最近他在博客中谈了自己对于web将死的看法。

图片 2

到目前为止,你都只是在模拟器上运行app。在模拟器上运行app非常不错,但是这可能不是你学习iOS开发的目的。你应该会希望你的app在真实的iPhone和iPad上运行。能够在自己的iPhone上运行自己做的app绝对是令人兴奋的,当然,别忘了和你的朋友们分享它。

“我总是听人说道,web将死,app才是未来。早在1997年3月份时,《连线》就有这种 说法 了,然后在2010年8月又 炒了一遍 。我把这两篇文章的链接添加到了我的博客中,是为了提醒你们,现在你们阅读的网站是一个濒死的媒介。”

在app的manifest中添加 auto-verify(左边)并且在web服务器上添加一个statements JSON 文件(右边)就可以让你的web链接打开一个app。
译者注:statements JSON 文件即一个叫statements.json的文件,后面会提到。
要找到谷歌的App Links文档与理解它需要花点时间(你只能搜索“Android M App Links”关键词才能找到)。这个文档目前只是简要的描述了这个话题,但是我们将帮助你详细了解实现的细节,它的缺陷以及如何使用我们的smart links解决这些问题。HOKO的每个客户端目前都已经支持谷歌的App Link,轻松加愉快。
什么是App Links?
谷歌的App Link让用户在点击一个普通web链接的时候可以打开指定app的指定页面,前提是这个app已经安装并且经过了验证,否则会显示一个打开选项的弹出框。自此,在安卓中打开一个链接的用户体验大大提高,用户可以在链接与app之间快速切换。
比如,点击谷歌关于食谱的移动搜索结果或者一个别人发来的食谱链接会直接导航你到与该链接域名相关的app的食谱页面。

别误会我的意思:在模拟器上开发app是非常必要的。在开发过程中,我花费大量时间用模拟器测试app,仅仅是偶尔会在我的iPhone上进行测试。

毫无疑问温纳是在讽刺。在他看来,web网站最美妙的就在于:

图片 3

模拟器是非常棒的,但是你也需要在真机上调试你的创作,看看效果。有些事情模拟器是办不到的,比如当你需要使用iPhone的加速计的时候,你就必须在真机上测试,而不是坐在那里摇晃你的Mac。

Linking。

而点击一条推特的web链接会直接带你到Twitter应用的相关推文页面。
注:用页面形容app的屏貌似也不太准确哈~
web链接可以在任意地方发送,发布,或者打开,因为他们就是普通的链接,而且如果出现了什么错误,则会像平常一样用浏览器打开这个web页面。
实现App Links其实非常简单,但是首先你需要保证满足一些列需求:
有一个注册了的域名

在之前你必须充值付费成为开发者后才能进行真机测试,但是这个规则在Xcode 7发布后就变化了,你只需要一个Apple ID就可以免费进行真机测试,在Xcode 8中真机测试更加简单了。

没错,就是联系人和人、人和信息间的一个个链接。若把每个安装在iPad或者iPhone上的程序现实化的话,它们应该是一座座笔直高耸的大楼,你们或许会觉得它巨大无比,但是它们无法和外界进行内容交换或者连接,这就太糟糕了!web或许没有app漂亮,但是app若不能与网络世界进行交流,那它想作为web的替代者还太嫩了点。所以现在外界盛传的web将死的说法就和“我有一个奢华的浴缸,所以我根本不需要海洋”这种说法一样愚蠢了。

域名的SSL通道

用USB线把你的iPhone、iPod touch或者iPad和你的Mac链接起来。

“我们花钱让一些人替我们思考,但是很多时候他们说的话只为了讨好有钱人,这些糖衣炮弹会让财阀们认为,野性难驯的web世界已经不再对他们产生威胁,现在用户已经快乐地生活在如迪斯尼梦幻般的app世界中,高度管制,没有一点自由。”

具有上传JSON文件到域名的能力

在Xcode顶部的菜单中选择Window->Devices打开设备窗口。

这篇博文得到了许多人的点击和评论,温纳也因此站到了风口浪尖,于是他又在昨天更新了一篇文进一步阐述了他对app的看法。

Android Studio 1.3 Preview (download)

是一个这样的菜单(我使用的是iPhone 6):

温纳说道,每当我们点击杂志和报纸的官网上的某篇文章时,我们总得忍受网页会弹出一个窗口,告诉我们可以在官方的app上阅读它们的新鲜资讯。温纳随后尝试着安装了一个阅读纽约时报的Google currents,他觉得看起新闻来巨慢无比。

Gradle 版本 — com.android.tools.build:gradle:1.3.0-beta3

图片 4

“别误解我了,这些公司确实应该制作自己的app程序,它们有这种权利。而我也有权利不使用它们,但如果它们强迫我使用app的话(纽约邮报就是这么做的,iPad用户只能通过购买其app程序才能访问和阅读新闻内容),那我就干脆完全放弃它们的新闻好了。”

设置 compileSdkVersion 为 android-MNC

Xcode的设备窗口

就在上周,福雷斯特研究公司CEO乔治·科罗尼发表了一份 演讲 ,他说道,web时代已经结束,app才是我们的未来。正是这篇演讲、谷歌笨重的app和要求我们安装官方app的弹出窗口使得温纳开始思考,而他怎么想都觉得app将替代web成为网络未来的想法令人生厌,事实上,也有很多人赞同温纳的想法,他们也已经受够了app了。

buildToolsVersion — 23.0.0 rc2

左边的设备列表就是你开发中可以使用的。

“一些开发者认为,平板是绝佳的阅读环境,但我不认为iPad是我们的最终选择,它笨重且冰。就像许多电影中描述的那样,终极的电脑体验能够让你产生一种幻觉,你会忘记你是在用iPad阅读,而陷入故事本身。若能做到这种程度,那技术可以说是完美无缺了,iPad的阅读体验也不错,但还差了很多。我在点击一个文章链接的时候,是希望能够了解更多内容的,但这时却突然冒出一个有关app的广告。若我认真的考虑该不该安装它,我就会断了阅读文章的思路;若我屈服与网站并选择安装,那我既没了原则又浪费了时间。最好的办法就是立刻点击后退按钮,不去看这篇文章。所以,在此,我要对所有网站说,我才不会安装你们的什么app程序,所以别再弹出窗口了。”

如果以上要求全都满足,只需按照以下三步就可以让App Links 工作在你的app上。

点击你的设备名选中它。

这些看法温纳自己也说了,只是“In My Humble Opinion”,相信很多人会有不同的看法,欢迎讨论。

  1. 在app中激活App links
    让我们通过告诉安卓系统去验证app与域名之间的关系来激活App Links 吧。从此不再又任何的弹出框,因为我们已经在app中注册了该域名。找到AndroidManifest.xml文件,在处理深度链接路由的activity(第三步将讲解如何创建这样的Activity)中添加android:autoVerify="true"到intent-filter:

如果这是你第一次在Xcode中使用你的设备,设备窗口也许会弹出一个提示,“iPhone is not paired with your computer(iPhone和你的设备不匹配)”。要将Xcode与设备匹配,你需要将设备解锁(iPhone上的Home键)。解锁后,iPhone会弹出一个提醒窗口问你是否信任这台电脑,选择是。

信息来源: Dave Winer的博客

Xcode会刷新这个页面并且允许你使用你的设备用于开发调试。这需要几分钟时间(在Xcode状态栏中可以看到进度条)。如果时间过长的话,就把USB线拔掉,再链接一次试试。

<activity  
  android:name="com.your.app.activity.ParseDeepLinkActivity"
  ...>

  <intent-filter android:autoVerify="true">
    <data android:scheme="http" android:host="yourdomain.com" />
    <data android:scheme="https" android:host="yourdomain.com" />
    ...
  </intent-filter>
</activity>

这时你也许会得到一个报错信息,“An error was encountered while enabling development on this device”,这时你需要把掉USB线,同时重启手机和Xcode,重启完毕后再链接它们。

这个配置告诉安卓去验证一个文件,这个文件地址是https://yourdomain.com/.well-known/statements.json。如果存在这个文件,同时验证成功,那么用户点击该域名之下的链接时,就可以直接到app,弹出框就可以避免。否则app就没有成为默认选项,弹出框就会呈现给用户。下一步,我们将学会如何构建这个文件。

酷吧,这就是链接设备的方法。

  1. 上传web-app关联文件(statements.json)
    基于安全的原因,这个文件必须通过SSL的GET请求获得。你可以代开一个文本编辑器,然后写入如下形式的JSON:

下一步就是在Xcode中设置你的Apple ID。可以直接使用你iPhone上的ID,但是假如你开公司的话,那么你必须要创建一个独立的新的Apple ID。当然,如果你已经有了一个付费的开发者账号的话,你应该毫不犹豫的使用它。

在菜单Xcode->preference中找到Accounts。

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.mycompany.myapp",
    "sha256_cert_fingerprints": ["6C:EC:C5:0E:34:AE....EB:0C:9B"]
  }
}]

图片 5

可以在AndroidManifest.xml 文件中找到app的package name。你还需要通过在终端中执行ava keytool 产生一个sha256指纹:
keytool -list -v -keystore /path/to/app/release-key.keystore

账户设置

你需要向keystore添加持有app release keys的 app路径。这个路径依赖于项目设置,因此不同的app是不同的。可以在谷歌的文档中找到更多关于如何找到keystore的信息。
最后,上传这个文件到服务器的/.well-known/statements.json。为了避免今后每个app链接请求都访问网络,安卓只会在app安装的时候检查这个文件。如果你能在请求https://yourdomain.com/.well-known/statements.json 的时候看到这个文件(替换成自己的域名哈),那么可以继续下一步了。
注:目前可以通过http获得这个文件,但是在M最终版里则只能通过HTTPS验证。确保你的web站点支持HTTPS请求。

点击左下角的➕按钮,然后输入Apple ID。

  1. 在app中处理深度链接
    到现在,如果你已经有了一个处理深度链接的activity,那么我们已经准备好处理app links了。
    如果没有,你需要创建一个能处理深度链接的activity。这个activity的目的是为了实现一种这样的机制:负责捕获与解析深度链接,同时转发用户到正确的视图。

Xcode会要求你输入Apple ID:

图片 6

<activity
  android:name="com.your.app.activity.ParseDeepLinkActivity"
  android:alwaysRetainTaskState="true"
  android:launchMode="singleTask"
  android:noHistory="true"
  android:theme="@android:style/Theme.Translucent.NoTitleBar">

  <intent-filter android:autoVerify="true">
    <data android:scheme="http" android:host="yourdomain.com" />
    <data android:scheme="https" android:host="yourdomain.com" />
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
  </intent-filter>
</activity>

将你的Apple ID添加到Xcode

AndroidManifest.xml by GitHub

输入你的Apple ID名称及密码,然后点击Sign In。

public class ParseDeepLinkActivity extends Activity {
  public static final String PRODUCTS_DEEP_LINK = "/products";
  public static final String XMAS_DEEP_LINK = "/campaigns/xmas";

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // Extrapolates the deeplink data
    Intent intent = getIntent();
    Uri deeplink = intent.getData();

    // Parse the deeplink and take the adequate action 
    if (deeplink != null) {
      parseDeepLink(deeplink);
    }
  }

  private void parseDeepLink(Uri deeplink) {
    // The path of the deep link, e.g. '/products/123?coupon=save90'
    String path = deeplink.getPath();

    if (path.startsWith(PRODUCTS_DEEP_LINK)) {
      // Handles a product deep link
      Intent intent = new Intent(this, ProductActivity.class);
      intent.putExtra("id", deeplink.getLastPathSegment()); // 123
      intent.putExtra("coupon", deeplink.getQueryParameter("coupon")); // save90
      startActivity(intent);
    } else if (XMAS_DEEP_LINK.equals(path)) {
      // Handles a special xmas deep link
      startActivity(new Intent(this, XmasCampaign.class));
    }  else {
      // Fall back to the main activity
      startActivity(new Intent(context, MainActivity.class));
    }
  }
}

Xcode会确认你的账户信息并且将它添加到账户里表中。

ParseDeepLinkActivity.java hosted with ❤ by GitHub

⚠️:Xcode有可能会无法使用你提供的Apple ID,比如这个ID曾经被用于开发者账户,但是现在过期了。这种情况最简单的解决办法是注册一个新的Apple ID,不但免费而且只花几分钟而已。

让我们先从在AndroidManifest.xml 文件中添加名为ParseDeepLinkActivity的activity开始。安卓系统会在每次存在一个https://yourdomain.com开头的深度链接时调用这个activity。
注意yourdomain.com 与 www.yourdomain.com 被看成两个不同的域名,因此你需要为每个域名添加一对http/https:

你还需要告诉Xcode当你生成app时,使用这个账号。

<data android:scheme="http" android:host="yourdomain.com" />  
<data android:scheme="https" android:host="yourdomain.com" />  
<data android:scheme="http" android:host="www.yourdomain.com" />  
<data android:scheme="https" android:host="www.yourdomain.com" />

在工程设置界面,General子页中,找到Singing部分。

当这个activity创建的时候,我们调用getIntent()获得它的intent并调用getData()获得这次调用的URI。然后,我们把这个URI传递到一个匹配路径与行为的方法中。
在此例子中,我们有一个/products 的路径以及一个 /campaigns/xmas/路径。
对于前者,我们需要接续URI并检查URI引用的是哪个产品,最后让用户转向负责显示产品新的的视图。我们使用deeplink.getLastPathSegment()来获取产品的id(路径的最后一个参数),使用getQueryParameter("coupon") 来检查是否有coupon参数。最后一步则是触发显示产品的activity。
而对于后面一个,则只是简单的调用处理 xmas campaign逻辑的activity。你可以尝试执行下面的命令测试这个activity:

图片 7

        -W -a android.intent.action.VIEW
        -d "https://yourdomain.com/products/123?coupon=save90" com.example.android

工程设置界面

这应该会打开模拟器活着设备上的app,并调用ParseDeepLinkActivity来接续链接。确保现在你的网站上存在web-app 关联文件 。
App Links的缺陷
App Links是开发者的一大福音,但是也有几个让你犹豫不决的缺陷:
App Links只能工作在谷歌的Android M上
在配置好了app对App Links的支持之后,只有运行Android M的用户才能体验到这项技术的好处。之前安卓版本的用户无法直接点击链接进入app,而是回到浏览器的web页面。
但是HOKO为Android 1.6之后的设备提供了移动深度链接。自此你的深度链接将可以在几乎所有的安卓设备上工作,即使它们并没有运行Android M。
要使用App Links开发者必须维护一个与app相关联的网站
这对于那些小型开发者而言是个坏消息,因为他们没有能力为app维护一个网站,但是它们仍然希望通过web链接获得流量。
HOKO 就是解决这个问题的办法,因为它扮演着开发者网站的角色,每个app维护在不同的子域名下。这样,开发者只需创建smart link并发布他们的URL,每个URL将无缝的打开相应的app。
app与网站的关联是通过开发者网站下的一个配置文件实现的
有了HOKO,你可以跳过这烦人的一步,因为我们已经实现。而且,我们的服务器在安全和性能方面都是业内顶尖的配置,可以为这个配置提供更快速的服务。

为了使Xcode允许你在你的iPhone上安装app,这个app必须由你的Development Certificate(开发者证书)进行数字认证。一份证书就是一个电子文档,用户确认你iOS应用开发者的身份,并且它的生效时间是有限的。

要让你的app支持深度链接,学些更多关于HOKO的知识。

将app提交到Apple Store必须使用另一个数字证书,就是Distribution Certificate(发布证书)。你必须是一个已付费的成员才可以使用发布证书,而开发者证书是免费的。

另外,还可以查看我们的Apple's Universal Links 详细指南!

添加一个有效的证书,你还需要一个Provisioning Profile(开通服务描述),你做的每一个app都需要它。Xcode通过这个开通服务描述在你的设备上注册你的app。不用在意其中的细节,你只需要知道你需要一个Provisioning Profile才能在你的设备上运行你的app。

生成这些Certificate和Provisioning Profile极其繁琐。幸运的是,这种日子已经结束了:Xcode 8可以非常简单的完成这个工作,通过一个叫Automatically manage signing(自动管理注册)的东西,你没看错,是自动,Xcode会替你打点好一切关于Certificate和Provisioning Profile的事情,你自己根本不用操心。

点击工程设置(上面那幅图)中的Team,选择你的Apple ID。

Xcode会自动用你的账户注册你的设备,去创建Development Certificate,并且下载安装Provisioning Profile在你的设备上。这些步骤在过去都需要你手动操作,现在在Xcode 8中,它自己就干完了。

也许会出现下面这样的报错:

图片 8

程序身份已经使用过

app的程序身份,如同你的Apple ID,一定是唯一的。如果其他的程序(也许不是你开发的),已经使用了这个身份,你就不能再使用了。这就是为什么我们在一开始让你用自己的域名作为Bundle ID。解决方法非常简单:改变Bundle ID文本框中的内容,比如加个后缀,然后再试一次。

也有可能看到这种报错:

图片 9

没有注册的设备

Xcode必须要知道你即将用来运行app的设备。这就是为什么我们提前做了设备链接这个工作。再次确认一下,你的iPhone或者iPad是否链接到了Mac,并且在设备列表里有显示出来。

如果所有上述条件都检查过了,回到Xcode的主窗口,选择你运行app的设备(就是选择模拟器的那个地方,现在在列表的最上面应该有你的设备了)

我的Xcode窗口现在是这样的:

图片 10

选择你的设备

一切准备就绪,点击Run运行app。

此时也许你又会看到一个提示“codesign wants to sign using using key...in your keychain”。如果是这样,回答 Always Allow(总是允许)。这是Xcode试图使用你刚创建的那个新的Development Certificate,你只需要批准一下先。

这里还有一些其他可能遇到的问题,如果你是第一次在你的设备上运行app的话,特别是你以前根本就下载过Xcode的话,所以当你遇到这些问题不必惊慌,照着我们的步骤一步步来,这些问题也仅仅会出现一次,以后就可以直接选择设备运行app了。

The device is not conected。确定你的iPhone或者iPad链接到你的Mac上了,设备已经在你Xcode设备窗口的列表中存在了,并且不存在一些黄色的警告图标。

The device does not trust you。你也许会看到这样的报错:

图片 11

快!呼叫保安

在设备上则会弹出这样的消息,“Untrusted Developer.Your device management setting do not allow using apps from developer...”

所以在博客世界颇为出名,在模拟器上运行app非常不错。如果出现这种提示,打开iPhone或者iPad的Setting(设置),在General(通用)->Profile(描述文件)中,你应该可以看到你的Apple ID。点击它,然后点击Trust(信任)按钮,然后再次运行app。

The device is locked。如果你的设备处于锁定状态,你也许会看到下面的提示:

图片 12

设备被锁定了,无法运行app

点击Home键解锁,并再次运行app。

如果你被这些certificates和profiles弄的头晕转向,那么就打开菜单Xcode->Preference,然后找到Accounts子页。选择你的账户并且点击View Detail...在右下角。

然后会打开一个新的窗口,列出你的身份签名和服务开通描述文件:

图片 13

账户细节

这里有个“iOS Team Provisioning Profile:*”,这就是允许你在你的设备上运行app的东西。(顺便说下,管它叫作team描述文件是因为一个app经常是由多个开发者协同工作,这个描述文件需要共享给它们)

⚠️:如果账户细节窗口中最上面一行,iOS Development后面不是空白的,而是存在一个Create按钮,那么点击这个Create按钮,创建iOS开发者资质,原书中没有提及这一点。

操作完毕后,关闭Accounts窗口,回到设备窗口。

你可以看通过右键点击设备名,选择Show Provisioning profile看到到这个provisioning profile。

图片 14

设备上的服务开通描述文件

你可以安装多个certificate和provisioning profile。如果你是多人协作开发的话。

查看Xcode选择那个profile用来注册你的app,可以在工程设置界面找到Build Setting子页,这里有许多设置的列表,可以在右上角的过滤器中输入signing(同时确保All是选中的,而不是Basic)

界面是这个样子:

图片 15

注意蓝色背景为选中状态,确保和图中的选择一致

在Code Signing Identity中显示iOS Developer。这就是Xcode用来注册你app的certificate。如果你点击这一行,你就可以选择另一个certificate(证书)。在Provisioning Profile中你可以改变激活的描述文件(profile)。其实大多数情况,你根本不用管这些东西,但是至少你需要知道在哪里找到它们。

开始还是结束

这真是漫长的一课,如果你是一个纯纯的新手,你已经被灌输了许多新的概念,希望你的脑袋还没爆炸。

至少你应该对开发app的工作有了一个基本的认识。

我并不指望你准确的理解了在课程中我们做过的每一件事,尤其是涉及写Swift代码这一部分。不理解是对的,如果你理解了我反而会怀疑自己,只要这个过程对你而言是愉快的,并且你掌握了一些关于对象(object),方法(methods)和变量(variables)的基本概念。

如果你独立完成了这一次练习,那么说明你骨骼惊奇,将成神功!不妨顺便给我一次打赏_

我鼓励你多练习一下,试着自己去改一改这些代码,包括把它们弄的乱七八糟,一塌糊涂,这就是学习编程最好的方法。也许你可以添加一些新的非常酷的功能上去,如果你这样做了,请务必让我知晓。

但是目前,停下来,去喝一杯。这是你应得的。

更多...

你已经经历了如何制作一个简单的游戏。在接下来的课程中我将会给你展示如何使用table views(表视图),navigation controllers(导航控制器),maps(地图)和GPS,photo camera(拍照),web services(网络服务),以及更多的东西,这些是你制作一个属于你自己的app所需要的全部内容。

本文由澳门新葡亰平台游戏发布于天天头条,转载请注明出处:所以在博客世界颇为出名,在模拟器上运行app非

关键词:

上一篇:没有了

下一篇:没有了

最火资讯