Cordova - 如何在 Windows 移动设备上获取磁贴标题

Cordova - How to get a tile title on Windows mobile

我正在用我的 html/js-code 创建一个 cordova 应用 cordova-config:

<?xml version='1.0' encoding='utf-8'?>
<widget id="myapp" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <name>My App</name>
    <description>
        A small demo app
    </description>
    <author email="dont@ask.me" href="http://anyth.ing">
        My App
    </author>
    <content src="index.html" />
    <plugin name="cordova-plugin-splashscreen" spec="3.2.0"/>
    <access origin="*" />
    <preference name="Fullscreen" value="true"/>
    <platform name="windows">
        <!-- splashs and icons -->

    </platform>
</widget>

但是当我将应用程序部署到我的移动设备(Windows 10 移动设备)时,开始屏幕上的磁贴不显示标题。应用列表中的应用本身有标题,但没有磁贴。

如何在开始屏幕磁贴中获取磁贴标题?

此致

特诺达

据我所知,Cordova 没有提供添加 Windows 磁贴标题的首选项。您会假设 Cordova 只会采用 config.xml 中 name 元素中的名称并将其用于主屏幕图块。

为了在开始屏幕磁贴中获得标题,您需要编辑包。windows10.appxmanifest 位于 platform/windows 目录下。

uap:DefaultTile 元素下添加以下内容使其适用于我:

<uap:ShowNameOnTiles>
  <uap:ShowOn Tile="square310x310Logo" />
  <uap:ShowOn Tile="square150x150Logo" />
  <uap:ShowOn Tile="wide310x150Logo" />
</uap:DefaultTile>

Also:在元素 ShortName 属性中添加所需的标题 uap:DefaultTile.

添加到 Evertson 的回答中:

为避免必须继续编辑 platform/windows 文件,您可以将 package.windows10.appxmanifest 复制到 res/native/windows 文件夹。代码应如下所示:

<uap:DefaultTile ShortName="..." Square310x310Logo="..." etc.>
    <uap:ShowNameOnTiles>
        <uap:ShowOn Tile="square310x310Logo" />
        <uap:ShowOn Tile="square150x150Logo" />
        <uap:ShowOn Tile="wide310x150Logo" />
    </uap:ShowNameOnTiles>
</uap:DefaultTile>

当然,这意味着您需要在更改配置时随时编辑清单。

有趣的是,旧的 Windows 8.1 清单 (package.windows.appxmanifest) 和 Windows 8.1 phone 清单 (package.phone.appxmanifestfile) 默认已经包含此信息.不知道为什么要删除 windows 10.

编辑

您可以创建一个挂钩来插入 XML,这样您就不必担心将更改应用到 config.xml:

添加以下内容:hooks/showNameOnTiles.js

module.exports = function (context) {
    "use strict";
    var fs = require('fs'),
        path = context.opts.projectRoot + '/platforms/windows/package.windows10.appxmanifest',
        manifest = fs.readFileSync(path).toString(),
        lines, i, lineNo;
    if (!manifest.includes('uap:ShowNameOnTiles')) {
        lines = manifest.split(/\r?\n/);
        for (i = 0; i < lines.length; i++) {
            if (lines[i].indexOf('uap:DefaultTile') !== -1) {
                lineNo = i;
                break;
            }
        }
        if (lineNo) {
            lines[lineNo] = lines[lineNo].replace('/>', '>').replace(' >', '>');
            lines.splice(lineNo + 1, 0, [
                '<uap:ShowNameOnTiles>',
                    '<uap:ShowOn Tile="square310x310Logo" />',
                    '<uap:ShowOn Tile="square150x150Logo" />',
                    '<uap:ShowOn Tile="wide310x150Logo" />',
                '</uap:ShowNameOnTiles>'
            ].join('\n'));
            lines.splice(lineNo + 2, 0, '</uap:DefaultTile>');
            fs.writeFileSync(path, lines.join('\n'));
        }
    }
};

在config.xml中添加:

<platform name="windows">
    <hook type="after_prepare" src="hooks/showNameOnTiles.js" />
</platform>

更简单的方法

有一种更简单的方法可以做到这一点,但我无法让它工作;您可以创建自己的插件:

<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" 
    id="com.blah.addtiletitleplugin" version="1.0.0">
  <name>Adds the title to windows 10 tiles</name>
  <description>Adds the title to windows 10 tiles</description>
  <platform name="windows">
    <config-file target="package.windows10.appxmanifest" parent="/Package/Applications/Application/uap:VisualElements/uap:DefaultTile/">
      <uap:ShowNameOnTiles>
        <uap:ShowOn Tile="square310x310Logo" />
        <uap:ShowOn Tile="square150x150Logo" />
        <uap:ShowOn Tile="wide310x150Logo" />
      </uap:ShowNameOnTiles>
    </config-file>
  </platform>
</plugin>

但是,当我尝试添加插件时,visual studio 拒绝解析它,即使我已经指定:

xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" 

如果我删除 uap: 部分,它会解析并添加,但当然会在构建时失败。