Firebase App Invite无法发送电子邮件

时间:2016-10-13 17:26:40

标签: android firebase firebase-invites

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

var express = require('express');
var ParseServer = require('parse-server').ParseServer;
var ParseDashboard = require('parse-dashboard');
var path = require('path');

var allowInsecureHTTP = true;

var databaseUri = process.env.DATABASE_URI || process.env.MONGODB_URI;


var api = new ParseServer({
  databaseURI: databaseUri || 'mongodb://localhost:27017/dev',
  cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js',
  appId: process.env.APP_ID || 'xxx',
  masterKey: process.env.MASTER_KEY || '',
  serverURL: process.env.SERVER_URL || 'xxx.herokuapp.com/parse',
  restAPIKey: 'xxx',
push:{
ios:{
      pfx: 'Push.p12',
      bundleId: 'xxx',
      production: true
     }
   }
}, allowInsecureHTTP);

var dashboard = new ParseDashboard({
users: [{
   user: 'admin',
  pass: 'xxx'
 }],
apps: [
 {
  serverURL: process.env.SERVER_URL + process.env.PARSE_MOUNT ||      'https://xxx.herokuapp.com/',
  appId: process.env.APP_ID || 'myAppId',
  masterKey: process.env.MASTER_KEY || '',
  appName: process.env.APP_NAME || 'StoryTime',
  iconName: 'Icon-60.png'
   }
 ],
 "iconsFolder": "icons"
 }, allowInsecureHTTP);

var app = express();

app.use('/public', express.static(path.join(__dirname, '/public')));


var mountPath = process.env.PARSE_MOUNT || '/parse';
app.use(mountPath, api);

//start the dashboard
app.use('/dashboard', dashboard);

 app.get('/', function(req, res) {
   res.status(200).send('I dream of being a website.  Please star the parse-    server repo on GitHub!');
 });


var port = process.env.PORT || 1337;
var httpServer = require('http').createServer(app);
httpServer.listen(port, function() {
    console.log('parse-server-example running on port ' + port + '.');
});

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

检查ID时
Your invitation has been sent

它表示ids.length == 0.

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

有时我会收到短信邀请,但我永远不会收到电子邮件邀请。

这是我的gradlew:

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

App Invite功能:

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'

任何人都知道为什么我无法收到电子邮件邀请?我的短信邀请也不稳定。

2 个答案:

答案 0 :(得分:2)

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

难以准确地说出你的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为你生成链接更好(正如我所做的那样,在你的html中放置%% APPINVITE_LINK_PLACEHOLDER %%),这是更便携的解决方案:在这种情况下,它会在点击时触发标准行为:如果尚未安装,请安装应用程序,或者如果已安装,则启动MainActivity。但这可能无法满足您的特定需求。

答案 1 :(得分:0)

在我的情况下,我已删除.setOtherPlatformsTargetApplication(...)并再次发送电子邮件。当没有安装应用程序时,它会混淆其他平台上的链接。