我正在尝试向所有应用用户(在Android上)发送通知,基本上会复制通过Firebase管理控制台发送通知时发生的情况.这是我开始的CURL命令:
curl --insecure --header"授权:key = AIzaSyBidmyauthkeyisfineL-6NcJxj-1JUvEM"--header"Content-Type:application/json"-d"{\"notification \":{\"title \":\"note -Title \",\"body \":\"note-Body \"}}" https://fcm.googleapis.com/fcm/send
这是JSON解析出来更方便你的眼睛:
{
"notification":{
"title":"note-Title",
"body":"note-Body"
}
}
Run Code Online (Sandbox Code Playgroud)
回复的响应只有两个字符:
至
就是这样,"to"这个词.(Headers报告400)我怀疑这与我的JSON中没有"to"有关.人们甚至会为"去"做什么?我没有定义主题,设备没有注册任何东西.但是,他们仍然可以从Firebase管理面板接收通知.
由于Firebase通知处理的惊人限制,我想尝试"仅数据"JSON包,如果您的应用程序在前台,通知将由您的处理程序处理,但如果您的应用程序在后台,则会获得由Firebase服务内部处理,并且从未传递给您的通知处理程序.显然,如果您通过API提交通知请求,则可以解决此问题,但仅限于仅使用数据进行通知请求.(这会破坏使用相同消息处理iOS和Android的能力.)在我的任何JSON中用"data"替换"notification"都没有效果.
好的,然后我在这里尝试了解决方案:Firebase Java Server向所有设备发送推送通知, 在我看来说"好吧,即使通过管理控制台向所有人发送通知......也不可能通过API. " 解决方法是让每个客户端订阅一个主题,然后将通知推送到该主题.首先是onCreate中的代码:
FirebaseMessaging.getInstance().subscribeToTopic("allDevices");
Run Code Online (Sandbox Code Playgroud)
那么我发送的新JSON:
{
"notification":{
"title":"note-Title",
"body":"note-Body"
},
"to":"allDevices"
}
Run Code Online (Sandbox Code Playgroud)
所以现在我至少得到了服务器的真实回复.JSON响应:
{
"multicast_id":463numbersnumbers42000,
"success":0,
"failure":1,
"canonical_ids":0,
"results":
[
{
"error":"InvalidRegistration"
}
]
}
Run Code Online (Sandbox Code Playgroud)
这附带一个HTTP代码200.好的......根据https://firebase.google.com/docs/cloud-messaging/http-server-ref,带有"InvalidRegistration"的200代码表示注册令牌存在问题.也许?因为文档的这一部分是针对消息传递服务器的.通知服务器是否相同?不清楚.我在其他地方看到这个主题可能需要几个小时才能激活.这似乎会使创建新的聊天室变得毫无用处,所以这似乎也是如此.
当我从头开始编写应用程序时,我很兴奋,因为我以前从未使用过Firebase,只需几个小时即可收到通知.在达到Stripe.com文档的水平之前,它似乎还有很长的路要走.
一句话:有没有人知道提供什么JSON来向运行应用程序的所有设备发送消息以镜像管理控制台功能?
android firebase firebase-cloud-messaging firebase-notifications
我创建了一个Firebase帐户并将其集成到应用中.在Firebase控制台中,我可以看到世界地图,是的,应用程序在美国运行(我在哪里).
似乎没有比"国家"更精细的地理粒度.Google Analytics中的类似功能可让您点击某个国家/地区,然后查看该数据到城市级别.我是否遗漏了某些内容,或者国家级使用情况是Firebase Analytics提供的最佳粒度?
如果它可以做得更好,怎么样?
摘要:我有一个可以正常使用的字段下拉搜索。当我从下拉列表中选择时,它很高兴地将字段设置为我在搜索中收到的对象,但不幸地注册了该更改并将整个对象发送出去以供搜索。
HTML:
<form [formGroup]="myForm" novalidate>
<mat-form-field>
<input matInput
placeholder="SKU / Item Number"
[matAutocomplete]="auto"
formControlName='itemName'>
</mat-form-field>
<mat-autocomplete #auto="matAutocomplete" [displayWith]="parseDropDownSelection">
<mat-option
*ngFor="let row of searchQueryResult"
[value]="row"
(onSelectionChange)="onItemSelection($event)">
<span>{{ row.Name }}</span>
</mat-option>
</mat-autocomplete>
</form>
Run Code Online (Sandbox Code Playgroud)
设置:
import {FieldSearchServiceItem} from './../services/field-search.service';
constructor(
private dialog: MatDialog,
private formBuilder: FormBuilder,
private http: HttpClient,
private appServiceItem: FieldSearchServiceItem,
) {}
Run Code Online (Sandbox Code Playgroud)
ngOnInit()
ngOnInit(){
this.myForm = this.formBuilder.group
({
itemName: '',
});
this.myForm
.get('itemName')
.valueChanges
.pipe(
debounceTime(200),
switchMap(value => this.appServiceItem.search({name: value}, 1))
)
.subscribe(serviceResult => this.searchQueryResult = serviceResult.qResult);
}
Run Code Online (Sandbox Code Playgroud)
服务:
@Injectable()
export …Run Code Online (Sandbox Code Playgroud) Drupal 8:
我有一个块的代码成功地完成它的工作并返回它.该块称为"RacerProfile",它将其所有内容转储到变量"$ pageContent"中.在最后它返回#markup.好.现在我怎么告诉这个每六个小时失效一次?
/**
* Provides a 'Racer Profile' Block
*
* @Block(
* id = "racer_profile",
* admin_label = @Translation("Slider v1 block")
* )
*/
class RacerProfile extends BlockBase {
/**
* {@inheritdoc}
*/
public function build()
{
// does all the work to make $pageContent via non-drupal
// database queries. However, for this example, let's just
// just imagine it gets the time of day. Then, let's set
// let's set the cache age to 5 seconds …Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,在所有条件下在户外使用.这些是运行Android 2.1的B&N Nook平板电脑.它们具有光学触摸检测功能,而不是压力,因此屏幕上的大雨滴可以"禁用"设备,因为它被检测为按下,然后未检测到所有其他按下.
第一部分:在使用的活动中,我手动检测长(10秒)屏幕按压,与雨滴开始阻塞按压一致.我为此使用了dispatchTouchEvent(),没关系.
第二部分:那么我打开一个新的活动,然后绕着降雨圈告诉用户"擦掉这个雨滴".新活动打开正常,我可以成功地在任何地方画圈子.
麻烦的是,新活动没有收到第一次按下的任何触摸事件......尚未停止的长按.没有得到"新的"ACTION_DOWN是可以理解的......我已经抓住了.如果我抬起手指,也没有ACTION_UP.后提起最初的新闻,每天工作得很好:我可以点击屏幕,瞬间一个圆圈围绕当场绘制,如果我拖我的手指会动,所以没有问题.
我怎么得到最初的新闻,那个带我来的人,仍然存在?它必须是某种轮询API,而不是事件,因为我真的想要当前的状态,我知道事件已经被吸了.要清楚的是,在我第一次将手指从屏幕上移开之前,没有任何事件来自dispatchTouchEvent()(即使关闭也不会产生可检测的事件).
(我可以从之前的活动中获取坐标并通过它......但是在10秒的等待期间,雨滴可能会滑落.我宁愿在完成工作时自行完成活动.)
我有一个有条件检查的 Angular 循环。因此,在数组上使用 .length 或使用 i from index 的通常答案不会告诉我有多少项目正在显示。
<form [formGroup]="paymentsForm">
<div formArrayName="arrVoucherLines">
<div *ngFor="let line of paymentsForm.get('arrVoucherLines')['controls']; index as i"
[formGroupName]="i">
<div *ngIf="dateCheckingConditionalFunctionPlaceholder()">
<mat-checkbox formControlName='FlagPayInvoice'></mat-checkbox>
Issued: {{line.value.DateTimeLocalInvoiceIssued |date:'MM/dd'}}
Due: {{line.value.DateTimeLocalInvoiceDue |date:'MM/dd'}}
... variety of other voucer info
</div>
</div>
</div>
</form>
Run Code Online (Sandbox Code Playgroud)
显示项目总数很容易,但我还希望能够显示显示了多少以及跳过了多少。如果我可以在循环中有一个“变量++”,那就很容易了。
期望的结果是得到一些我可以做到的:
Total invoices {{blah.length}}
Invoices Shown {{count}}
Invoices not yet due: {{blah.length-count}}
Run Code Online (Sandbox Code Playgroud)
用例是用户在表单上选择截止日期,并且只显示该日期之前到期的账单。
让我们从有趣的部分开始,这是麻烦的图形.水平,一切都很美.
中间按钮,我想与其他三个对齐.以下是基础知识:
这里是XML(只是relativelayout中的linearlayout):
<LinearLayout
android:id="@+id/wideButtons"
android:layout_below="@+id/buttonClockFinish"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:orientation="horizontal">
<Button
android:id="@+id/buttonLog"
android:layout_weight="1"
android:layout_height="70dp"
android:padding="0dp"
android:layout_marginRight="3dp"
android:layout_width="fill_parent"
android:background="@drawable/custom_button"
android:text="View Log" />
<Button
android:id="@+id/buttonLocation"
android:layout_weight="1"
android:layout_height="70dp"
android:padding="0dp"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:layout_width="fill_parent"
android:background="@drawable/custom_button"
android:text="Location\nD1-RS" />
<Button
android:id="@+id/buttonHelp"
android:layout_weight="1"
android:layout_height="70dp"
android:padding="0dp"
android:layout_marginLeft="3dp"
android:layout_width="fill_parent"
android:background="@drawable/custom_button"
android:text="Help" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
那么为什么它不对齐呢?
安装自定义字体文件的标准方法是通过 gulp 工具,如下所述:https : //pdfmake.github.io/docs/fonts/custom-fonts-client-side/
但是如果这对你来说失败了,对我来说在 Windows 上它似乎是一个兔子洞,肯定有另一种方法来获取数据。是的。
方案一是修改node_modules/pdfmake/build目录下的vsf_fonts.js和pdfmake.js。在第一个中,您将添加数据,在第二个中,您将修改 defaultClientFonts 对象。我承认我说得有点含糊,因为问题是,如果您运行“npm 更新”或类似的操作,您将清除所有这些更改,下面的选项 2 更好,因为它保留了所有股票代码单独,最终它更简单。无需冗长,准确地描述了一个方法可以工作,那我,大概所有的人,建议不要。
我的应用程序是 Angular 8 设置,生成检查 PDF 客户端。所以我需要一个 MICR 字体。(编辑添加:当我升级到 Angular 9、Angular 10 和 Angular 11 时仍然有效。)
我想出的“如何使用自定义字体”的解决方案如下。