我正在使用 AWS Congito 用户池通过 Cognito 身份池进行账户管理,该身份池将此用户池作为身份提供者。我使用它来控制通过 API 网关对 API 的访问,该网关将请求发送到 Lambda。我的 Lambda 是使用 Micronaut 用 Java 8 实现的。所有这些都运行良好。
在 Lambda 中,我从以下Principal中获取名称HttpRequest:
protected String resolveUser( HttpRequest request ){
String ret = null;
Optional<Principal> principal = request.getUserPrincipal();
if( principal.isPresent() ){
ret = principal.get().getName();
}
if( ret == null || ret.length() == 0 ){
ret = "unknown";
}
return ret;
}
Run Code Online (Sandbox Code Playgroud)
Cognito identityId 的字符串名称中返回的内容。像这样的东西:
us-east-1:xxxxe650-53f4-4cba-b553-5dff42bexxxx
我想记录实际的用户登录信息,或者至少有一些方法可以在需要时将 identityId 转换为登录信息。
该LookupDeveloperIdentity API调用似乎是去了解这个正确的方式,但我无法得到它的工作。
尝试使用 Java 和 AWS Java SDK 2 执行此操作: …
amazon-web-services amazon-cognito aws-java-sdk micronaut micronaut-aws
我希望我在Google代理上的操作能够跨调用存储和检索某些信息 - 比如cookie.我该怎么做呢?
使用API.AI和Google智能助理,我正在请求获取用户名称和位置的权限.目的是我可以一次请求许可,随后对我的行动的请求将不需要再次询问(因为每次用户与我的行动谈话时,这将导致非常笨拙的对话).
我发现的是,我只是获取与意图相关actions_intent_PERMISSION的信息 - 即使我已经授予了许可,信息也不会在其他意图履行中发送.(在下面的示例代码中 - 它最终会重新请求所有其他意图的权限.)
我也没有在我的Action的调用之间看到这种权限.因此,每次触发操作时,都会(再次)询问他们是否授予操作权限.
这两种行为都很奇怪.通常,应用程序模型不要求我在应用程序的调用之间或者甚至在应用程序"运行"时重新授权对资源的许可.甚至网页也会在会话期间保留授权.我做错了什么,或者这是出于预期的行为?
正在执行的代码(这是在Google Cloud Functions中运行的,并且还有一些通过Promise进行这些调用的其他结构 - 这只是代码的相关部分).在res.send(200)刚刚指示API.AI它应该使用被定义有响应,这工作没有任何问题.的return Promise.resolve(null);只是确保在其他备用/错误条件不执行.
exports.process = function( req, res ){
var app = new ApiAiApp({request:req, response:res});
if( app.isPermissionGranted() ){
res.send( 200 );
return Promise.resolve( null );
} else {
return askPermission( req, res, app );
}
};
var askPermission = function( req, res, app ){
//app.tell('foo');
let namePermission = app.SupportedPermissions.NAME;
let preciseLocationPermission = app.SupportedPermissions.DEVICE_PRECISE_LOCATION;
// Ask for more than one permission. User can authorize …Run Code Online (Sandbox Code Playgroud) 我想使用手机上的 Google Assistant 将 HTTP POST 命令发送到我的服务器。我有一个简单的 webnms 应用程序在上面运行,该服务器支持 REST API,现在我想使用 Google Assistant 向该服务器发送 GET 或 POST 命令并返回我的输出。
有什么可能吗?我不是全职开发人员。
我正在尝试运行我在Galaxy Nexus上为API 16创建的AVD:
emulator @Galaxy_Nexus_Jelly_Bean_API_16
Run Code Online (Sandbox Code Playgroud)
这给出了错误
PANIC:缺少'arm'CPU的仿真器引擎程序.
尝试通过按下Android Studio内部AVD Manager的播放按钮启动它会在工具库中暂时弹出一些内容,但它会很快消失,没有任何显示,也没有明显的错误消息.
我查看了其他类似问题的帖子.大多数人都认为Windows上的Avast导致了这个问题.我在Mac上运行.我没有安装Avast.
AVD具有以下配置:
Name: Galaxy_Nexus_Jelly_Bean_API_16
CPU/ABI: Google APIs ARM (armeabi-v7a)
Path: /Users/prisoner/.android/avd/Galaxy_Nexus_API_16.avd
Target: google_apis [Google APIs] (API level 16)
Skin: galaxy_nexus
SD Card: 100 MB
hw.dPad: no
hw.lcd.height: 1280
runtime.network.speed: full
hw.accelerometer: yes
hw.device.name: Galaxy Nexus
vm.heapSize: 80
skin.dynamic: yes
hw.device.manufacturer: Google
hw.lcd.width: 720
hw.gps: yes
hw.initialOrientation: Portrait
image.androidVersion.api: 16
hw.audioInput: yes
image.sysdir.1: add-ons/addon-google_apis-google-16/images/armeabi-v7a/
hw.cpu.model: cortex-a8
tag.id: google_apis
showDeviceFrame: yes
hw.camera.back: virtualscene
hw.mainKeys: no
AvdId: Galaxy_Nexus_Jelly_Bean_API_16
hw.camera.front: emulated
hw.lcd.density: 320
avd.ini.displayname: …Run Code Online (Sandbox Code Playgroud) 我一直在尝试使用Google Analytics Measurement Protocol在类似移动设备上记录活动.所有这些尝试都使用验证网址进行了验证,当我查看Google Analytics网站上的实时报告时,我可以查看活动.但是当我查看当天的主页或概述报告时 - 没有显示任何活动.
该视图设置为"所有移动应用程序数据".
POST主体看起来像这样:
v=1&tid=UA-000000000-1&ds=app&qt=1601&uid=uid-zzzzz&t=screenview&cd=Foo&an=Foo%20App%20Name&aid=com.example.foo&aiid=com.example.foo&av=0.0.1&ua=Mozilla%2F5.0%20(Linux%3B%20Android%207.0%3B%20SM-G930V%20Build%2FNRD90M)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F59.0.3071.125%20Mobile%20Safari%2F537.36
Run Code Online (Sandbox Code Playgroud)
该ua字段只是一个预定义的字符串.我发现,如果我省略它,实时监控将命中列为桌面命中,尽管我在移动报告中并且该ds字段是"app".
我错过了需要的字段吗?是否有某些原因导致它出现在实时报告中,而不是出现在每日报告中?是否有其他方法来诊断数据消失的原因,或确认数据实际被捕获?
当我检查调试端点时,命中有效
请求:
https://www.google-analytics.com/debug/collect?v=1&tid=UA-XXX-1&ds=app&qt=1601&uid=uid-zzzzz&t=screenview&cd=Foo&an=Foo%20App%20Name&aid=com.example.foo&aiid=com.example.foo&av=0.0.1&ua=Mozilla%2F5.0%20(Linux%3B%20Android%207.0%3B%20SM-G930V%20Build%2FNRD90M)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F59.0.3071.125%20Mobile%20Safari%2F537.36
Run Code Online (Sandbox Code Playgroud)
响应
{
"hitParsingResult": [ {
"valid": true,
"parserMessage": [ ],
"hit": "/debug/collect?v=1\u0026tid=UA-53766825-1\u0026ds=app\u0026qt=1601\u0026uid=uid-zzzzz\u0026t=screenview\u0026cd=Foo\u0026an=Foo%20App%20Name\u0026aid=com.example.foo\u0026aiid=com.example.foo\u0026av=0.0.1\u0026ua=Mozilla%2F5.0%20(Linux%3B%20Android%207.0%3B%20SM-G930V%20Build%2FNRD90M)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F59.0.3071.125%20Mobile%20Safari%2F537.36"
} ],
"parserMessage": [ {
"messageType": "INFO",
"description": "Found 1 hit in the request."
} ]
}
Run Code Online (Sandbox Code Playgroud)
我不能使用Firebase中的一个移动库 - 这不是他们支持的平台之一.我不想假装这是一个网页 - 没有关联的主机名或路径.我不想使用事件,因为我不能做事件行为流,这是我有兴趣看到的事情之一.
我知道有时需要"一天左右"才能首先出现结果.该网站目前已在五天前设置,并在此期间收到了数据.
很好地考虑了反垃圾邮件设置,但设置似乎是正确的:
我也尝试使用GET而不是POST - 没有变化,它仍然实时显示命中,但随后它消失了.
但是,我知道它可以永久记录命中.来自俄罗斯垃圾邮件发送者的两次点击已经出现在每日报告中(我不在那里看到它实时显示).我不知道他们做了什么,但很想知道,因为它可能有助于弄清楚如何添加记录.
在实时报告中,它正确地指出了所有命中数据来自的数据中心.也许这是在我无法控制的地方过滤掉它?
为了构建Google 智能助理应用,Google提供了两个不同的API作为其node.js动作在google库中的一部分:
有一个共同的界面,但我不明白两者之间的区别是什么,以及为什么我会使用其中一个.
我想在基本卡中添加新的订单项.Google的文档说明:
A limited subset of markdown is supported:
New line with a double space
*bold*
italics
Run Code Online (Sandbox Code Playgroud)
我能够使粗体和斜体工作,但新线路不起作用.双空间使用我完全不明白.
<br> 在模拟器中工作但在真实设备中它呈现为 <br>
有人可以帮我使用buildrich响应渲染多行吗?
我的代码:
app.ask(app.buildRichResponse()
.addSimpleResponse("Simple response")
.addBasicCard(app.buildBasicCard('L1 L2 L3')
)
Run Code Online (Sandbox Code Playgroud) 我正在尝试与Dialgoflow v2 API一起开始使用Google Actions v2 API.
我有以下示例(到目前为止在Dialogflow - > Fulfillment Webhook中)取自官方的Google Actions Migration Guide,但不幸的是我不断收到MalformedResponse'final_response'必须设置错误.
'use strict';
const functions = require('firebase-functions');
const { dialogflow } = require('actions-on-google');
const app = dialogflow();
app.intent('Default Welcome Intent', conv => {
conv.ask('How are you?');
});
exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);
Run Code Online (Sandbox Code Playgroud)
响应是:
{
"responseMetadata": {
"status": {
"code": 13,
"message": "Failed to parse Dialogflow response into AppResponse because of empty speech response",
"details": [
{
"@type": "type.googleapis.com/google.protobuf.Value",
"value": "{\"id\":\"542fe4a8-6017-429f-81c3-61ba568e3659\",\"timestamp\":\"2018-04-19T20:16:25.606Z\",\"lang\":\"en-us\",\"result\":{},\"status\":{\"code\":200,\"errorType\":\"success\"},\"sessionId\":\"1524168985362\"}"
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
请知道为什么会发生这种情况?