OfficeJS Outlook 加载项未安装

OfficeJS Outlook Add-in Does Not Install

更新#1:

TL;DR:我想定位:

我需要 Mailbox 1.5 才能支持 calling the Outlook REST APIs and to support pinnable taskpanes

由于只有 Windows 的 Outlook 2016 支持固定任务窗格,并且因为 Mailbox 1.5 is currently only supported in Outlook on the Web,我需要在清单的 <VersionOverrides> 部分中设置邮箱 1.5。

根据验证报告:

Your add-in manifest includes Tablet Settings and Phone Settings, however 
Mailbox 1.4 is used in the core of your manifest. This mailbox is not
supported in the Outlook Web App.

这听起来好像与 Office Add-in host and platform availability 所说的冲突。所以,我在清单的基本级别设置了 Mailbox 1.3。


这是我的清单:

<?xml version="1.0" encoding="UTF-8"?>
<OfficeApp 
  xmlns="http://schemas.microsoft.com/office/appforoffice/1.1" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:bt="http://schemas.microsoft.com/office/officeappbasictypes/1.0" 
  xmlns:mailappor="http://schemas.microsoft.com/office/mailappversionoverrides" xsi:type="MailApp">
  <Id>3042ed3a-6ca5-4b37-b5e3-a591f5605332</Id>
  <Version>1.0.1.0</Version>
  <ProviderName>Leap Legal Software</ProviderName>
  <DefaultLocale>en-US</DefaultLocale>
  <DisplayName DefaultValue="LEAP Mail Manager" />
  <Description DefaultValue="Save your mail to LEAP."/>
  <IconUrl DefaultValue="https://outlookapp.leap365.com/images/icon-64.png" />
  <HighResolutionIconUrl DefaultValue="https://outlookapp.leap365.com/images/icon-128.png" />
  <SupportUrl DefaultValue="https://leap.force.com/us/s/" />
  <AppDomains>
    <!--LEAP Add-in Domains -->
    <AppDomain>https://outlookapp-dev.leap365.com/</AppDomain>
    <AppDomain>https://outlookapp-test.leap365.com/</AppDomain>
    <AppDomain>https://outlookapp.leap365.com/</AppDomain>
    <!--TitleX Add-in Domains -->
    <AppDomain>https://outlookapp.dev.titlex.com.au/</AppDomain>
    <AppDomain>https://outlookapp.test.titlex.com.au/</AppDomain>
    <AppDomain>https://outlookapp.titlex.com.au/</AppDomain>
    <!-- LEAP Auth -->
    <AppDomain>https://auth-dev.leap.services/</AppDomain>
    <AppDomain>https://auth-test.leap.services/</AppDomain>
    <AppDomain>https://auth.leap.services/</AppDomain>
    <!-- TitleX Auth -->
    <AppDomain>https://login.dev.titlex.com.au/</AppDomain>
    <AppDomain>https://login.test.titlex.com.au/</AppDomain>
    <AppDomain>https://login.titlex.com.au/</AppDomain>
    <AppDomain>https://login.dev.titlex.co.uk/</AppDomain>
    <AppDomain>https://login.test.titlex.co.uk/</AppDomain>
    <AppDomain>https://login.titlex.co.uk/</AppDomain>
    <AppDomain>https://login.dev.titlex.com/</AppDomain>
    <AppDomain>https://login.test.titlex.com/</AppDomain>
    <AppDomain>https://login.titlex.com/</AppDomain>
  </AppDomains>
  <Hosts>
    <Host Name="Mailbox" />
  </Hosts>
  <Requirements>
    <Sets DefaultMinVersion="1.3">
      <Set Name="Mailbox" MinVersion="1.3" />
    </Sets>
  </Requirements>
  <FormSettings>
    <Form xsi:type="ItemRead">
      <DesktopSettings>
        <SourceLocation DefaultValue="https://outlookapp.leap365.com/index.html"/>
        <RequestedHeight>280</RequestedHeight>
      </DesktopSettings>
      <TabletSettings>
        <SourceLocation DefaultValue="https://outlookapp.leap365.com/index.html" />
        <RequestedHeight>280</RequestedHeight>
      </TabletSettings>
      <PhoneSettings>
        <SourceLocation DefaultValue="https://outlookapp.leap365.com/index.html" />
      </PhoneSettings>
    </Form>
  </FormSettings>
  <Permissions>ReadWriteMailbox</Permissions>
  <Rule xsi:type="RuleCollection" Mode="Or">
    <Rule xsi:type="ItemIs" ItemType="Message" FormType="Read" /></Rule>
  <DisableEntityHighlighting>false</DisableEntityHighlighting>
  <VersionOverrides 
    xmlns="http://schemas.microsoft.com/office/mailappversionoverrides" xsi:type="VersionOverridesV1_0">
    <Requirements>
      <bt:Sets DefaultMinVersion="1.5">
        <bt:Set Name="Mailbox" MinVersion="1.5" />
      </bt:Sets>
    </Requirements>
    <Hosts>
      <Host xsi:type="MailHost">
        <DesktopFormFactor>
          <FunctionFile resid="Leap.Functions.Url" />
          <!-- Message Read -->
          <ExtensionPoint xsi:type="MessageReadCommandSurface">
            <CustomTab id="TabLeap">
              <Group id="Leap.Group1">
                <Label resid="Leap.Group1Label" />
                <Control xsi:type="Button" id="Leap.DefaultCommand">
                  <Label resid="Leap.DefaultCommand.Label" />
                  <Supertip>
                    <Title resid="Leap.DefaultCommand.Label" />
                    <Description resid="Leap.DefaultCommand.Tooltip" />
                  </Supertip>
                  <Icon>
                    <bt:Image size="16" resid="Leap.Icon.16" />
                    <bt:Image size="32" resid="Leap.Icon.32" />
                    <bt:Image size="80" resid="Leap.Icon.80" />
                    <bt:Image size="20" resid="Leap.Icon.20" />
                    <bt:Image size="24" resid="Leap.Icon.24" />
                    <bt:Image size="40" resid="Leap.Icon.40" />
                    <bt:Image size="48" resid="Leap.Icon.48" />
                    <bt:Image size="64" resid="Leap.Icon.64" />
                  </Icon>
                  <Action xsi:type="ShowTaskpane">
                    <SourceLocation resid="Leap.Taskpane.Url" />
                  </Action>
                </Control>
              </Group>
              <Label resid="Leap.TabLabel"/>
            </CustomTab>
          </ExtensionPoint>
          <!-- Go to http://aka.ms/ExtensionPointsCommands to learn how to add more Extension Points: MessageRead, AppointmentOrganizer, AppointmentAttendee -->
        </DesktopFormFactor>
      </Host>
    </Hosts>
    <Resources>
      <bt:Images>
        <bt:Image id="Leap.Icon.16" DefaultValue="https://outlookapp.leap365.com/images/icon-16.png"/>
        <bt:Image id="Leap.Icon.32" DefaultValue="https://outlookapp.leap365.com/images/icon-32.png"/>
        <bt:Image id="Leap.Icon.80" DefaultValue="https://outlookapp.leap365.com/images/icon-80.png"/>
        <bt:Image id="Leap.Icon.20" DefaultValue="https://outlookapp.leap365.com/images/icon-20.png" />
        <bt:Image id="Leap.Icon.24" DefaultValue="https://outlookapp.leap365.com/images/icon-24.png" />
        <bt:Image id="Leap.Icon.25" DefaultValue="https://outlookapp.leap365.com/images/icon-25.png" />
        <bt:Image id="Leap.Icon.40" DefaultValue="https://outlookapp.leap365.com/images/icon-40.png" />
        <bt:Image id="Leap.Icon.48" DefaultValue="https://outlookapp.leap365.com/images/icon-48.png" />
        <bt:Image id="Leap.Icon.64" DefaultValue="https://outlookapp.leap365.com/images/icon-64.png" />
      </bt:Images>
      <bt:Urls>
        <bt:Url id="Leap.Taskpane.Url" DefaultValue="https://outlookapp.leap365.com/index.html" />
        <bt:Url id="Leap.Functions.Url" DefaultValue="https://outlookapp.leap365.com/functions.html" />
      </bt:Urls>
      <bt:ShortStrings>
        <bt:String id="Leap.TabLabel" DefaultValue="LEAP Mail Manager" />
        <bt:String id="Leap.Group1Label" DefaultValue="LEAP" />
        <bt:String id="Leap.DefaultCommand.Label" DefaultValue="LEAP Mail Manager" />
        <bt:String id="Leap.DefaultCommand.Title" DefaultValue="LEAP Mail Manager" />
      </bt:ShortStrings>
      <bt:LongStrings>
        <bt:String id="Leap.DefaultCommand.Tooltip" DefaultValue="Click to show the add-in." />
        <bt:String id="Leap.Description" DefaultValue="Save your mail to LEAP." />
      </bt:LongStrings>
    </Resources>
    <!-- NOTE: TO SUPPORT A PINNABLE TASKPANE AND MOBILEFORMFACTOR -->
    <VersionOverrides 
      xmlns="http://schemas.microsoft.com/office/mailappversionoverrides/1.1" xsi:type="VersionOverridesV1_1">
      <Requirements>
        <bt:Sets DefaultMinVersion="1.5">
          <bt:Set Name="Mailbox" MinVersion="1.5" />
        </bt:Sets>
      </Requirements>
      <Hosts>
        <Host xsi:type="MailHost">
          <DesktopFormFactor>
            <FunctionFile resid="Leap.Functions.Url" />
            <!-- Message Read -->
            <ExtensionPoint xsi:type="MessageReadCommandSurface">
              <CustomTab id="TabLeap">
                <Group id="Leap.Group1">
                  <Label resid="Leap.Group1Label" />
                  <Control xsi:type="Button" id="Leap.DefaultCommand">
                    <Label resid="Leap.DefaultCommand.Label" />
                    <Supertip>
                      <Title resid="Leap.DefaultCommand.Label" />
                      <Description resid="Leap.DefaultCommand.Tooltip" />
                    </Supertip>
                    <Icon>
                      <bt:Image size="16" resid="Leap.Icon.16" />
                      <bt:Image size="32" resid="Leap.Icon.32" />
                      <bt:Image size="80" resid="Leap.Icon.80" />
                      <bt:Image size="20" resid="Leap.Icon.20" />
                      <bt:Image size="24" resid="Leap.Icon.24" />
                      <bt:Image size="40" resid="Leap.Icon.40" />
                      <bt:Image size="48" resid="Leap.Icon.48" />
                      <bt:Image size="64" resid="Leap.Icon.64" />
                    </Icon>
                    <Action xsi:type="ShowTaskpane">
                      <SourceLocation resid="Leap.Taskpane.Url" />
                      <SupportsPinning>true</SupportsPinning>
                    </Action>
                  </Control>
                  <!-- Go to http://aka.ms/ButtonCommands to learn how to add more Controls: ExecuteFunction and Menu -->
                </Group>
                <Label resid="Leap.TabLabel"/>
              </CustomTab>
            </ExtensionPoint>
            <!-- Go to http://aka.ms/ExtensionPointsCommands to learn how to add more Extension Points: MessageRead, AppointmentOrganizer, AppointmentAttendee -->
          </DesktopFormFactor>
          <!-- See https://docs.microsoft.com/en-us/outlook/add-ins/add-mobile-support -->
          <MobileFormFactor>
            <FunctionFile resid="Leap.Functions.Url" />
            <ExtensionPoint xsi:type="MobileMessageReadCommandSurface">
              <Group id="Leap.Group1">
                <Label resid="Leap.Group1Label" />
                <Control xsi:type="MobileButton" id="Leap.DefaultCommand">
                  <Label resid="Leap.DefaultCommand.Label" />
                  <Icon xsi:type="bt:MobileIconList">
                    <bt:Image size="25" scale="1" resid="Leap.Icon.25" />
                    <bt:Image size="25" scale="2" resid="Leap.Icon.25" />
                    <bt:Image size="25" scale="3" resid="Leap.Icon.25" />
                    <bt:Image size="32" scale="1" resid="Leap.Icon.32" />
                    <bt:Image size="32" scale="2" resid="Leap.Icon.32" />
                    <bt:Image size="32" scale="3" resid="Leap.Icon.32" />
                    <bt:Image size="48" scale="1" resid="Leap.Icon.48" />
                    <bt:Image size="48" scale="2" resid="Leap.Icon.48" />
                    <bt:Image size="48" scale="3" resid="Leap.Icon.48" />
                  </Icon>
                  <Action xsi:type="ShowTaskpane">
                    <SourceLocation resid="Leap.Taskpane.Url" />
                  </Action>
                </Control>
              </Group>
            </ExtensionPoint>
          </MobileFormFactor>
        </Host>
      </Hosts>
      <Resources>
        <bt:Images>
          <bt:Image id="Leap.Icon.16" DefaultValue="https://outlookapp.leap365.com/images/icon-16.png"/>
          <bt:Image id="Leap.Icon.32" DefaultValue="https://outlookapp.leap365.com/images/icon-32.png"/>
          <bt:Image id="Leap.Icon.80" DefaultValue="https://outlookapp.leap365.com/images/icon-80.png"/>
          <bt:Image id="Leap.Icon.20" DefaultValue="https://outlookapp.leap365.com/images/icon-20.png" />
          <bt:Image id="Leap.Icon.24" DefaultValue="https://outlookapp.leap365.com/images/icon-24.png" />
          <bt:Image id="Leap.Icon.25" DefaultValue="https://outlookapp.leap365.com/images/icon-25.png" />
          <bt:Image id="Leap.Icon.40" DefaultValue="https://outlookapp.leap365.com/images/icon-40.png" />
          <bt:Image id="Leap.Icon.48" DefaultValue="https://outlookapp.leap365.com/images/icon-48.png" />
          <bt:Image id="Leap.Icon.64" DefaultValue="https://outlookapp.leap365.com/images/icon-64.png" />
        </bt:Images>
        <bt:Urls>
          <bt:Url id="Leap.Taskpane.Url" DefaultValue="https://outlookapp.leap365.com/index.html" />
          <bt:Url id="Leap.Functions.Url" DefaultValue="https://outlookapp.leap365.com/functions.html" />
        </bt:Urls>
        <bt:ShortStrings>
          <bt:String id="Leap.TabLabel" DefaultValue="LEAP Mail Manager" />
          <bt:String id="Leap.Group1Label" DefaultValue="LEAP" />
          <bt:String id="Leap.DefaultCommand.Label" DefaultValue="LEAP Mail Manager" />
          <bt:String id="Leap.DefaultCommand.Title" DefaultValue="LEAP Mail Manager" />
        </bt:ShortStrings>
        <bt:LongStrings>
          <bt:String id="Leap.DefaultCommand.Tooltip" DefaultValue="Click to show the add-in." />
          <bt:String id="Leap.Description" DefaultValue="Save your mail to LEAP." />
        </bt:LongStrings>
      </Resources>
    </VersionOverrides>
  </VersionOverrides>
</OfficeApp>

这是上述加载项清单的 validate-office-addin 结果:

Calling validation service. This might take a moment...
-------------------------------------
Validation: Passed
Based on the requirements specified in your manifest, your add-in can run on the following platforms; your add-in will be tested on these platforms when you submit it to the Office Store:
  - Outlook 2013 Service Pack 1 or later
  - Outlook 2016 or later
  - Outlook on the Web
  - Outlook 2016 for Mac
  - Outlook for iOS
  - Outlook for Android
Important: This analysis is based on the requirements specified in your manifest and does not account for any runtime JavaScript calls within your add-in. For information about which API sets and features are supported on each platform, see Office Add-in host and platfo
rm availability. (https://dev.office.com/add-in-availability).

*This does not include mobile apps. You can opt-in to support mobile apps when you submit your add-in.
-------------------------------------

但是,Microsoft 的验证报告说:

Your add-in is not working in Outlook 2016, Outlook 2013, Outlook for Mac, 
the Outlook app on iOS or in the Outlook app on Android. Your add-in is not 
available to be inserted in the above platforms. If you do not support 2013 
SP1 because you are using an API only available in 2016/Online, you must put 
these apis in the requirements tag in your manifest. If you are not using an 
API only available in 2016/Online, then you must support 2013 SP1.

我有 side-loaded the add-in from OWA.

我可以看到加载项:

我还没有测试加载项是否出现在 Mac 的 Outlook 2016 上。

对于我来说,我似乎无法让加载项显示在:

我不明白为什么。我在清单中遗漏了什么吗?我可能错误地配置了清单吗?请帮忙

通过在 VersionOverridesV1_1 中定义 MobileFormFactor 元素来添加对 Outlook 移动版的支持。参见 here for more information on MobileFormFactor

Outlook 2013 不支持邮箱 1.5(有关可用性信息,请参阅 here)要使您的加载项出现在 Outlook 2013 中,您需要使用邮箱 1.4 或更低版本

在加载项和商店团队的回复中添加一些细节。

Outlook 2013 问题源于 Outlook 遵循的两个相互冲突的规则:

  • 您已在核心清单中声明 1.3 的最低邮箱版本。
  • 您还声明了一个 VersionOverridesV1_0 部分,其最低版本为 1.5

验证工具声明支持 Outlook 2013 Service Pack 1 或更高版本,因为(如商店团队所述)此版本的 Outlook 支持 1.3

Outlook 2013 Service Pack 1 或更高版本也通过 VersionOverridesV1_0 支持 Add-in Commands。一旦 Outlook 看到您声明了加载项命令,它就会转向使用加载项命令。但是,由于这些被定义为需要 1.5,因此 Outlook 2013 无法呈现它们。

为了让您的加载项命令显示在 Outlook 2013 中,您需要确保 VersionOverridesV1_0 内所需的最低版本为 1.4 或更低版本(请注意 VersionOverridesV1_1 应该保持在 1.5).