【问题标题】:Firebase App Invite can't send emailFirebase App Invite 无法发送电子邮件
【发布时间】:2016-10-13 17:26:40
【问题描述】:

我设置了 Firebase App Invite,选择联系人后,它会显示一个小吃栏:

Your invitation has been sent

在 onActivityResult 中,它返回给我一个 RESULT_OK,但是当我通过

检查 ID 时
String[] ids = AppInviteInvitation.getInvitationIds(resultCode, data);
Logger.INSTANCE.LogD(TAG, "onActivityResult: ids.size = " + ids.length );

它说 ids.length == 0。

为什么它不能返回 ids 但返回一个 RESULT_OK?

有时我可以收到短信邀请,但我永远无法收到电子邮件邀请。

这是我的毕业证:

compile 'com.google.firebase:firebase-invites:9.6.1'
apply plugin: 'com.google.gms.google-services'
classpath 'com.google.gms:google-services:3.0.0'

应用邀请功能:

Intent i = new AppInviteInvitation.IntentBuilder(getString(R.string.share_title))
                .setMessage(getString(R.string.share_content))
                .setEmailHtmlContent(
                        "<html>\n" +
                        "<body>\n" +
                        "\t<a href=\""+getString(R.string.share_link)+"\">Download</a>\n"+
                        "</body>\n" +
                        "</html>")
                .setEmailSubject(getString(R.string.share_title))
                .build();
        startActivityForResult(i, REQUEST_INVITE);

有人知道为什么我收不到电子邮件邀请吗?而且我的短信邀请也不稳定。

【问题讨论】:

  • 我也有同样的问题。就我而言,以前没问题,但现在它不再起作用了。我怀疑它与我更改的电子邮件 HTML 内容值有关。我会及时通知你。

标签: android firebase firebase-invites


【解决方案1】:

问题在于,由于某种原因,当 emailHtmlContent 不包含有效的 html 时,Firebase 只是静默失败。恕我直言,它应该在创建意图时验证这一点,如果不正确则抛出异常。

很难准确说出您的 html 中有什么问题,使用转义的双引号很难阅读。我宁愿描述我的解决方案:

将 html 放入资源文件中,如下所示:(注意 CDATA 让您可以将 html 放入 xml 文件中而无需转义):

<resources>
    ...
    <string name="invitation_email_html_content"><![CDATA[<!DOCTYPE html>
<html>
    <body>
        <div>
            <a href="%%APPINVITE_LINK_PLACEHOLDER%%">Install My App</a>
        </div>
    </body>
</html>]]></string>
</resources>

您可以这样构建意图:

            Intent intent = new AppInviteInvitation.IntentBuilder(getString(R.string.invitation_title))
                    .setEmailSubject(getString(R.string.invitation_email_subject))
                    .setMessage(message)
                    .setEmailHtmlContent(getString(R.string.invitation_email_html_content))
                    .build();
            startActivityForResult(intent, REQUEST_INVITE);

我还认为最好让 firebase 为您生成链接(就像我所做的那样,将 %%APPINVITE_LINK_PLACEHOLDER%% 放在您的 html 中),它是更便携的解决方案:在这种情况下,它会在单击时触发标准行为:如果尚未安装,请安装应用程序,如果已安装,请启动 MainActivity。但这可能无法满足您的特定需求。

【讨论】:

  • 感谢您的回答!我尝试了这种方法,但它仍然不起作用..我个人认为主要原因是当 html 嵌入生成的深度链接 firebase 时 Firebase 以某种方式失败,例如&lt;a herf="%%DEEP_LINK%%"&gt;install&lt;/a&gt;。因为在我将链接更改为另一个以“www”开头的普通链接之后。如www.google.com,它可以发送电子邮件。 (听起来很奇怪,对我来说没有意义)
  • 那么你可以尝试通过在你的 html 中包含这一行来“作弊”:&lt;!-- &lt;a href="%%APPINVITE_LINK_PLACEHOLDER%%"&gt;Install My App&lt;/a&gt; --&gt;。注释掉,它不应该被电子邮件收件人看到或使用。
【解决方案2】:

就我而言,我已删除 .setOtherPlatformsTargetApplication(...) 并再次发送电子邮件。未安装应用程序时,它会在其他平台上弄乱链接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-22
    • 2011-02-18
    • 1970-01-01
    • 2018-08-17
    • 2022-11-20
    • 2020-11-22
    • 2019-01-19
    相关资源
    最近更新 更多