
Portuguese: 
Estamos prontos.
Olá, pessoal.
Obrigado por virem.
Obrigado por ficarem.
Viemos falar sobre Firebase.
Todos viemos falar sobre Firebase.
Mas especificamente, Jonny e eu
estamos aqui para falar
sobre Firebase no iOS.
Porque no Firebase,
a construção de plataforma cruzada
é levada a sério.
E conhecemos isso como "biblioteca móvel".
Ela pode ser útil,
a menos que esteja disponível
nas plataformas que desenvolve.
Para muitos desenvolvedores de celular,
ou seja, Android e iOS.
Engraçado é que se eu falar Espanhol,
parecerá que estou animado por operar
sistemas em geral.
É minha piada internacionalizada
de hoje.
Por isso que entre os recursos
disponíveis no Firebase,
esses são os disponíveis no iOS.
E pode ver que são quase todos.
Infelizmente, não podemos ver
todos os recursos em 30 minutos.
Não temos tempo suficiente.
Vamos focar nos três
que vejo mais perguntas a respeito
no Stack Overflow,

Japanese: 
用意はいいよ
やあ 皆さん
おいで頂きありがとう
いてくれてありがとう
私達は Firebase の話をします
ここの皆が Firebase の話をするんだけど
具体的には Jonny と私は
iOS の Firebase について話します
Firebase ではクロスプラットフォーム開発
をとても真剣に受けとめていて
それを「移動図書館」だと分かっています
開発している全てのプラットフォームで
利用可能でなければ
役に立ちません
ネイティブ・モバイル開発者の
皆さんの大部分にとって
それは Android と iOS を意味します
面白いことに私がスペイン語で話せば
オペレーティングシステム一般に
興奮してるように見えます
今日の私の国際化ジョークです
だから Firebase で利用可能な
機能すべてのうちで
これらは iOS で利用可能なものです
それがそれらのほとんど全てですね
残念ながらこれらの機能全部を
30分で話すことはできません
時間が足りません
そこで焦点を３つに絞って
質問が多いと思われる
スタック・オーバーフローと

Korean: 
좋아요, 준비 됐어요
안녕하세요, 와주셔서 감사합니다
머물러 주셔서 감사합니다
파이어베이스에 대해 이야기해 볼게요
저희 모두 파이어베이스에 대해
이야기하려고 왔지만
조금 더 구체적으로 조니와 저는
iOS 상의 파이어베이스에 대해
이야기하려고 합니다
파이어베이스에서는 크로스 플랫폼
개발을 중요하게 생각하거든요
또한 모바일 라이브러리로써
여러분이 개발하고 있는 모든 플랫폼에서
이용할 수 없으면 아무
소용없다는 것도 잘 알고 있어요
네이티브 모바일 개발자인
여러분의 상당수는
안드로이드와 iOS를 쓰실 겁니다
재미있는 사실은 제가
이 강연을 스페인어로 하면
그저 일반적으로 
운영 체계에 대해 신나게
얘기하는 걸로 보일 겁니다
이 말이 제가 하는
오늘의 세계적 농담이라고 칠게요
파이어베이스에서 이용할 수 있는
모든 기능 중 iOS에서
이용할 수 있는 것이
바로 이러한 것들입니다
보시다시피 거의 대부분이 있어요
안타깝지만 30분 내에 이 모든 기능을
시연할 수는 없어요
시간이 충분하지 않아요
스택 오버플로우에서
가장 궁금해하시는 3가지인
파이어베이스 클라우드 메시징과

Chinese: 
我们准备好了
大家好
感谢各位光临
感谢各位依然留守现场
我们今天聊一聊Firebase
当然今天所有的讲者
都是为了Firebase而来
但是我和Jonny将讲述
如果将Firebase用于IOS应用开发
因为在 Firebase
我们非常重视跨平台开发
我们深知
一个移动库
难以真正服务大家
除非它能用于多个平台
对于大多第一代移动开发者而言
这个平台就是安卓和iOS
有趣的是
如果我今天用西班牙语演讲
观众可能以为 
我对全部的操作系统都感兴趣
这是一个关于国际化的笑话
跟今天的主题相关
这就是为什么
在全部Firebase功能里
只有这些适用于iOS
它们几乎全都在这里了
很可惜我们不可能在30分钟之内
详述全部的功能
因为时间不够
我们主要集中讲3个功能
而在Stack Overflow上的大多提问
也是关于它们的

Arabic: 
حسناً، نحن جاهزون.
مرحباًَ بالجميع.
شكراً لحضوركم.
شكراً لبقائكم.
نحن هنا للحديث عن Firebase.
حسناً، نحن هنا للحديث عن Firebase.
لكن بشكل مُحدد،
جوني وأنا
هنا لنحدثك عن Firebaseعلي iOS.
لأنه علي Firebase
نتناول التطويرعبر منصة
بجدية شديدة.
وكما نعلم، كـ mobile library
لن يكون من المفيد لك
إن لم يكن
متاحاً علي كل المنصات 
التي تطور من أجلها.
وبالنسبة لمعظمكم
كمُطوري native mobile
هذا يعني الأندرويد و iOS.
حقيقة ممتعة..
لو تكلمت بالأسبانية
يشبه لو أنني متحمس
بنظام التشغيل
بشكل عام.
هذه احدى مُزحاتي الدولية
لهذا اليوم.
وهذا سبب خروج كل الميزات
المتاحة علي Firebase
هذه احدى الميزات المتاحة علي iOS.
وتستطيع أن تراهم
كلهم تقريباً.
الآن لسوء الحظ
لانستطيع نقل
كل هذه الخواص في 30 دقيقة.
نحن فقط، ليس لدينا وقت لهذا.
لذلك سنركزعلي ثلاثة
والذي جاءت معظم الأسئلة
بخصوصهم.

English: 
[MUSIC PLAYING]
TODD KERPELMAN: All
right, we're ready.
Hello, everybody.
Thank you for coming.
Thank you for staying.
We're here to talk
about Firebase.
Well, we're all here
to talk about Firebase.
But more specifically,
Jonny and I
are here to talk to you
about Firebase on iOS.
Because at Firebase, we take
cross-platform development
very seriously.
And we know that as
a mobile library,
it can't be useful
to you unless it's
available on all the platforms
you're developing for.
And for most of you
native mobile developers,
that means Android and iOS.
Fun fact-- if I give
this talk in Spanish,
it kind of looks like I'm
just excited about operating
systems in general.
So that's my one
internationalization joke
for the day.
And so that's why out
of all the features
that are available
on Firebase, these
are the ones that
are available on iOS.
And you can see that
it's nearly all of them.
Now unfortunately,
we can't drill
into all of these
features in 30 minutes.
We just don't have
enough time for that.
So we're going to
focus on the three
that I probably see the most
questions about on Stack

Indonesian: 
Kami siap. Halo, Semuanya.
Terima kasih sudah hadir
dan masih di sini.
Kita akan membahas Firebase.
Kita semua di sini untuk membahas itu.
Tapi lebih tepatnya, Jonny dan saya akan
menjelaskan tentang Firebase di iOS.
Karena di Firebase, kami sangat serius
dalam pengembangan lintas-platform.
Kita tahu, sebagai pustaka selular,
itu hanya bermanfaat jika tersedia
di semua platform yang Anda kembangkan.
Bagi mayoritas pengembang
aplikasi seluler, yaitu Android dan iOS.
Jika bicara dalam bahasa Spanyol,
saya tampak hanya tertarik
pada sistem operasi secara umum.
Ini salah satu lelucon internasionalisasi
dari saya untuk hari ini.
Itulah sebabnya dari semua fitur
yang tersedia di Firebase,
inilah yang tersedia di iOS.
Bisa dilihat, ini hampir semuanya.
Sayangnya, kita tak bisa membahas
semua ini dalam 30 menit.
Kita tidak punya cukup waktu.
Kita akan fokus pada tiga hal yang mungkin
sering ditanyakan di Stack Overflow,

Spanish: 
Bueno, estamos listos.
Hola todos.
Gracias por venir.
Gracias por quedarse.
Estamos aquí para hablar de Firebase.
Bueno, todos estamos aquí para hablar
de Firebase.
Pero más específicamente Jonny y yo
estamos aquí para hablarles de Firebase
en iOS.
Porque en Firebase nos tomamos
el desarrollo de plataformas cruzadas
muy seriamente.
Y sabemos que como una biblioteca móvil
no puede serles útil hasta que esté
disponible
en todas las plataformas para las que
la desarrollas
y para muchos de ustedes, desarrolladores
nativos de móvil,
eso significa Android e iOS.
Hecho curioso, si doy esta charla
en Español,
parece que sólo me emocionan
los sistemas operativos
en general.
Así que ese es mi único
chiste internacional
del día.
Por eso, de todas las características
que están disponibles para Firebase,
éstas son las que están disponibles
en iOS.
Y pueden ver que son casi todos ellos.
Por desgracia, no podemos ahondar
en todas estas características
en 30 minutos.
No tenemos el tiempo,
así que nos enfocaremos en tres
de los cuales probablemente veo
más preguntas
en Stack Overflow

Chinese: 
Firebase云消息传递 
Firebase动态链接
而Jonny则会在稍后谈及
如何简便使用Firebase 数据库
以及如何利用我们一直在致力打造的
开源库－FirebaseUI
现在进入第一个主题
Fiebase云消息传递
我会在本次演讲中将Firebase云消息传递
简称为FCM
大家既能用FCM与安卓设备沟通
也能通过APNs向iOS设备发送消息
这就涉及一个很重要的问题
大家为什么想做这个事呢？
这是一个非常好的问题
部分原因是只需一个代码路径
对不对
大家无需再担心
你的用户使用的是什么设备
在也不需要用一个代码路径
向iOS用户发布信息
而另一个路径向其他设备用户发布信息
大家完全不必再担心
大家只需用FCM发一条信息
然后就万事大吉了
非常方便
大家也可以借此好好利用主题等特征
主题本质上是一个用户可订阅的专门组群

English: 
Overflow-- Firebase Cloud
Messaging, Firebase Dynamic
Links, and then Jonny will
cover how you can make
using the Firebase database
easier and more cool to work
with using a new
open source library
that we've been working
on called FirebaseUI.
But with that,
we're going to start
with our first topic, which
is Firebase Cloud Messaging.
So the deal with
Firebase Cloud Messaging,
or FCM as I will probably call
it throughout the presentation,
is you can use it to communicate
both with Android devices
and also route notifications
through APNs to talk
to iOS devices, which leads to
one important question, which
is, why would you
want to do this?
That's a good question.
Partly because there's
only one code path, right?
You no longer have to
worry about keeping track
of what types of
devices your users have,
and if you're trying to
talk to your iOS devices
send through this code
path, and otherwise
send through this
type of notification.
You really just don't
have to worry about that.
You can just kind of send
one type of notification
through FCM and you're
done, which is nice.
It lets you take advantage
of features like topics.
These are essentially
ad hoc groups

Indonesian: 
Firebase Cloud Messaging,
Firebase Dynamic Link.
Lalu Jonny akan menerangkan cara
menggunakan Firebase Database
lebih mudah dan lebih keren
dengan pustaka sumber terbuka baru
yang telah kami kerjakan,
namanya FirebaseUI.
Kita akan mulai dengan topik pertama,
yaitu Firebase Cloud Messaging.
Dengan Firebase Cloud Messaging,
atau saya akan menyebutnya FCM
selama presentasi ini,
Anda bisa memakai FCM untuk
mengomunikasikan perangkat Android
dan juga mengirim notifikasi melalui APNs
untuk berbicara dengan perangkat iOS.
Itu mengarah ke satu pertanyaan penting.
Mengapa Anda ingin melakukan ini?
Ini pertanyaan bagus.
Salah satunya
karena hanya ada satu jalur kode.
Anda tak perlu harus mengingat
tipe perangkat milik pengguna Anda,
Jika Anda mencoba berbicara
ke perangkat iOS, kirim lewat jalur ini.
Jika tidak, kirim
melalui tipe notifikasi ini.
Anda tak perlu mengkhawatirkannya.
Anda hanya perlu mengirim
satu tipe notifikasi
melalui FCM dan selesai.
Ini bagus.
Ini memungkinkan untuk memanfaatkan
fitur seperti topik.
Pada dasarnya, ini adalah grup ad-hoc

Korean: 
파이어베이스 다이나믹 링크, 그리고
저희가 만든 파이어베이스UI라는
새로운 오픈 소스 라이브러리를 활용해서
파이어베이스 데이터베이스를 쉽고
멋지게 이용할 수 있는지
조니가 이야기할 겁니다
그러면 이제 첫 번째 주제인
파이어베이스 클라우드
메시징으로 시작할게요
파이어베이스 클라우드 메시징은
이 프레젠테이션에서
FCM이라고 부르는 것은
안드로이드 기기로
소통할 수 있게 해주고
iOS기기로 소통하기 위해
APN을 통해 루트 알림을 해줍니다
중요한 건 이걸 왜 하는가 입니다
좋은 질문입니다
부분적으로는 딱 하나의
코드 경로만 있기 때문입니다
사용자가 어떤 기기를 사용하는지
계속 알아야 할 필요가
더 이상 없는 겁니다
또한 iOS 기기를 사용하려고 하면
이 코드 경로를 통해 보내고
그렇지 않으면
이런 종류의 알림을 통해 보내라고 하는
이런 것을 걱정할 필요가 없어요
그냥 FCM을 통해 한 종류의
알림만 보내면 다 됩니다
정말 좋아요
이건 토픽 같은 기능을
활용할 수 있게 해 줍니다
이건 근본적으로 즉석에서
마련된 그룹입니다

Japanese: 
Firebase クラウドメッセージング
Firebase ダイナミックリンク
について話します
次に Jonny は
Firebase データベースをもっと楽に
良く使う方法として
新しいオープンソースライブラリで
今取り組んでいる FirebaseUI を
使うことを説明します
最初の話題を始めます
それは Firebase クラウド
メッセージングです
Firebase クラウドメッセージングは
プレゼン中多分 FCM と言いますが
通信に使えるのが Android デバイスと
APN を介したルート通知で
iOS デバイスの両方です
これは重要な質問につながります
なぜこれをしたいのか？
良い質問です
コードパスは１つしかないのだから
ユーザーがどんなデバイスを持ってるかを
把握することをもう心配しなくてよいし
iOS デバイスに送信しようとする場合は
このコードパスを介して送るし
さもなければ
この種の通知を介して送ります
それを心配する必要はないのです
FCM を介して１種類の通知を
送ればそれで完了で
これは嬉しいです
トピックスのような機能を利用できます
これらは基本的に 
顧客が登録できるアドホックグループで

Spanish: 
Firebase Cloud Messaging,
Firebase Dynamic Links
y luego Jonny cubrirá cómo puedes hacer
el usar la base de datos de Firebase
más sencillo y genial para trabajar
usando una nueva biblioteca
de código abierto
en la que hemos estado trabajando
llamada FirebaseUI.
Pero vamos a comenzar
con nuestro primer tema, que es Firebase
Cloud Messaging.
El asunto con Firebase Cloud Messaging
o FCM, como probablemente la llamaré
a lo largo de la presentación,
es que puedes usarla tanto
para comunicarte con dispositivos Android
como para encaminar notificaciones
a través de APNs
para hablar con dispositivos iOS,
lo que lleva a una pregunta importante
que es ¿por qué querrías hacer esto?
Esa es una buena pregunta.
En parte porque sólo hay una ruta
de código.
Ya no tienes que preocuparte
por estar al tanto
de qué tipos de dispositivos tienen
tus usuarios
y si estás tratando de hablar
a tus dispositivos iOS
envía esta ruta de código,
o envía este tipo de notificación.
De verdad ya no tienes que preocuparte
por eso.
Puedes enviar un tipo de notificación
por FCM y ya está, lo cual es bueno.
Te deja sacar ventaja de características
como topics.
Estos son esencialmente grupos ad hoc
a los que tus clientes pueden suscribirse

Portuguese: 
Firebase Cloud Messaging,
Firebase Dynamic Links
e depois Jonny vai explicar
como você pode
usar o banco de dados do Firebase
de modo melhor e mais fácil
usando uma biblioteca de código aberto
na qual estamos trabalhando
no chamado FirebaseUI.
Com isso,
começaremos com o primeiro tópico,
que é sobre Firebase Cloud Messaging.
O negócio com o Firebase Cloud Messaging
ou FCM, como provavelmente chamarei
durante a apresentação,
É que é possível comunicar
também com dispositivos Android
e também encaminhar notificações
via APNs para dispositivos iOS,
o que nos leva à importante pergunta,
que é, "Por que faria isso?".
É uma ótima pergunta.
Em partes porque o código
só tem um caminho.
Você não precisa mais se preocupar
em monitorar
que tipos de dispositivos os usuários têm,
e se está tentando se comunicar
com dispositivos iOS
deve enviar pelo caminho,
ou enviar através
desse tipo de notificação.
Não precisa se preocupar com isso.
Você só precisa enviar
um tipo de notificação
através do FCM e pronto, o que é ótimo.
Isso fornece uma vantagem
com recursos como tópicos.
Esses grupos são ad hoc,

Arabic: 
Overflow.. سحابة تراسل Firebase
روابط Firebase الديناميكية
وبعد ذلك، سيغطي جوني
كيف تستعمل
قواعد بيانات Firebase للعمل 
بشكل أسهل وممتاز
بإستخدام نظام المكتبة مفتوحة المصدر
والتي قمنا بالعمل عليها وتسمي
FirebaseUI
بهذا، سنبدأ
الموضوع الأول، وهو
سحابة تراسل Firebase.
اذاً، التعامل مع
سحابة تراسل Firebase 
أو بإختصارFCM، والذي سأستخدمه
غالباً خلال العرض
هو أنه يمكن استخدامه في
الاتصال بأجهزة الأندرويد
وأيضاً اشعارات المسار
من خلال APNs إلي المحادثة
إلي أجهزة iOS، والذي يؤدي إلي سؤال مهم
لماذا تريد فعل ذلك؟
سؤال جيد.
جزئياً، بسبب وجود
مسار رمز واحد، صحيح؟
لاداعي للقلق لمعرفة
أنوع الأجهزة التي يمتلكها مستخدميك
ولو أردت الحديث إلي أجهزة iOS
أرسل من خلال هذا المسار الرمزي
أومن خلال هذا النوع من الإشعار.
لاداعي لأن تقلق حقاً بخصوص هذا.
يمكنك أن ترسل فقط نوع واحد من الإشعارات.
من خلال FCM، وقد انتهيت
وهذا شيء جميل.
انه يسمح لك بالإستفادة من خواص
الموضوعات
في الأساس، هذه مجموعات خاصة

Indonesian: 
yang bisa diikuti klien Anda
agar Anda bisa mengirim pesan
ke perangkat tersebut saja
yang tertarik pada subjek tertentu.
Sekali lagi, ini bisa dilakukan
tanpa perlu melacak semua hal ini
di database yang harus dipelihara.
Kami yang akan melakukannya untuk Anda.
Berarti Anda juga bisa kirim notifikasi
melalui panel Firebase Notification.
Ini cocok untuk anggota
non-teknis di tim Anda
untuk mengirim pesan lewat FCM.
Ini juga memungkinkan Anda mendapat
fitur keren dari Firebase Notification.
Misalnya, dapat mengirim pesan ke pemirsa,
yaitu kelompok yang Anda tentukan
dengan Firebase Analytic.
Anda juga bisa mengidentifikasi
event konversi yang diinginkan.
Pada dasarnya, Anda bisa lihat
seberapa efektif notifikasi ini
mengarahkan konversi
yang Anda ingin lihat,
dalam bentuk laporan kecil seperti ini.
Anda bisa lihat, dari semua notifikasi,
berapa yang dibuka, berapa
yang mengarah ke konversi.
Itu memungkinkan Anda mengubah notifikasi
untuk membuat hasil yang lebih baik.
Tentu Anda tak perlu memakai
UI notifikasi untuk bicara dengan FCM.
Server Anda juga bisa langsung
bicara ke FCM jika Anda mau.

Japanese: 
この特定の件に興味があるデバイスに
皆さんがメッセージを送れるものです
またこれもできますが
どこかに維持するデータベースで
これら全部を追跡する必要はありません
私達がその仕事を引き受けます
それはまた Firebase 通知パネルから
通知を送れるという意味です
これは 非技術系の人にとって
FCM を介してメッセージ
を送る良い方法です
又 Firebase 通知の他の素敵な機能も
使えるようになります
例えば読者にメッセージを送れます
それはこれらのグループで
Firebase アナリティクスの使用を
明確にします
また 望みの変換イベントを
識別することもできます
基本的にこれらの通知が
望む変換を促す際
それらから見るのに
いかに効果的か分かります
これのようなレポートを得ます
費やした通知のうち
いくつ開かれたか いくつ変換イベントに
つながったか見れます
それで通知を調整して
より良い結果を作れると思います
勿論 FCM への送信に
通知 UI を使う必要はありません
必要なら あなたのサーバーが
直接 FCM と通信できます

Korean: 
고객분들이 이를 구독할 수 있고
이 특정 주제에 관심을 보이는
기기에만 메시지를 보낼 수 있어요
다시 한번 말씀 드리지만
어딘가에 보관해야 하는
모든 데이터베이스를 계속해서
추적해야 할 필요가 없습니다
저희가 여러분을 위해
그 일을 해드립니다
이는 또한 파이어베이스
알림 패널을 통해
알림을 보낼 수 있다는 걸 의미하는데요
여러분 팀의 비전문가들이 FCM을 통해
메시지를 보내기에 좋은 방식입니다
그러면 파이어베이스 알림의
또 다른 괜찮은 기능을
소개해 드릴게요
예컨대, 사용자들에게
메시지를 보낼 수 있어요
이는 파이어베이스 분석을 이용해서
정의를 내리는 그룹입니다
또한 원하는 전환 이벤트도
확인할 수 있어요
따라서 여러분이
원하는 전환을 운영할 때
이 알림이 얼마나
효율적인지 확인할 수 있어요
이것은 이렇게 작고 좋은
일종의 보고 형식으로 나옵니다
사용한 알림 중 몇 개가 열렸고
몇 개가 전환 이벤트로
되었는지 볼 수 있어요
바라건대, 조금 더 나은
결과를 만들기 위해
알림을 수정할 수 있게 되는 겁니다
물론 FCM을 이용하기 위해서
알림 UI를 이용할 필요는 없어요
원하면 서버가 직접
FCM을 이용할수도 있어요

Chinese: 
这样你只会给感兴趣的用户发送消息
重申一次 
要完成这些步骤
都无需在数据库里追踪它们
或是管理一个数据库
这一步工作我们帮你完成了
也就是说 ，你只需要利用Firebase
通知面板发送通知即可
这个通知面板也可以让
团队里的非技术成员
利用FCM发送消息
你还能使用Firebase通知的一些小巧特征
例如发送消息至特定的用户
这些用户群是你使用
Firebase Analytics挑选出来的
你还能找出达到预期转化效果的事件
你能看到这些通知的
转化效率如何
相关信息都在这种小巧的报告里
你可以看到
在你发送的通知中
用户打开了哪些通知 
哪些通知促成了了转化事件
这个特征可以辅助大家对通知进行微调
达到更好的效果
当然 你无需用到通知UI
才能与FCM对话
只要你想 
你的服务器可以直接与FCM对话

Spanish: 
para que puedas enviar mensajes
sólo a esos dispositivo interesados
en estos temas particulares.
Puedes hacer esto sin necesidad
de estar al tanto
de todo esto en una base de datos
que tienen que mantener en algún lado.
Nos encargamos de ese trabajo por ti.
También significa que puedes
enviar notificaciones
a través del panel de Notificaciones
de Firebase,
lo cual es una buena forma para
los miembros no-técnicos
de tu equipo de enviar mensajes
a través de FCM.
Pero también te permite tomar
otras buenas características
de las Notificaciones de Firebase,
como poder enviar mensajes a audiencias,
que son estos grupos que defines
usando Firebase Analytics
También puedes identificar eventos
de conversión deseados.
Básicamente puedes ver
cuán efectivas son estas notificaciones
en conducir estas conversiones
que quieres,
lo cual recibes en pequeños
y lindos reportes como este.
Puedes ver,
de las notificaciones enviadas,
cuántas fueron abiertas,
cuántas llevaron
a un evento de conversión,
lo cual con suerte te dejará retocar
las notificaciones
para crear mejores resultados.
Claro, no necesitas usar
las notificaciones UI
para hablar con FCM.
Tu servidor también puede hablar
directamente con FCM

Portuguese: 
que os clientes podem se inscrever
para o envio de mensagens
apenas para dispositivos interessados
nesses assuntos específicos.
É possível fazer isso sem a necessidade
de monitorar tudo isso
em um banco de dados,
mantido em algum lugar.
Cuidamos disso para você.
Você também pode mandar notificações
através do painel de notificações
do Firebase,
boa maneira para quem não é técnico
de enviar mensagens através do FCM.
Mas também permite
que você use outros recursos
do Firebase Notifications,
como poder mandar mensagens
para audiences,
que são os grupos que você define
utilizando o Firebase Analytics.
Também é possível identificar
os eventos de conversão desejados,
para ser possível ver
como as notificações são eficientes
em processar as conversões que deseja ver
e que é possível conseguir
nesses relatórios.
Pode ver,
dentre as notificações recebidas,
quantas você abriu,
quantos eventos de conversão,
o que permite que você ajuste
suas notificações
para que tenha melhores resultados.
É claro, você não precisa usar
as notificações UI
para se comunicar com o FCM.
Seu servidor pode se comunicar
com o FCM se você quiser.

English: 
that your clients can subscribe
to so you can send messages
just to those devices that are
interested in these particular
subjects.
Again, you can do this
without your needing
to keep track of all
this stuff on a database
that you have to
maintain somewhere.
We take care of
that work for you.
It also means you can
send notifications
through the Firebase
Notifications panel, which
is a nice way for the
non-technical members
of your team to send
messages through FCM.
But it also lets you hook
into some other neat features
of Firebase
Notifications, like being
able to send messages
to audiences,
which are these
groups that you define
using Firebase Analytics.
You can also identify
desired conversion events.
So you can basically see how
effective these notifications
are in driving the conversions
that you want to see out
of them, which you get in sort
of these nice little reports
like this.
You can see, out of the
notifications you spent,
how many were opened, how
many led to a conversion
event, which hopefully lets
you tweak your notifications
to create some better outcomes.
Of course, you don't need
to use the notifications
UI to talk to FCM.
Your server can also talk
directly to FCM if you want to.

Arabic: 
التي يمكن أن يشترك بها عملائك
لذلك يمكن ارسال الرسائل
لهذه الأجهزة المهتمة بهذه 
المواضيع المُحددة.
مرة أخرى، يمكنك فعل هذا بدون الحاجة
لتتبع كل هذه الأشياء 
علي قاعدة البيانات
التي يجب أن تحافظ عليها.
نحن نهتم بهذا العمل لك.
يعني أيضاً أنه يمكنك ارسال
اشعارات
من خلال لوحة اشعارات Firebase
وهذه طريقة لطيفة لأعضاء فريقك
غير التقنيين
لإرسال رسائل من خلال FCM.
انه يسمح لك أيضاً بالوصول
لبعض ميزات
اشعارات Firebase الرائعة
مثل القدرة علي ارسائل رسائل للجمهور
وهذه مجموعات قمتَ بتعريفها
بإستخدام تحليلات Firebase.
يمكنك أيضاً تعريف
أحداث التحول المرغوبة
لذلك، بالفعل يمكنك رؤية 
كفاءة هذه الإشعارات
في دفع الأحداث التي تريد رؤيتها
ويمكنك الحصول عليها من
هذه التقاريرالقليلة
يمكنك رؤية نتائج الإشعارات
كم عددها الذي تم فتحه،
وكم عددها الذي
أدي الي حدث تحول
لضبط اشعاراتك
حتي تكون نتائج أفضل.
بالطبع أنت لاتحتاج أن تستخدم
اشعارات واجهة المستخدم
لتتحدث مع FCM.
يمكن لخادمك أن يتحدث مباشرة مع FCM
اذا أردت ذلك.

English: 
The choice is
completely up to you.
So with that in
mind, let's go over
how FCM talks to APNs
and to your iOS device.
Because that's the
key to understanding
some issues that
you might run into.
As you probably know, two things
are needed for any service
to communicate with
APNs, the Apple
Push Notification Service.
First you need a certificate
to talk to the APNs server.
And I know these days
there is also an auth key,
but I'm not going
to get into that.
Because their certificate
is what FCM uses.
You also need to identify
the device you're
talking to using
something that's generally
known as the APNs device token.
It's essentially
kind of a unique ID
of that device for your app.
This is something
that's typically
requested from
APNs by your device
and then sent down
to your server.
So one of the
first things you're
going to do when you set
up Firebase Cloud Messaging
is upload your APNs cert to
Firebase Cloud Messaging, which
then allows it to talk to APNs.
And then when your
app starts up,
it's going to request a device
token from APNs, like normal.
It will then send that down
to Firebase Cloud Messaging,

Japanese: 
選択はあなた次第です
だから それを念頭において
FCM が APN と iOS デバイスに
どう送信するかを見てみましょう
これが皆さんが遭遇する問題を
理解する鍵ですからね
ご存知でしょうが
APN つまり「Apple プッシュ通知
サービス」と通信するには
どのサービスも２つのことが必要です
まず APN サーバーに送信する
証明書が必要です
今日では認証鍵もありますが
その話はしません
その証明書は FCM が使ってるものだからです
更に 自分が送信するデバイスを
識別する必要があります
一般に APN デバイストークンとして
知られるものを使います
本質的にアプリに対する
そのデバイスの一意の ID です
これは通常デバイスによって
APN からリクエストされ
あなたのサーバーに送られます
だから FCM 設定時に
最初にすることの１つは
APN 証明書を FCM にアップすることです
それで APN と通信できるようになります
そうしてアプリが起動すると
普段通り APN からの
デバイストークンをリクエストします
次に それを FCM に送ります

Chinese: 
这完全取决于你的意愿
了解这一点之后
我们继续看看
FCM是如何与APNs以及iOS设备对话的
了解这关键的一点
我们才能明白出错时要排查哪些步骤
大家可能也知道
任何服务想要与APNs沟通
APN即苹果信息推送服务
必备两点
第一 你需要一个证书与APNs服务器对话
我知道现在还需要验证密钥 (auth key)
我今天不展开讲
因为FCM只需用到证书
同时 
你还需要识别你准备对话的设备
故而需要设备令牌(APNs device token)
设备令牌相当于使用你的app的设备的
一个独特的身份证
你的设备通常会要求APNs提供设备令牌
并发送至服务器
所以你在设置Firebase云消息传递时
要做的一件事是
上传你的APNs证书
有了APNs证书 
FCM就能与APNs对话
当你的app开始运行时
它会向APNs索要一个设备令牌
并将令牌发送至FCM

Spanish: 
si quieres.
La elección es completamente tuya.
Con eso en mente,
repasemos cómo FCM habla con APNs
y tu dispositivo iOS.
Porque esa es la clave para entender
algunos problemas que
puedes encontrarte.
Como probablemente saben,
se necesitan dos cosas
para cualquier servicio
para comunicarse con APNs,
Apple Push Notification Service.
Primero necesitan un certificado
para hablar con el servidor de APN
y sé que estos días
también hay
una Auth key,
pero no me meteré en eso
porque su certificado es lo que FCM usa.
También necesitas identificar
el dispositivo con el que hablas
utilizando algo conocido
como token de dispositivo de APN.
Es esencialmente una identificación
única
de ese dispositivo para tu app.
Esto es algo que es generalmente
solicitado
desde APN por tu dispositivo
y luego enviado a tu servidor.
Así que una de las primeras cosas
que harás
cuando instales Firebase Cloud Messaging
es subir tu certificado de APN
a Firebase Cloud Messaging,
lo cual luego le permite hablar con APNs.
Y luego cuando tu aplicación enciende
va a solicitar un token de dispositivo
de APNs, como es lo normal.
Lo enviará a Firebase Cloud Messaging

Korean: 
선택은 전적으로 여러분께 달렸어요
그러면 이걸 기억해두시고
어떻게 FCM이 APN과 iOS 기기를
이용하는지로 넘어가볼게요
여러분이 직면하게 될 일부 문제들을
이해하는 데에 핵심이 되거든요
아시겠지만 APN, 즉
애플 푸쉬 알림 서비스로
소통하기 위해선 2가지가
필요해요
먼저 APN 서버를 이용하기 위한
인증서가 필요해요
요즘엔 인증키도 있다는 사실은 알지만
거기까지는 안 갈게요
인증서가 FCM이 이용하는 것이라서요
또한 일반적으로 APN 기기 토큰이라고
알려진 것을 이용해서 사용 중인 기기를
확인해야 합니다
이는 여러분의 앱에 대해
기기가 가진 고유 ID입니다
이건 일반적으로 기기에 의해
요청받는 것이고
그 후 서버로 보내 집니다
따라서 파이어베이스
클라우드 메시징을 설정할 때
가장 먼저 할 일 중 하나는
파이어베이스 클라우드 메시징에
APN 인증서를 올리는 겁니다
이게 APN에
소통할 수 있도록 해 줍니다
그 후 앱을 시작할 때
평소처럼 APN에서의
기기 토큰을 요구할 겁니다
그리고 나서 파이어베이스
클라우드 메시징에 그걸 보내요

Portuguese: 
A escolha é toda sua.
Com isso em mente, vamos ver
como o FCM se comunica com o APNs
e com seu dispositivo iOS.
Porque essa é a chave para entender
alguns problemas que você pode ter.
Como sabem,
é preciso duas coisas para o servidor
se comunicar com APNs,
o serviço Apple Push Notification.
Primeiro, precisa de certificado
para se comunicar com o servidor.
E sei que também tem
chave de autenticação,
mas não falarei disso.
Porque o certificado
é o que o FCM utiliza.
Você também precisa identificar
o dispositivo que usa,
utilizando algo que é conhecido
como o token do APNs.
Essencialmente, é uma identificação única
daquele dispositivo para o aplicativo.
Isso é algo tipicamente solicitado
para o APNs do seu dispositivo
e depois é enviado para seu servidor.
Então, uma das coisas que você fará
quando configurar o FCM
é enviar o certificado do APNs para o FCM,
o que vai permitir
que se comunique com o APNs.
Quando o aplicativo iniciar,
será solicitado o token do APNs,
o que é normal.
Então você será enviado
para o Firebase Cloud Messaging,

Arabic: 
الإختيار كله يرجع لك.
بمعرفة هذا، دعنا نتجاوزه إلي
كيف يتحدث FCM مع APSNs 
وإلي جهاز بنظام تشغيل أبل IOS.
لأن هذا هو الأساس في فهم
بعض المسائل التي يمكن أن تواجهها.
وكما هو معروف، نحن نحتاج شيئين
لأي جهاز
ليتصل مع APNs
وخدمة دفع اشعارات أبل.
أولاً أنت تحتاج شهادة للتتحدث مع
خادم APNs ، وأعرف
أن في هذه الأيام يوجد أيضًا 
مفتاح مصادقة
لكن لن أذهب لذلك.
لأن شهادتهم هي من استخدامات FCM
تحتاج أيضًا أن تُحدد الجهاز
الذي تتحدث من خلاله
بإستخدام شيء ما، معروف بشكل عام
بـ APNs device token
انه أساساً، نوع من رقم تعريف فريد
لهذا الجهاز بتطبيقك.
وعادة، هذا شيء
يُطلب من APNs
بواسطة جهازك
وبعد ذلك تُرسل إلي الخادم.
لذلك، أول شيء تقوم بفعله
عندما تثبت سحابة تراسل Firebase
هو رفع شهادة APNs الخاصة بك
علي سحابة تراسل Firebase
والذي يسمح بعد ذلك بالحديث إلي APNs.
بعد ذلك، عندما يعمل تطبيقك
سقوم بطلب رمز الجهازمن APNs 
كما هو طبيعي.
سيرسله بعد ذلك إلي 
سحابة تراسل Firebase

Indonesian: 
Semuanya terserah Anda.
Mari bahas cara FCM berbicara
ke APNs dan perangkat iOS Anda
karena itulah kunci untuk memahami
beberapa masalah yang mungkin Anda hadapi.
Mungkin Anda tahu,
dua hal diperlukan layanan
untuk berkomunikasi dengan APNs,
Layanan Notifikasi Push Apple.
Pertama, Anda perlu sertifikat
untuk berbicara ke server APNs.
Saya tahu ada juga kunci autentikasi,
tapi tak akan saya bahas
sebab sertifikatnya sama
dengan sertifikat FCM.
Anda juga perlu mengidentifikasi
perangkat yang berkomunikasi
dengan sesuatu
yang disebut token perangkat APNs.
Itu pada dasarnya adalah sejenis ID unik
dari perangkat untuk aplikasi Anda.
Ini sesuatu yang biasanya diminta
dari APNs oleh perangkat Anda,
lalu dikirim ke server Anda.
Hal pertama yang harus dilakukan
saat mengatur Firebase Cloud Messaging
adalah mengunggah sertifikat APNs
ke Cloud Messaging,
yang lalu memungkinkannya bicara ke APNs.
Saat memulai, aplikasi akan meminta
token perangkat dari APNs, seperti biasa.
Lalu ia akan mengirimnya
ke Firebase Cloud Messaging

Japanese: 
FCM デバイストークンを交換に
求めます
それが戻ってきます
この時点で基本的に
FCM を介して APN を介して
通知を送るリクエストをする用意ができます
基本的に これをするには
サーバーで２つのものが必要です
第1は API キーで
これで サーバーが FCM に送信できます
これを Firebase コンソールから取得します
次に 個々のデバイスに送信したい場合も
そのデバイストークンが必要になります
それはどうにかして顧客から取得します
だからこの２つの情報が
FCM に送られる通知に含まれています
FCM は言うんですね
「FCM トークンが見えるから
これが何のデバイスか見よう」
「だが このデバイスには
APN トークンもあるようだ」
「では iOS デバイスだろうな」と
だから基本的にこの時点で
これらのメッセージを APN を通した
道にする必要があると分かるのです
それで Firebase は
その証明書と
そちら側にある APN トークンを使って
真新しい APN 通知を作ります
するとこの通知は APN を通ります

English: 
and it will ask for a Firebase
Cloud Messaging device
token in exchange,
which it will get back.
And at this point,
you're basically
ready to make a request to send
off a notification through FCM
through APNs.
And basically, you're
going to need two things
to do this on your server.
First will be the API key,
which allows your server
to talk to FCM.
And you'll get this from
the Firebase console.
And then assuming you want to
talk to individual devices,
you're also going
to need that device
token, which you're going to
somehow get from your client.
So these two pieces
of information
are then packaged off into a
notification that gets sent off
to Firebase Cloud Messaging.
Firebase Cloud
Messaging says, OK, I
see what device this is,
because I see the FCM token.
But hey, it looks like this
device also has an APNs token.
Maybe it's an iOS device.
And so it basically
knows at this point
it needs to route these
messages through APNs.
And so what Firebase will do is
it will create a brand new APNs
notification using the
certificate and the APNs token
that it has on its side.
This notification then
goes through APNs,

Portuguese: 
o token do Firebase Cloud Messaging
será solicitado
em troca disso e será devolvido.
Nesse ponto, você está quase pronto
para fazer um pedido
para enviar uma notificação
através do FCM, através do APNs.
Você precisará de duas coisas
para fazer isso no seu servidor.
Primeiro, senha do API,
permitindo que o servidor
se comunique com o FCM.
Conseguirá isso através
do console Firebase.
Se quiser se comunicar
com dispositivos individuais,
você também precisará do token,
que você vai conseguir pegar
com o seu cliente.
Então essas duas informações
estarão incluídas em uma notificaçõo
que é enviada para o FCM.
O Firebase Cloud Messaging diz,
"Certo, vejo esse dispositivo
pois vejo a chave eletrônica do FCM.
Mas parece que esse dispositivo
também tem o token do APNs.
Talvez seja um dispositivo iOS."
Então ele sabe, basicamente,
que a esse ponto
há a necessidade de encaminhar
essas mensagens pelo APNs.
O que o Firebase deve fazer é criar
uma notificação de APNs nova
usando o certificado e o token do APNs
que ele possui.
Essa notificação então passa pelo APNs,

Arabic: 
وسيسأل عن رمز جهاز 
سحابة تراسل Firebase
في مقابل ذلك، والتي سوف تُسترد.
وعند هذه النقطة،
أنت في الأساس
تكون مستعد لتطلب ارسال اشعار
من خلال FCM
من خلال APNs.
وأساسًا، انت ستحتاج لشيئين
حتي تفعل لك علي خادمك.
أولًا، سيكون مفتاح API 
والذي يسمح لخادمك
للتحدث إلي FCM.
وستحصل علي هذا من
وحدة تحكم Firebase.
وبعد ذلك، لنتفترض أنك تريد
التحدث إلي أجهزة منفردة
ستحتاج رمز هذا الجهاز
والذي بطريقة ما، ستحصل عليه
من عميلك.
إذاً،هاتين المعلومتين
يتم تعبئتها داخل الإرسال
والتي تُرسل إلي
سحابة تراسل Firebase.
سحابة تراسل Firebase
تقول: حسناً
انا أري ماهذا الجهاز، 
لأنني أري رمز FCM.
لكن، انه يبدوا أن هذا الجهاز
لديه رمز APNs.
مُحتمل أن يكون جهازIOS.
لذلك، في الأساس يعرف عند هذه النقطة
أنه يحتاج أن يُوجه هذه الرسائل
من خلال APNs.
اذاً، ماسيفعله Firebase هو انشاء
اشعار APNs جديد
باستخدام شهادة ورمز APNs
هذا من جانبه
بعد ذلك، يذهب هذا الإشعار
من خلال APNs

Indonesian: 
dan meminta token perangkat
Firebase Messaging sebagai gantinya,
yang akan didapatnya kembali.
Saat ini, Anda siap untuk meminta
pengiriman notifikasi lewat FCM via APNs.
Anda perlu dua hal
untuk melakukan itu di server Anda.
Pertama, kunci API yang memungkinkan
server bicara pada FCM.
Anda akan dapatkan ini
dari konsol Firebase.
Dengan asumsi Anda mau bicara
pada setiap perangkat,
Anda juga perlu token perangkat tersebut
yang akan Anda dapat dari klien.
Lalu dua informasi ini
digabung menjadi notifikasi
yang dikirim ke Firebase Cloud Messaging.
Firebase Cloud Messaging menjawab,
"Aku tahu perangkat apa ini,
karena lihat token FCM-nya."
"Tapi tampaknya perangkat ini
juga punya token APNs."
"Mungkin ini perangkat iOS".
Dengan begitu, ia tahu ia harus
meneruskan pesan ini lewat APNs.
Firebase akan membuat notifikasi APNs baru
dengan sertifikat
dan token APNs yang ada padanya.
Notifikasi ini kemudian
diteruskan ke APNs,

Spanish: 
y solicitará un token de dispositivo
de Firebase Cloud Messaging
a cambio, el cual recibirá.
En este punto estás listo
para solicitar enviar una notificación
por FCM
por APNs.
Básicamente necesitarás dos cosas
para hacer esto en tu servidor.
Primero será la clave API, que le permite
a tu servidor
hablar con FCM.
Obtendrás esto de la consola Firebase.
Y luego
asumiendo que quieres hablar
con dispositivos individuales
también necesitarás ese token
de dispositivo,
que obtendrás de alguna manera
de tu cliente.
Así que estas dos piezas de información
se enviarán en una notificación
a Firebase Cloud Messaging,
Firebase Cloud Messaging dice,
está bien, veo qué es este dispositivo,
porque veo el token de FCM.
Pero oye, parece que este dispositivo
también tiene un token de APNs,
quizá es un dispositivo iOS.
Así que básicamente en este punto
sabe que necesita encaminar estos mensajes
por APNs.
Así que lo que Firebase hará es crear
una nueva notificación APN
utilizando el certificado y el token
de APN
que tiene de su lado.
Esta notificación luego va por APNs,

Chinese: 
而且要求FCM回传一个FCM 设备令牌
这时候
你已经作好准备了
可以请求FCM与APNs对话并发送消息了
简而言之
你需要两样东西
才能在服务器上完成以上操作
第一样是API密钥
它可以允许你的服务器与FCM对话
API密钥可在Firebase控制台获取
假定你需要与各个设备对话
你就需要它们的设备令牌
设备令牌是从用户处获得的
结合了这两样法宝
就可以通过FCM发送通知了
FCM说好的
我知道这是什么设备
因为我看到了FCM令牌 (FCM token)
但是等一下
好像这个设备也有一个APNs设备令牌啊
那它应该是一个iOS设备
那FCM此时就知道了
它需要通过APNs传递消息
而Firebase的工作就是创建一个全新的APNs通知
它所需的工具是证书和APNs设备令牌
这个消息就会传递到APNs

Korean: 
그리고 그 대신 파이어베이스
클라우드 메시징 기기 토큰을
요구할 것이고
이건 다시 돌아오는 겁니다
이 시점에서는 기본적으로
APN을 통해 FCM으로
알림을 보내도록
요청할 준비가 다 된 겁니다
그리고 기본적으로
이걸 서버에 하기 위해선
두 가지가 필요해요
먼저 API 키가 필요한데
이것은 서버가 FCM에
소통할 수 있도록 해주고
파이어베이스 콘솔에서 가져올 수 있어요
각각의 기기를 
이용하고 싶다고 가정했을 때
기기의 토큰 또한 필요해요
이것은 여러분의 클라이언트에서
어떻게든 구해야 해요
그리고 나서 이 두 가지 정보는
파이어베이스 클라우드
메시징으로 보내지게 될
알림으로 포장되는 겁니다
파이어베이스 클라우드
메시징은 이럴 겁니다
이게 무슨 기기인지 알겠어
FCM 토큰을 볼 수 있으니
그런데 이 기기는
APN 토큰도 있는 것 같네
아마도 이건 iOS 기기겠지
따라서 이쯤에서는 기본적으로
이 메지시를 APN을 통한
통로로 보내야 한다는 것을 아는 겁니다
따라서 파이어베이스는
새로운 APN 알림을 만들 겁니다
그 안에 있는 인증서와 APN 토큰을
이용해서 말입니다
그러면 이 알림이
APN을 통해 가는 겁니다

English: 
which then finally
notifies our iOS device.
And we're happy.
Yay.
So I know this is
a lot to process,
but basically, two things
you should need to know.
First is that most of
this is invisible to you
as the developer.
It kind of happens
behind the scenes,
and you generally don't need to
worry about it unless, I guess,
something goes wrong.
But the other point that
I want you to take away
is that by the time
we get to this part
here in the process,
this basically just
looks like a regular old
APNs notification, right?
As far as your
device is concerned,
this is like any
other notification
it's received from Apple.
So let's stop and
think about the work
that our device had to
do during that process.
First we had to ask
APNs for a device token.
We then had to
send that token off
to Firebase Cloud Messaging.
And then we had to receive
back and store our own Firebase
Cloud Messaging device token.
Now lucky for you,
you don't really
need to do any extra work
to take care of this.
You basically just
call and register
for remote notifications
like you would normally.
Basically, we take
care of this work
by employing some method
swizzling to take care

Chinese: 
也就是最终传递到iOS设备上
皆大欢喜
太好了
我知道大家要好好消化这些知识
但是基本上你只需要知道两件事
第一 这个过程对我们开发者而言其实是隐形的
这些类似于幕后工作
一般不需要理会它们
除非出错了
但我也希望大家记住
当我们处理到这一步的时候
就跟过去常用的APNs通知是类似的
对你的设备而言
这些就像是从苹果发来的一条新通知
现在让我们停下来
想一想设备在这个过程要完成的工作
首先我们需要向APN索要设备令牌
然后再将令牌发送至
Firebase云消息传送
此时我们接收并储存自己的
Firebase云消息传递设备令牌
你们很幸运
这一步是不需要你们做任何额外工作的
你只需要呼叫
并注册远程通知
跟平时一样
这一部分工作其实是由我们在幕后完成的
我们采取一些非常酷炫的方法

Japanese: 
それが最後に iOS デバイスに通知します
私達は嬉しくなります
やった
これは沢山のプロセスですね
だが 基本的に覚える必要があるのは２つです
まず これの大部分は開発者の
皆さんには見えません
それは画面の背後で起こります
一般的にそれの心配は要りません
何かまずくならない限りはね
だが 皆さんに取り上げて欲しい
もう１つの点は
プロセスのここの部分に着く頃までには
これは基本的に
いつもの古い APN 通知のように
見えるだけなことです
皆さんのデバイスに関する限り
これは Apple から受ける他の通知と
変わりません
では その過程中に
私達のデバイスがする
仕事をよく考えてみましょう
まず デバイストークン用
APN を求めねばならなかった
それからそのトークンを 
FCM に送らねばならなかった
次に 自分の FCM
デバイストークンが戻るのを受け取り
格納しなければならなかった
幸いにも本当には
皆さんはこの為の
余分な仕事は必要ありません
皆さんは基本的にいつも通り
リモート通知を呼び出し登録するだけです
基本的に私達がこの仕事を引き受け

Korean: 
그런 후 마지막으로
iOS 기기에 알립니다
만족스럽군요, 좋아요
이 정보가 많다는 것은 알지만
기본적으로 두 가지만 아시면 됩니다
먼저 이 과정의 대부분은
개발자에게 보이지 않아요
이면에서 일어난다고 볼 수 있고
뭔가 잘못되지 않는 이상
보통은 이것에 대해
걱정할 필요 없는 것 같아요
그런데 제가 말씀 드리고 싶은
또 다른 요점은
여기서 이 정도에 도달했을 때에는
이건 기본적으로 그냥
보통의 옛날 APN 알림과
비슷해 보이겠죠?
기기에 있어서는
애플에서 받는 다른 알림과
다를 바가 없어요
그러면 이제 잠깐 멈추고 생각해 볼게요
기기가 이 과정 동안
해야 할 일에 대해서요
먼저 APN에 기기 토큰을
요청해야 해요
그리고 나서 파이어베이스
클라우드 메시징에
그 토큰을 보내야 합니다
그런 후 우리 각자의 파이어베이스
클라우드 메시징 기기 토큰을
다시 받아서 저장해야 해요
다행히도 이걸 해결하기 위해
여러분이 다른 일을 할 필요는 없어요
평소에 하듯이 그저
원격 알림을 불러내서
등록하기만 하면 됩니다
기본적으로 이걸 해결하기 위한
메서드를 혼합하여

Spanish: 
quien finalmente notifica
a nuestro dispositivo iOS-
Y estamos felices.
Yay.
Sé que esto es mucho para procesar,
pero básicamente, dos cosas
que necesitan saber.
Primero es que mucho de esto
es invisible para ti
como desarrollador.
Sucede como detrás de escenas,
y en general no necesitas preocuparte
por ello a menos que algo salga mal.
Pero el otro punto que quiero
que tengan en cuenta
es que para el momento en que llegamos
a esta parte
aquí en el proceso, esto básicamente se ve
como una vieja notificación de APNs,
En lo que a tu dispositivo respecta,
esta es como cualquier otra notificación
recibida de Apple.
Así que paremos y pensemos
en el trabajo que nuestro dispositivo
debió hacer en ese proceso.
Primero debimos pedirle a APNs un token
de dispositivo,
luego debimos enviar ese token
a Firebase Cloud Messaging
y luego debimos recibir y guardar nuestro
propio token de Firebase Cloud Messaging.
Por fortuna no necesitas hacer
trabajo extra
para encargarte de esto.
Básicamente llamas y te registras
para notificaciones remotas como lo harías
normalmente.
Básicamente nos encargamos de este trabajo
empleando algunos method swizzling

Portuguese: 
que finalmente notificará
o dispositivo iOS.
E ficamos felizes. Oba.
Sei que isso é muito para assimilar,
mas duas coisas você precisa saber.
Primeiro, muito disso
é invisível para você
como desenvolvedor.
Acontece nos bastidores
e não precisa se preocupar,
a menos, acredito, que algo dê errado.
Outro ponto que quero que esqueçam
é que quando chegarmos nessa parte aqui
do processo, praticamente vai parecer
com uma velha notificação do APNs, certo?
Em relação ao dispositivo,
essa é como qualquer notificação
que é recebida pela Apple.
Então vamos pensar no trabalho
do nosso dispositivo durante o processo.
Primeiro temos que pedir ao APNs
por um token.
Temos que enviar o token
para o Firebase Cloud Messaging.
E depois temos que receber e armazenar,
nosso token do Firebase Cloud Messaging.
Por sorte, você não precisa mesmo
fazer nada além para cuidar disso.
Só solicitar e registrar
as notificações remotas,
como normalmente faz.
Nós cuidamos desse trabalho
através de uma troca de métodos

Arabic: 
جهازنا الـ IOS
ونحن سعداء
أنا أعرف أن هذا كثير لفهمه
لكن، في الأساس
هناك شيئان يجب أن تعرفهما.
أولًا، معظم هذا غير مرئي لك
كالمُطور.
هذا ما يحدث خلف الكواليس
وعامةً، لاداعي أن تقلق بشأنه
إلا إذا اعتقدت
أن شيء خطأ يحدث.
لكن، النقطة الأخرى التي أريدك
أن تنتقل إليها
أنه مع الوقت نحن نحصل علي هذا الجزء
هنا في العملية، هذا أساسًا
مجرد
أنه يشبه اشعار APNs
قديم ومنتظم.
بقدر اهتمامك بجهازك
هذا يشبه أي اشعار آخر
يُرسل من Apple.
لذلك، دعنا نتوقف ونفكر في العمل
الذي يؤديه جهازنا أثناء العملية.
أولاً، يجب أن نطلب من APNs
رمز الجهاز
بعد ذلك، نرسل هذا الرمز
إلي سحابة تراسل Firebase .
بعد ذلك، يجب أن نستقبلها
ونخزن رمز جهاز سحابة تراسل
Firebase الخاص بنا.
الآن أنت محظوظ، فلا تحتاج حقاً
أن تعمل أي عمل إضافي
لتهتم بذلك.
أنت أساسًا، مجرد أن تطلب وتسجل
للإشعارات عن بعد، كما تفعل عادةً.
نحن نهتم بهذا العمل في الأساس
عن طريق استخدام بعض
 method swizzling 

Indonesian: 
yang akhirnya memberi tahu perangkat iOS.
Kita pun senang. Hore.
Saya tahu banyak yang harus dicerna.
Tapi pada dasarnya,
Anda hanya perlu tahu dua hal.
Pertama, mayoritasnya sulit
dilihat sebagai pengembang aplikasi.
Ini terjadi di balik layar.
Umumnya, Anda tak perlu khawatir,
kecuali ada yang tidak beres.
Tapi hal lain yang saya ingin Anda ingat
adalah saat kita sampai
pada bagian ini dalam prosesnya,
ini tampak
seperti notifikasi APNs biasa, 'kan?
Setahu perangkat Anda,
ini seperti notifikasi lain dari Apple.
Mari pikirkan yang perlu
dilakukan perangkat selama proses itu.
Pertama, kita perlu memeriksa
token perangkat di APNs.
Lalu kita perlu mengirim token itu
ke Firebase Cloud Messaging.
Kita perlu terima lagi dan menyimpan token
perangkat Firebase Cloud Messaging kita.
Beruntung, Anda tak perlu
bekerja lebih untuk mengurus ini.
Anda hanya perlu panggil dan daftarkan
untuk notifikasi jauh seperti biasanya.
Pada dasarnya, kami mengurus ini
dengan beberapa metode swizzle

Korean: 
저희가 해결해 드리는 겁니다
그럼 혼합된 어플리케이션은
기기 토큰 방식으로
원격 알림을 등록하는 겁니다
필사하시는 분, 죄송해요
APN 토큰을 받고 그것을
FCM 기기 토큰과 바꾸기 위해
FCM으로 보내는 거죠
그런데 제가 여러분께
거짓말을 조금 했어요
사실 이것은 인스턴스
ID 토큰이라고 알려져 있어요
다큐멘테이션이나 엑스코드 아웃풋을 보면
그렇게 불려지는 걸 볼 수 있을 겁니다
기본적으로 이걸 FCM
기기 토큰으로 생각하시면 됩니다
기본적으로 그게 그거라서요
그런데 중요한 점 하나는
사용자에게 알림 승인을 물어볼 때
어떠한 것도 혼합하지 않는다는 점입니다
그렇죠?
그것이 바로 개발자로서, 여러분이
앱에서 구체적으로 어느 지점에서
할지 정해야 하는 겁니다
여러분이 승인 상자를 불러왔을 때
사용자가 허용을 클릭한다고
알려줄 때 말입니다
따라서 이걸 자동으로 하지는 않아요
여전히 앱 개발자로써
여러분이 해야하는 겁니다
그러면 디버깅에 대해 얘기해 볼게요
보시다시피 서로 소통하는 시스템이
많이 있어요, 그렇죠?
여러분의 서버나 파이어베이스 알림은

Indonesian: 
untuk menangani semua pekerjaan ini.
Di aplikasi yang sudah di-swizzle,
metode didRegister
forRemoteNotificationwithDeviceToken.
Maaf untuk pembuat transkrip.
Kita menerima token APNs kita,
mengirimnya ke FCM
untuk ditukar dengan token perangkat FCM.
Omong-omong,
saya sedikit bohong pada Anda.
Ini sebenarnya disebut token ID instan.
Jika Anda lihat dokumentasi kami
atau di hasil Xcode, Anda akan
melihatnya direferensikan seperti itu.
Tapi Anda bisa menganggapnya
token perangkat FCM
karena pada dasarnya seperti itu.
Satu catatan penting, kami tak melakukan
swizzle pada metode apa pun
yang meminta pengguna
menyetujui notifikasi apa pun.
Itu harus dilakukan sebagai pengembang
di bagian tertentu pada aplikasi Anda
ketika pengguna menjawab, "Ya, saya akan
mengeklik Accept saat muncul kotak izin."
Jadi, tak otomatis. Anda masih harus
lakukan ini sebagai pengembang aplikasi.
Mari bahas debugging.
Seperti terlihat, banyak sistem
yang saling komunikasi, 'kan?

Chinese: 
让你高枕无忧
而我们酷炫的应用
的确是用设备令牌进行远程通知注册
抱歉啊 字幕人员 
说得这么复杂
我们接收APNs设备令牌
传送至FCM
并返回FCM设备令牌
顺便说一下
其实官方名称不是FCM设备令牌
而是 instance ID token
如果大家查看我们的文档
或者是Xcode输出的话 
其实这个才是官方名字
但是大家可以将其理解为一个FCM设备令牌
它本质就是这样的
还有很重要的一点
我们并没有谈及要使用任何方法
请求用户允许我们发送通知
但其实作为一名开发者
这一步工作是要做的
你的用户要明确指示
是的 我点击了同意
允许你发送通知
这一步不是自动完成的
App开发者要另外处理这个事
我们现在谈谈如何排查故障
在前面可以看到
其实是有很多系统互相对话的

English: 
of a lot of this work for you.
And our swizzled
application did register
for remote notifications
with device token method.
Sorry, transcriber person.
We receive our APNs token,
send that off to FCM
in exchange for the
FCM device token.
And by the way, I've been
lying to you a little bit.
This is actually known
as an instance ID token.
And if you look in
our documentation
or in the Xcode output, you'll
see it referenced that way.
But you can basically think
of it as an FCM device token.
Because that's
basically what it is.
One important note,
by the way, is
we don't swizzle
any kind of method
where we ask the user for
any kind of notification
permissions, right?
That's work that you
as an app developer
are going to want to do at a
very specific point in your app
when your user has
indicated, yes, I
will click Accept when you
bring up that permissions box.
So we don't do
this automatically.
You still have to do
this as an app developer.
So let's talk debugging.
As you can see, there
are a lot of systems
that talk to each other, right?
Your server or
Firebase Notifications

Japanese: 
沢山のこの仕事を引き受ける為に
スウィズルするメソッドを使います
スウィズルされたアプリは
デバイストークンメソッドで
リモート通知に登録しました
筆記の方 済みません
私達は APN トークンを受け取り
FCM デバイストークンと交換に
それを FCM に送ります
ところで皆さんに少し嘘をついてきました
これは実際は インスタンス
ID トークンとして知られています
そして私達の文書や
Xcode 出力を見ると
そんな風に参照されています
しかし 基本的に それを
FCM デバイストークンと思っていいのです
基本的に そうなのです
ところで１つ重要なことですが
私達はユーザーに何かの通知承認を
求める場所では
どんなスウィズルもしません
それは アプリ開発者としての皆さんが
アプリの非常に特定の部分でする仕事です
ユーザーが
許可ボックスを出した時
「同意する」をクリックすると示した時ですね
私達はこれを自動ではやりません
やはり皆さんがアプリ開発者として
これをしなくてはなりません
ではデバッグの話をしましょう
ご覧のように お互いに通信する
沢山のシステムがあります
皆さんのサーバーや Firebase 通知が

Arabic: 
لنهتم بالكثير من هذا العمل لك.
وتطبيقنا swizzled
قد سجّل
للإشعارات عن بعد بطريقة
رمز الجهاز.
آسف، الناسخ.
نستقبل رمز APNs الخاص بنا
ونرسله إلي FCM
في مقابل رمز جهاز FCM.
بالمناسبة، لقد كذبت عليك قليلًا.
هذا فعليًا يُعرف بـ
instance ID token
ولو نظرتَ إلي وثائقنا
أو في خرج Xcode
ستري أنها تشير علي هذا النحو.
لكن، يمكن أن تعتقد أنها في الأساس
رمز جهاز FCM.
لأن هذا أساسًا ماتكون عليه.
هناك ملاحظة مهمة
نحن لا نقوم بـ Swizzle
حيث أننا نطلب من المستخدم
السماح للإشعارات
أليس كذلك؟
وهذا هو العمل الذي كـمُطور
تريد فعله، عند نقطة محددة جداً
في تطبيقك
عندما يشير مستخدمك بـ 
نعم
سأقوم بالظغط علي "موافق"
عندما تجلب صندوق الأذونات.
لذلك، نحن لانفعل هذا آليًا.
مازلت عليك أن تفعل هذا
كمُطور تطبيقات.
دعونا نتحدث عن
تصحيح الأخطاء
كما ترون، هناك العديد من الأنظمة
التي تتحدث لبعضها
أليس كذلك؟
خادمك، أو إشعارات Firebase

Portuguese: 
para cuidar de boa parte disso por você.
E nosso aplicativo de troca
realmente registrou
as notificações remotas
com o método de token.
Desculpe-me, transcritor.
Recebemos nossos tokens do APNs,
enviamos para o FCM
em troca do token do FCM.
E a propósito,
eu menti um pouco para vocês.
Na verdade, isso é conhecido
como instância de token de identificação.
E se você olhar a documentação
ou na saída do Xcode,
você verá que estará referenciado assim.
Mas você pode pensar nele
como um token do FCM.
Porque é praticamente o que ele é.
Uma observação importante
é que não trocamos nenhum método
onde pedimos ao usuário por tipos
de permissão de notificações, certo?
É o trabalho que um desenvolvedor de apps
quer fazer em um certo momento no app,
quando o usuário indicar "sim",
clicarei "Aceitar"
quando aparecerem as permissões.
Não fazemos automaticamente,
você terá que fazer isso
como desenvolvedor de aplicativos.
Vamos falar de correção de erros.
Como podem ver, há muitos sistemas
que se comunicam entre si.
Seu servidor ou o Firebase Notifications

Spanish: 
para encargarnos de mucho de este trabajo
por ti.
Y nuestra aplicación swizzled
se registró para notificaciones remotas
con el método del token de dispositivo.
Lo siento, transcriptor.
Recibimos nuestro token de APNs,
lo enviamos a FCM
a cambio del token de dispositivo
de FCM.
Y dicho sea de paso, les he mentido
un poco.
Esto en realidad es conocido como
un instance ID token
y si miran en nuestra documentación
o en la emición del códigoX,
lo verán referenciado de esa manera.
Pero pueden pensar en ello
como un token de dispositivo de FCM
porque eso es básicamente lo que es.
Una observación importante, por cierto,
es que no referenciamos ningún método
en el que pedimos al usuario algún permiso
para notificaciones.
Ese es trabajo que tú como desarrollador
de una app
querrás hacer en un punto específico
de tu app
cuando tu usuario haya indicado, si,
aceptaré cuando presentes la caja de
permisos.
No lo hacemos automáticamente.
Todavía tienes que hacerlo tú
como desarrollador de una app.
Hablemos de depuración.
Como pueden ver, hay muchos sistemas
que hablan entre ellos.
Tu servidor o las Notificaciones
de Firebase

Indonesian: 
Server Anda atau Firebase Notification
bicara ke FCM,
lalu ke APNs, yang kemudian
bicara ke perangkat Anda.
Di perangkat, iOS bicara ke aplikasi Anda.
Di sinilah banyak kesalahan bisa terjadi.
Secara umum, jika salah satu
dari proses ini terganggu,
itu akan sulit dideteksi.
Saya kirim notifikasi, tapi tak terjadi
apa pun di perangkat saya, ada kesalahan.
Paling sulit
untuk melakukan debug pada ini.
Ketika ini terjadi-- Saya lihat
banyak yang mengangguk. Ya.
Solusi terbaik adalah
menguraikannya satu per satu.
Telusuri kembali prosesnya.
Mulailah fokus pada bagian ini,
yaitu aplikasi Anda tak dapat izin
dari iOS untuk menampilkan notifikasi.
Cara terbaik untuk mencari kesalahannya
yaitu implementasikan lagi metode swizzle
yang tadinya tak diperlukan.
Jadi, tak perlu diimplementasikan.
Tapi untuk debugging, saya masukkan ini
agar bisa melakukan printf debugging.
Misal,
pada didRegisterforRemoteNotification,
cetak versi yang bisa dibaca
dari token perangkat
karena akan dibutuhkan
di tahap berikutnya

Korean: 
FCM에 말하고
이건 다시 APN에 말하고
이건 기기에 말하는 겁니다
그리고 정말 기기에서는
iOS가 앱에 말하게 되는 겁니다
그리고 이건 뭔가 잘못되기
좋은 장소인 겁니다
일반적으로 말해서 이 체인의
어느 부분이 망가지더라도
불가사의한 것으로 확연히 드러나요
알림을 보냈는데
기기에는 아무 일도 일어나지 않는
종류의 오류로 말입니다
디버그하기 가장 짜증나는 일입니다
따라서 이런 일이 발생하면 말이죠
많은 분들이 고개를 끄덕이시네요
가장 좋은 해결책은 기본적으로
하나씩 분석하기 시작하는 겁니다
체인에서 반대로 올라가는 겁니다
여기 이 부분에 초점을 두어 시작하세요
아마도 앱이 iOS로부터
알림을 표시하라는
명령을 받지 않았을 뿐인 겁니다
무슨 일이 발생하고 있는지
알아내는 최고의 방법은
실행하지 않아도 됐던
혼합되는 방식을 다시 실행하는 겁니다
이것을 굳이 실행할 필요는 없어요
하지만 디버깅이 목적이라면
디버깅을 프린트하기 위해
이것을 실행하는 편이 좋아요
예컨대 원격 알림을 위한
didRegister에서
기기 토큰의 읽을 수 있는
버전을 프린트해 보세요
부분적으로 향후 단계에서
필요하기 때문이기도 하지만

Japanese: 
FCM に送信し 
それが次に APN に送信し
それが皆さんのデバイスに送信します
また デバイス上では本当は
iOS がアプリに送信しています
これらがうまくいかなくなる多くの場所です
一般的に言えばこのチェーンの
どの部分が壊れても
それは一種の不思議な--
私は彼に通知を送ったが
デバイスには何も起こらなかった
--のようなエラーとして現れます
デバッグには1番イライラすることです
だからこれが起こると--
頷いてる人が多いですね
ええ
１番いいのは基本的に
１つずつ克服し始めることです
チェーンを逆に作業してです
ここの部分に注力して始めます
アプリが iOS から通知を表示する許可を
貰わないところですね
ここで起きてることを理解する１番の方法は
実装する必要のなかったスウィズル
メソッドを再実装することです
それらを実装することは必要なくても
デバッグ目的には
printf デバッグができるように
これをいれたいのです
例えば リモート通知用の登録時に
デバイストークンの可読バージョンを
表示します
１つには
これを後の段階で必要になるので

Portuguese: 
comunica-se com o FCM,
comunica-se com o APNs,
e comunicam-se com o dispositivo.
E no dispositivo, você terá o iOS
se comunicando com o aplicativo.
E são em todos esses lugares
que as coisas podem dar errado.
Generalizando,
se alguma parte da sequência romper,
ela se manifesta como algo misterioso,
eu envio uma notificação
e então nada acontece no dispositivo,
um tipo de erro,
que é o mais frustrante para consertar.
Quando isso acontece...
estou vendo alguns acenando.
É.
A melhor coisa a fazer
é separar peça por peça.
Trabalhar na sequência de trás.
Começaremos focando nessa parte aqui,
em que seu aplicativo
talvez não tenha obtido
permissão do iOS para exibir notificações.
O melhor jeito de descobrir
o que acontece,
é reimplementar os métodos de troca
que você não tinha que implementar.
Não é necessário implementá-los.
Mas se é para corrigir erros,
gosto de incluí-los para que eu possa
corrigir erros da função printf.
Assim, no momento do registro
de notificações remotas,
vá em frente e imprima
versão para leitura do token,
em parte porque precisará depois,

Chinese: 
你的Firebase通知服务器与FCM对话
FCM与APNs对话
APNs与设备对话
而在设备上
iOS则与你的app对话
这么多步骤
事情很容易出错
一般而言
这条链的任何一步断了
都会导致消息发送失败
我发送了通知
设备上却什么都没有
明显是出错了
要排查故障也是很麻烦
我看见有很多人点头了
这种情况发生的时候
最好的方法是
逐步分解步骤
从链条的后面往回看
首先关注的应该是
你的app也许还没有得到iOS的允许
还不能显示通知
所以要搞清楚到底哪里出错了
最好是重新应用前面的方法
当然 
你不是一定要用
但是为了排除故障
才选择做的这一步
例如说
它的确注册了远程通知
那就继续打印一个可读版的设备令牌
部分原因是它在之后会有用

Arabic: 
تتحدث إلي FCM والتي بعد ذلك
تتحدث إلي APNs
ثم بعد ذلك تتحدث إلي جهازك.
وبالفعل، قد حصلت علي iOS في جهازك
يتحدث إلي تطبيقك.
وهذه هي الكثير من الأماكن
حيث يمكن أن تسوء فيها الأمور.
وبشكل عام، لو توقف أي جزء 
من هذه السلسلة
فمن الصعب الكشف عنه
أرسلتُ له إشعاراً، وبعد ذلك
لاشيء حدث في جهازي..
نوع من الخطأ
والذي من الصعب جداً تصحيحه.
لذلك، عندما يحدث هذا..
أري مجموعة كاملة تهز رأسها
نعم.
أفضل شيء لتفعله في الأساس
أن تبدأ بإيقاف هذا جزء بجزء
نوعٌ من العودة للوراء في السلسلة.
ابدأ بالتركيز علي هذا الجزء هنا
حيث قد يكون تطبيقك
لم يحصل للتو علي
اذن من iOS لعرض الإشعارات.
اذاً، أفضل طريقة لعرض
مايحدث هنا
هو اعادة تنفيذ
swizzled methods
التي لم يتوجب عليك تنفيذها
لذلك، ليس من الضروري تنفيذها.
ولكن لأغراض
تصحيح الأخطاء
أود أن أضع هذا فيما يمكنني أقوم ببعض
printf debugging.
علي سبيل المثال، لتُسجل 
للإشعارات عن بعد
استمر، واطبع نسخة قابلة للقراءة
لرمزجهازك
لأنك ستحتاج هذا في خطوة متأخرة

Spanish: 
hablan con FCM, que luego habla
con APNs,
que luego habla con tu dispositivo.
Y en realidad en el dispositivo
tienes a iOS hablando con tu app.
Y hay muchos lugares en los que las cosas
pueden salir mal.
Y hablando en general, si alguna parte
de la cadenas se rompe,
se manifiesta como un misterioso error
del tipo
le envié una notificación
y luego nada sucedió en mi dispositivo,
que son los más frustrantes de depurar.
Así que cuando esto sucede- veo a muchos
asintiendo.
Sí.
Lo mejor que puedes hacer
es romper esto pieza por pieza.
Trabajar en reversa en la cadena.
Así que comienza enfocándote en esta parte
de aquí,
donde tu app quizá no ha obtenido permiso
de iOS
para exhibir notificaciones.
La mejor forma de darse cuenta
de qué sucede
es re-implemetar esos swizzled methods
que no debías implementar.
No es necesario implementarlos,
pero para propósitos de depuración
me gusta hacer esto para poder hacer
depuración printf.
Por ejemplo, en registrarse
para notificaciones remotas,
adelántate e imprime una versión legible
de tu token de dispositivo,
en parte porque necesitas esto luego
pero también puedes asegurarte

English: 
talks to FCM, which then
talks to APNs, which
then talks to your device.
And really on the device, you've
got iOS talking to your app.
And these are a lot of places
where things can go wrong.
And generally speaking, if any
part of this chain is broken,
it manifests itself as
a kind of mysterious,
I sent him a
notification, and then
nothing happened in my
device, kind of error,
which are the most
frustrating to debug.
So when this happens-- I see a
whole bunch of people nodding.
Yeah.
The best thing to
do is basically
start breaking this
down piece by piece.
Kind of work backwards
in the chain.
So start by focusing
on this part here,
where your app maybe
just hasn't quite
gotten permission from iOS
to display notifications.
So the best way to figure
out what's going on here
is re-implement those
swizzled methods
you didn't have to implement.
So it's not necessary
to implement them.
But for debugging
purposes, I like
to put this in so I can
do some printf debugging.
So for instance, in did register
for remote notifications,
go ahead and print out a
readable version of your device
token, partly because you'll
need this in a later step,

Spanish: 
de que se vea como un token
de dispositivo
y no sea nula o algo así.
También puedes asegurarte de que tu app
está preparada para mostrar alertas
o sonidos en este punto.
Este puede ser un buen lugar
para verificar dos veces
y asegurarte de que sí, tienes permiso
para exhibir notificaciones.
Y si tu aplicación falló al registrar
el método,
adelántate e imprime ese error.
Porque eso puede darte una buena pista.
Así que la mayoría de los errores
que encuentres en este punto
son del tipo
estoy muy avergonzado de haber tenido
este error.
Así que son cosas como olvidar llamar
para registrarse para
notificaciones remotas,
no llamar a solicitar autorización
si no esperas una notificación visible,
no probarlo en un dispositivo real,
u olvidarse de permitir las notificaciones
en tus autorizaciones
en tu proyecto de códigoX.
Lo se, errores muy obvios y simples.
Pero sin añadir todos esos mensajes
de error
en tu consola, puede ser muy fácil
pasarse uno o dos de esos.
Puedo haber hecho esto en algún punto.
Pero asumiendo que todo está bien,
enfócate en la siguiente parte aquí,

Japanese: 
ですが必ずこれをゼロとかではなく
デバイストークンらしくできます
また アプリが実際にこの時点で
警告とか音を出す用意をしておきます
これは二重チェックに良い場所で
通知を表示する許可があると確認します
アプリで登録メソッドに失敗したら
そのエラーを表示させてください
するとかなり良い手がかりが得られるでしょう
この時点でとらえるエラーの大部分は
このエラーになって
本当に恥ずかしいみたいなものです
つまり リモート通知の登録呼び出しを
忘れるみたいなことで
可視の通知を期待してるなら
リクエスト認証を呼び出していないとか
本物のデバイスで試していないとか
Xcode プロジェクトで資格での
通知を可能にするのを忘れるとか
非常に明白な単純なエラーなんですね
ですが これらのエラーメッセージを
コンソールに付けなければ
これらの１つや２つを簡単に見落とします
私はどこかでこれをしたかもしれません
だがこれが全部大丈夫だと仮定して
次のここに着目しましょう

English: 
but you can also make sure
this looks like a device token
and isn't nil or something.
You can also make sure
that your app is actually
prepared to show alerts
or sounds at this point.
This might be a good place
to double check and make sure
that, yes, I really
have permission
to display a notification.
And in your application did fail
to register method, go ahead
and print out that error.
Because that might give
you a pretty good clue.
So most of the errors that
you'll catch at this point
are the, I'm really
embarrassed that I got
this error, sort of variety.
So it's things like
forgetting to call
register for remote
notifications,
not calling request
authorization if you're
expecting a visible
notification,
not testing on a real
device, or forgetting
to enable notifications
in your entitlements
in your Xcode project.
I know-- very obvious,
simple errors.
But without adding all
those error messages
into your console, it
can be easy to overlook
one or two of these.
I may have done
this at some point.
But assuming all that's OK,
then focus on this next part

Indonesian: 
dan Anda bisa pastikan ini seperti
token perangkat dan tak bernilai nol.
Anda juga bisa pastikan aplikasi Anda siap
untuk menampilkan peringatan
atau suara di tahap ini.
Ini mungkin saat bagus
untuk periksa ulang dan pastikan
kita benar-benar punya izin
untuk menampilkan notifikasi.
Jika aplikasi Anda gagal
mendaftarkan metode,
cetak kesalahan itu.
Sebab itu mungkin akan memberi petunjuk.
Mayoritas kesalahan yang didapati di sini
adalah kesalahan yang membuat malu.
Hal-hal seperti lupa memanggil
RegisterforRemoteNotifications,
tidak memanggil requestAuthorization.
jika Anda mengharapkan
notifikasi yang terlihat,
tidak menguji di perangkat
yang sebenarnya,
atau lupa mengaktifkan notifikasi
di izin dalam project Xcode.
Ini kesalahan jelas dan sederhana.
Tapi tanpa menambahkan
semua kesalahan itu ke konsol,
mudah untuk melewatkan 1-2 kesalahan,
saya mungkin pernah melakukannya.
Tapi berasumsi semua beres,
mari fokus ke bagian berikutnya,

Arabic: 
لكنك أيضًا، يمكنك التاكد أن هذا يشبه
رمز الجهاز
وأنه ليس صفرًا أو أي شيء.
يمكنك التأكد أيضًا أن تطبيقك بالفعل
تم إعداده ليعرض التنبيهات أو الأصوات
عند هذه النقطة.
من الممكن أن يكون هذا موضع جيد
لتفحص مجددًا وتتأكد
نعم، أنا بالفعل أمتلك الإذن
لعرض الإشعار.
وإذا فشل التطبيق الخاص بك
لتسجيل طريقة، استمر
واطبع الخطأ.
لأن هذا قد يعطي لك فكرة جيدة.
لذلك معظم الأخطاء التي
تجدها عند هذه المرحلة
هي بالفعل ما أخجل من فعلها
نوع من التنوع.
اذاً، هذه الأشياء مثل
نسيان أن تطلب التسجيل
للإشعارات عن بعد
ألا تدعو لطلب التصريح
إذا كنت تتوقع إشعاراً مرئيًا
عدم الاختبار علي جهاز حقيقي،
أو تنسي
أن تُمكن الإشعارات
في التراخيص الخاصة بك
في مشروعك Xcode.
أعرف.. هذه أخطاء
واضحة جداً وبسيطة.
لكن بدون إضافة كل
رسائل الأخطاء هذه
إلي وحدة التحكم الخاصة بك
فمن السهل نسيان
واحدة أو اثنين.
ربما أكون فعلت هذا في وقت ما.
لكن لتفترض أن كل شيء تمام،
ثم ركّز في الجزء القادم

Portuguese: 
mas pode garantir
que se parece com um token
e que não está sem nada ou algo assim.
Você também pode garantir
que seu app está preparado
para exibir alertas e sons nesse momento.
Deve ser uma boa hora
para conferir e garantir
que sim, tenho permissão
para exibir uma notificação.
E se seu aplicativo realmente falhar
no método de registro,
vá em frente e imprima o erro.
Porque isso pode fornecer uma ótima pista.
A maioria dos erros
que achará a essa altura,
são aqueles erros,
"Estou envergonhado
por ter dado esse erro", coisas assim.
Coisas como esquecer de solicitar
o registro para notificações remotas,
não solicitar a autorização
se você está esperando
uma notificação visível,
não testar em um dispositivo real,
ou esquecer de habilitar as notificações
dentro dos seus direitos
do seu projeto Xcode.
Eu sei, muito óbvio, erros simples.
Mas se não adicionar
as mensagens de erro ao seu console,
pode ser fácil deixar passar um ou dois.
Eu devo ter feito isso em algum momento.
Presumindo que tudo esteja bem,
foco nessa próxima parte,

Chinese: 
而且你也可以检查这的确是一个设备令牌
而不是空的 
或是其他事物
你还能确认你的app是否
已经准备好显示提醒或声音了
大家还能再次检查
你是否已经获得许可
显示一个通知了
如果你的应用远程通知注册失败
请把这个错误打印出来
这可能给你一些线索 
到底哪里出错了
这个关头出现的大多错误
很尴尬 
我自己也有过这样的错误
其实类型很多
例如忘记调用远程通知注册的函数了
打算发送可见通知时 
忘记请求许可了
没有在实际设备上进行测试
或者在Xcode项目里 
忘记允许通知了
我也知道
这些是很明显很简单的错误
但是如果不在控制台把全部这些错误信息集结起来
很容易忽略其中的一两项
我自己也可能出现过这样的错误
假定前面这些错误都排查了
下一阶段的焦点在于

Korean: 
0 같은 것이 아니라
확실히 기기 토큰처럼
보이도록 할 수 있거든요
또한 이 시점에서 앱이
실제로 경고나 소리를
보여줄 준비가 되었는지도
확실히 할 수 있어요
알림을 표시할 수 있는
허가가 실제로 있다는 것을
다시 한번 확신하기에
좋은 시점일 겁니다
그리고 앱에서 메서드를
등록하는데 실패하면
그 오류를 프린트해 보세요
꽤 좋은 단서를 줄 수도 있거든요
이 시점에서 여러분이 보게 될
오류의 대부분은
조금 부끄럽게도 전 이 오류를
다양하게 경험했어요
예컨대, 원격 알림을
호출하여 등록하는 것을 잊는다거나
보이는 알림을 하고자 할 때
인증을 요청하지 않았다거나
실제 기기에서 테스트하지 않거나
혹은 엑스코드 프로젝트에서
알림 사용을 설정해 두는 것을
잊는 것 등입니다
네, 정말 명백하고 간단한 오류에요
하지만 콘솔에 이 모든
오류 메시지를 추가하지 않으면
이 중 한 두 가지를
간과하기 쉬워요
저도 언젠가 이렇게 했을지도 몰라요
하지만 이 모든 것이
괜찮다는 가정 하에

Korean: 
다음 부분으로 초점을 옮겨보면
APN이 앱에 말하도록 하는 겁니다
파이어베이스 클라우드
메시징을 사용한다고 해서
APN에 직접
이용할 수 없다는 건 아닙니다
여전히 할 수 있고 그것도 괜찮아요
인증서와 APN 기기 토큰만 있으면 되고
여러분이 이미 가지고 있는 것들입니다
이 부분을 검사해보는
몇 가지 방법이 있어요
제 3의 도구가 있다는 건
저도 알고 있어요
하지만 개인적으로 전 노트북에서 바로
cURL 콜을 하는 걸 선호해요
가장 깔끔하고 쉬운 방법입니다
그리고 이젠 APN이
HTTP/2를 지원하니까
이 호출을 하기 조금 더 쉬워졌어요
그리고 제 생각에 더 중요한 것은
반응에서 다시 유용한
무엇인가를 얻는다는 겁니다
이것이 작동하기 위해서는
HTTP/2가 조금 새롭기 때문에
7.43.0 이후 버전의 cURL이 필요해요
그리고 HTTP/2을
지원하는지도 확인해야 합니다
기본값으로는 지원하지 않지만
검색해보시면 될 겁니다
이를 설치하고
업데이트하는 방법이 있어요
또 해야 할 일은 .p12
키를 PEM 파일로
전환하는 일입니다
그리고 다시 한번, 외우지 마세요
그냥 구글 검색하면 알 수 있어요
마지막으로 기기
토큰을 가지고 있어야 해요

Japanese: 
ここでは APN がアプリに送信しています
さて FCM を
使っているからと言って
直接 APN に通信できる訳ではありません
あなたはそれも行えます
それは大丈夫です
必要なのは 証明書と
APS デバイストークンだけです
それは既に持っています
だから この部分をテストする
方法がいくつかあります
サードパーティ製ツールがそこにあり
個人的には ラップトップから直接に
curl 呼び出しをするのが好きなんですがね
それは１番きれいで簡単な方法です
APN が HTTP/2 をサポートしたら
この呼び出しが少し簡単になります
もっと大事なことに レスポンスで
何か役に立つものが戻ります
だからこれが動作するには
HTTP/2 は新しいので
7.43.0 以降の curl 版で
HTTP/2 をサポートするか
確認する必要があります
デフォルトではだめですが
それをググることができます
それのインストールや更新の方法があります
もう１つする必要があるのは
p12 キーを PEM ファイルに
変換することです
これも暗記しなくても
ググれば出てきます
最後にデバイストークンを
取得する必要があります

Chinese: 
让APNs与你的app对话
虽然你是在使用FCM
但这并不代表你不能与APNs直接对话
你还是可以这样做的
完全没有问题
你唯一需要的就是一张证书和一个APNs设备令牌
那你已经有了
这一部分有几个测试方法
我知道有一些第三方工具
但就我个人而言
我喜欢直接在电脑上调用cURL
这是最简便的方法
现在APNs支持HTTP/2了
所以要调用cURL也是更方便了
我认为更重要的是
在输出中要获得一些有用信息
要成功使用这个方法
因为HTTP/2还比较新
你需要一个新版cURL
7.43.0版本或者之后的
可支持HTTP/2的cURL
这并不是系统默认自带的
但是只要谷歌搜索一下就能找到
也有很多安装和升级的方法
还要做的一件事是
将.p12密钥转换成一个PEM文件
大家无需记这一部分
谷歌一下就能找到相关信息
最后
你要获得设备令牌

Spanish: 
que es que tu APNs hable
con tu app.
Ahora, sólo porque uses Firebase Cloud
Messaging
no significa que no puedas hablar
directamente con APNs.
Todavía puedes hacer eso.
Está bien.
Todo lo que necesitas es un certificado
y el token de dispositivo de APNs,
que ya tienes.
Hay algunas formas de probar esta parte.
Se que hay algunas herramientas
de terceros por allí.
Personalmente soy fan de
hacer una llamada cURL
directamente desde el ordenador portátil.
Es la forma mas fácil y limpia.
Y ahora que APNs sostiene HTTP/2
es un poco más fácil realizar esta llamada
y, creo más importante,
recibir una respuesta útil.
Así que para este trabajo, ya que HTTP/2
es nuevo,
querrás una versión de cURL que sea
7.43.0 o posterior
y asegurarte de que soporta HTTP/2.
No lo hace por defecto, pero puedes
buscarlo en Google.
Hay formas de instalarlo, actualizarlo.
La otra cosa que necesitarás hacer
es convertir tu clave .p12
en un archivo PEM.
No memoricen esto.
Búsquenlo en Google y encontrarán esto.
Y finalmente necesitarás tomar
tu token de dispositivo,

English: 
here, which is having
APNs talk to your app.
Now, just because you're
using Firebase Cloud Messaging
doesn't mean you can't
also talk directly to APNs.
You can still do that.
That's fine.
All you need is a certificate
and the APNs device token,
which you already have.
So there's a few ways to kind
of test out this portion.
I know there's some third
party tools out there.
Personally, though, I'm a fan
of just making a cURL call
directly from the laptop.
It's sort of the
cleanest, easiest way.
And now that APNs
supports HTTP/2,
it's a little easier
to make this call
and, I think more importantly,
get something useful
back in the response.
So for this to work, since
HTTP/2 is kind of new,
you're going to want a
version of cURL that's 7.43.0
or later, and make sure
it has support for HTTP/2.
It doesn't by default,
but you can Google it.
There's ways to
install it, update it.
The other thing you're going to
need to do is convert your .p12
key into a PEM file.
And again, don't memorize this.
Just Google it and
you'll get this.
And then finally, you'll need
to grab your device token,

Arabic: 
هنا، حيث لديك APNs 
يتحدث إلي تطبيقك.
الآن، ولأنك فقط تستخدم
سحابة تراسل Firebase 
لا يعني هذه أنك لايمكن أن تتحدث
مباشرة إلي APNs.
بإمكانك فعل هذا.
هذا جيد.
كل ماتحتاج إليه هو شهادة 
ورمز جهاز APNs
والذي لديك بالفعل.
لذلك، هناك عدة طرق
لاختبارهذا الجزء.
أعرف أن هناك بعض الأدوات الخارجية.
شخصياً، رغم ذلك، أنا معجب
من مجرد إجراء دعوة cURL
مباشرة من اللاب توب.
هذه أنظف وأسهل طريقة.
والآن APNs يدعم HTTP/2
ومن السهل قليلًا إجراء
هذا الإتصال
وأعتقد أن الأكثر أهمية هو
الحصول علي
إجابة مفيدة.
ليعمل هذا، وبما أن HTTP/2 جديد
ستريد نسخة 7.43.0 cURL
أو بعد ذلك، وتأكد أنه يدعم HTTP/2.
إنه ليس افتراضيًا ولكن يمكنك
البحث عنه في Google.
هناك طرق لتثبيته وتحديثه.
الشيء الآخر الذي ستحتاج أن تفعله
هو تحويل مفتاح P12 الخاص بك
إلي ملف PEM.
ومرة أخرى، لاتحفظ هذا.
فقط ابحث عنه في Google 
وستحصل عليه.
وفي النهاية، ستحتاج أن تحصل
علي رمز الجهاز

Indonesian: 
yaitu membuat APNs
berbicara ke aplikasi Anda.
Menggunakan Firebase Cloud Messaging
tidak berarti Anda tak bisa
bicara langsung ke APNs.
Itu masih bisa dilakukan. Tak masalah.
Anda hanya sertifikat
dan token perangkat APNs,
yang sudah Anda punya.
Ada beberapa cara untuk uji bagian ini.
Saya tahu
ada perangkat lunak pihak ketiga.
Saya sendiri suka memanggil cURL
langsung dari laptop.
Itu cara yang mudah dan sederhana.
Kini APNs mendukung HTTP/2,
lebih mudah melakukan panggilan ini,
dan, yang lebih penting menurut saya,
mendapat respons berguna.
Agar ini berfungsi, karena HTTP/2 baru,
Anda perlu versi cURL 7.43.0
atau di atasnya
dan pastikan itu mendukung HTTP/2.
Secara default, tak bisa,
tapi cari saja di Google.
Ada cara untuk memasang
dan memperbaruinya.
Hal lain yang Anda perlukan
yaitu mengonversi kunci .p12 ke file PEM.
Sekali lagi, jangan hapalkan ini.
Cari saja di Google, akan Anda dapatkan.
Terakhir, ambil token perangkat Anda,

Portuguese: 
que é fazer o APNs se comunicar
com o seu aplicativo.
Só porque está usando
o Firebase Cloud Messaging
não significa que não possa
se comunicar diretamente com o APNs.
Ainda pode fazer isso. Tudo bem.
Tudo que você precisa
é do certificado e do token do APNs,
que você já tem.
Há algumas maneiras de testar essa parte.
Sei que existem ferramentas
disponíveis por aí.
Eu sou fã de fazer a solicitação de cURL
diretamente do laptop.
É o jeito mais limpo e fácil.
E agora que o APNs suporta HTTP/2,
é um pouco mais fácil solicitar
e mais importante, conseguir algo útil
a partir da resposta.
Para que isso funcione,
já que HTTP/2 é meio novo,
vai querer a versão do cURL
que seja a 7.43.0
ou posterior,
para garantir que suporte o HTTP/2.
Por padrão, não suporta,
mas pode pesquisar no Google.
Há maneiras de instalar e de atualizar.
Outra coisa vai ser converter
sua chave .p12 em um arquivo PEM.
Não memorize isso.
Pesquise no Google e terá acesso.
Finalmente você precisará
pegar o seu token,

Portuguese: 
o dispositivo que deseja se comunicar,
que você pode fazer
se tiver implementado o registro
para as notificações remotas
que eu estava falando antes.
Quando tiver toda a informação,
você pode solicitar um cURL como esse.
Começa com um "olá" muito simples.
Com essa solicitação,
você vai incluir um certificado.
Isso era o que você tinha
que ter gerado antes,
que permite comunicação
com o servidor.
Vai querer que o token seja o ponto final.
E deve querer adicionar o ID de pacote
como o tópico de APNs aqui.
A propósito, totalmente diferente
dos tópicos de Firebase Cloud Messaging.
Desculpe se usei muito o termo.
Mas se tudo correr bem,
você conseguirá ver a notificação
aparecendo no dispositivo de teste.
E se tudo estiver bem com o dispositivo,
nada será recuperado.
Se obtiver uma resposta,
provavelmente é um bom indicativo
do que é a mensagem de erro
ou do que é o problema.
Parece ser um problema de token ruim.
Aquele token do APNs
provavelmente não está correto.
E lembre-se que você está usando
tokens de APNs, não de FCM.
O fato de o token não ser o tópico

Japanese: 
送信したい対象のデバイスです
これは さっき話していた--
didRegisterForRemoteNotifications
メソッドを実装すればできます
その情報が全てあれば
このように curl 呼び出しができます
非常に簡単なハローワールドで
始めます
この呼び出し内に証明書を含めます
これは先に生成する必要があった
サービスに送信するものです
エンドポイントとして
デバイストークンが必要です
そしておそらくバンドル ID を
ここの APN トピックとして
追加する必要があるでしょう
ところで FCMトピックスと
全く違っています
その用語が過負荷で済みません
だが万事うまく行けば
通知がテストデバイスに表示されて
見える筈です
そして端末側で万事うまく行けば
何も戻らないでしょう
もしレスポンスが戻るなら
それはどんなエラーメッセージか又は
実際どんな問題かについて
よく示すでしょう
だから悪いデバイストークンは
そんな風になります
その APN デバイストークンは
おそらく正しくないでしょう
そして この段階で是非覚えてください
FCN トークンではなく
APN デバイストークンを使ってるのだと
DeviceTokenNotForTopic は実際

Spanish: 
el dispositivo de destino
al que quieres hablarle,
lo cual puedes hacer si has implementado
el registro para el método
de notificaciones remotas
del que hablaba antes.
Una vez que tienes toda esa información,
puedes hacer una llamada cURL así.
Comienza con un simple "hola mundo"
y en esta llamada incluirás
un certificado.
Esto es lo que debiste generar antes
que te deja hablar con el servicio.
Querrás la ficha de dispositivo
como punto final.
Y probablemente querrás añadir
el bundle ID
como el tema de APNs.
Por cierto, completamente diferente
a los temas
de Firebase Cloud Messaging.
Disculpen que ese término
quedó sobrecargado.
Pero si todo ha salido bien, deberías
ver aparecer la notificación
en tu dispositivo de prueba.
Y si todo ha salido bien
en el lado terminal
no recibirás nada de vuelta.
Si recibes una respuesta,
eso será una buena indicación
sobre cuál es el mensaje de error
o el problema.
Así que suena a un mal token
de dispositivo.
Ese token de dispositivo de APNs
probablemente no está bien.
Y recuerda que en este paso utilizas
tokens de dispositivos APN,
no de FCM.
Las fichas de dispositivo no para el tema

Chinese: 
你想要沟通的那部目标设备
这很容易得到
只要你的设备注册了远程通知方法
也就是我早前说的方法
所有信息具备之后
你就可以像这样调用cURL
一开始只是输入很简单的“hello”
在这次调用中
你需要加入一个证书
证书是先前就产生好的了
证书可以让你与服务对话
最终目标是获得设备令牌
而且你可能想要在这里加入
bundle ID 作为APNs主题
但是这个主题与FCM主题是完全不同的
抱歉啊
我这么频繁地提起FCM主题这个词
一切进展顺利的话
通知会显示在测试设备上
如果终端一切正常的话
理应是不会返回结果的
但如果确实有结果返回的话
那很可能显示的是
错误信息
或者实际出错的地方
听起来就像是一个错误的设备令牌
APN设备令牌可能出错了
请记住 在这一步 
你使用的是APNs设备令牌
而不是FCM设备令牌
如果返回的信息是 "Device token not  for topic"
(设备令牌不适用于主题)

Arabic: 
الجهاز المطلوب والذي تريد
أن تتحدث إليه
والذي يمكنك القيام به إذا قمت بتنفيذ
التسجيل لطريقة الإشعار عن بعد
والتي تحدثت عنها في وقت سابق.
لذلك بمجرد أن تمتلك
هذه المعلومات
يمكنك عمل اتصال cURL
مثل هذا.
ابدأ ببساطة
مرحباً أيها العالم
وخلال هذا الإتصال، ستُرفق الشهادة.
هذا هو الشيء الذي
يجب تكوينه قبل
أن يتيح لك التحدث إلي الخدمة.
وأنت ستريد رمز الجهاز
بإعتباره آخر شيء
وبعد ذلك، من المحتمل أن تريد
إضافة bundle ID مثل موضوع
APNs هنا.. بالمناسبة
مختلف تماماً عن موضوعات
سحابة تراسل Firebase 
آسف، لتكرار
علي هذا المصطلح.
لكن، لو سار كل شيء تمام
يجب أن ترى ظهور الإشعار
علي الجهاز الذي تختبره.
ولو صار كل شيء تمام
في النهاية
لن تحصل على شيء.
لو حصلت علي استجابة
سيكون هذا مؤشر جيد
ماهي رسالة الخطأ أو المشكلة الحقيقية.
رمز الجهاز السيء هو مايبدو عليه.
أن رمز جهاز APNs 
علي الأرجح غير صحيح.
وتذكر عند هذه الخطوة أنك تستخدم
رموز جهاز APNs
وليس رموز FCM.
رمز الجهاز ليس لهذا الموضوع

English: 
the target device
you want to talk to,
which you can do if you
implemented that did
register for remote
notifications method
that I was talking
about earlier.
So once you have all
that information,
you can make a cURL
call like this.
Start with sort of a
very simple hello world.
And within this call, you're
going to include a certificate.
This is the thing you had
to generate earlier that
lets you talk to the service.
You're going to want the
device token as the endpoint.
And then you're
probably going to want
to add the bundle ID as the
APNs topic here-- by the way,
completely different than
Firebase Cloud Messaging
topics.
Sorry that that
term got overloaded.
But if all has gone well, you
should see the notification
show up on your test device.
And if all has gone well
on the terminal side,
you'll get nothing back.
If you do get a
response back, that
will probably be
a good indication
as to what the error message or
what the problem actually is.
So bad device token is
what it sounds like.
That APNs device token
probably isn't right.
And do remember at this step
you're using APNs device
tokens, not FCM ones.
Device token not
for topic actually

Indonesian: 
perangkat target
yang ingin Anda ajak bicara.
Itu bisa lakukan jika Anda implementasikan
metode didRegisterforRemoteNotifications.
yang saya bicarakan tadi.
Begitu dapat semua info itu,
Anda bisa buat panggilan cURL seperti ini.
Mulai dengan hello world.
Dalam panggilan ini, Anda akan
memasukkan sertifikat.
Inilah yang Anda harus buat sebelumnya
untuk memungkinkan Anda bicara ke layanan.
Anda perlu token perangkat
sebagai endpoint.
Mungkin Anda juga perlu menambah
bundleID sebagai apns-topic.
Ini berbeda dari topik
Firebase Cloud Messaging.
Maaf, terlalu banyak istilah.
Tapi jika semua beres,
Anda akan lihat notifikasinya
muncul di perangkat yang Anda uji.
Jika semua beres di sisi terminal,
tak akan ada respons.
Jika ada respons, mungkin itu indikasi
tentang pesan kesalahan
atau apa masalah sebenarnya.
Sepertinya token perangkatnya buruk.
Token perangkat APNs-nya
mungkin tak tepat.
Ingatlah, di tahap ini, Anda menggunakan
token perangkat APNs, bukan FCM.

Korean: 
이것이 소통해야 하는 타겟 기기이고
원격 알림을 위한 didRegister 방법을
시행하면 가능합니다
제가 아까 말씀드린 대로 말입니다
일단 이 모든 정보가 있으면
이렇게 cURL 호출을 할 수 있어요
아주 간단한 일종의 인사로 시작하세요
이 호출 내에서
인증서를 포함하는 겁니다
서버에 말할 수 있도록 해주는 것으로
이미 이전에 만들었어야 하는 겁니다
엔드포인트에서
기기 토큰이 필요할 겁니다
그리고 나면 아마도 여기서
APN 토픽으로 번들 ID를
추가해야 할 겁니다
그런데 이건 파이어베이스
클라우드 메시징 토픽과 완전히 달라요
용어가 과부하돼서 죄송해요
하지만 모든 게 다 잘 됐다면
테스트 기기에서
알림을 볼 수 있을 겁니다
그리고 터미널 사이드에서
모든 게 다 잘 됐다면
아무것도 돌아오지 않을 겁니다
반응이 돌아온다면
그건 아마 오류 메시지가 뭔지
혹은 실제 문제가 뭔지를
잘 알려주는 지표가 되는 겁니다
따라서 나쁜 기기 토큰이란
말 그대로에요
그 APN 기기 토큰이 잘못됐다는 거죠
또 이 단계에서 FCM이 아닌
APN 기기를 사용하고 있다는
사실을 명심하세요
토픽용 기기 토큰이 아니라는 것은 사실

Portuguese: 
pode ser um bom sinal
de certificado errado,
então confira se você tem
o certificado correto,
se está usando no local certo,
correção de erros vs. produção.
Mas se ainda está recebendo
alguma mensagem de erro
mas nada aparece no seu dispositivo,
certifique-se de que você tem permissão
para exibir notificações
com sons e janelas.
Confira no seu código e nas configurações.
E se o app estiver em primeiro plano,
certifique-se de que fez o código
para exibir a notificação.
Porque, novamente,
isso não acontece no iOS.
No entanto, no iOS X fizeram isso ser
muito mais fácil.
Se você solicitar completionHandler.alert
no centro de notificações de usuário,
será mostrado
com o método de conclusão,
que basicamente diz ao iOS,
"Quer saber?
Sei que o app está em primeiro plano,
mas vá em frente e exiba esse alerta".
E o iOS fará isso por você.
Isso é muito bom.
Certamente isso ajuda
nos testes e no desenvolvimento.
Mas se tudo isso funcionar,
pode ir ao próximo passo,
que é testar a parte do FCM.
E novamente, isso é uma coisa
que tem melhor resultado
com solicitação cURL.

Indonesian: 
DeviceTokenNotForTopic adalah
tanda bahwa sertifikat Anda salah.
Pastikan sertifikat Anda tepat.
Anda gunakan di environment
yang tepat, debug atau production.
Jika masih tak ada pesan kesalahan,
tapi tak muncul apa-apa di perangkat,
pastikan Anda punya izin
untuk menampilkan notifikasi
dengan suara dan tampilan.
Periksa pada kode dan pengaturan.
Jika Aplikasi berjalan di latar depan,
pastikan Anda menulis kode
untuk menampilkan notifikasi itu
karena, sekali lagi, ini tak diatur
secara default di iOS.
Meskipun di iOS X, ini lebih mudah.
Jika Anda memanggil
completionHandler.alert
di pusat notifikasi pengguna,
akan muncul metode completionHandler,
yang memberi tahu iOS,
"Saya tahu aplikasi ini di latar depan,
tapi tampilkan peringatan ini."
Lalu iOS akan melakukannya
untuk Anda. Itu bagus.
Ini membantu menguji dan mengembangkan.
Jika semua berhasil, Anda bisa
beralih ke tahap berikutnya,
yaitu menguji bagianFCM.
Sekali lagi, ini bisa diselesaikan
paling baik dengan panggilan cURL.

Spanish: 
pueden ser una buena señal de que tienes
el certificado erróneo,
así que verifica que tengas
el certificado correcto,
que lo utilizas para el ambiente correcto,
depuración versus producción.
Pero si sigues sin recibir un mensaje
de error
pero nada se muestra en el dispositivo,
asegúrate de que tienes permiso
para exhibir notificaciones
con sonido y señales.
Verifica eso en tu código y en tus
configuraciones.
Además, si tu aplicación está funcionando
en primer plano,
asegúrate de haber escrito algún código
para mostrar esa notificación.
Porque eso no sucede por defecto en iOS.
Aunque en iOS 10 lo hicieron
mucho más fácil.
Si llamas a completionHandler.alert
tu centro de notificaciones del usuario
se presentará
con el método de manejador de finalización
que básicamente le dice a iOS
Sé que tu aplicación está en primer plano,
pero adelántate y exhibe
esta alerta igualmente,
e iOS lo hará por ti.
Y eso es muy bueno.
Y ciertamente ayuda para probar
y desarrollar.
Pero si todo esto funciona,
entonces puedes pasar al siguiente paso,
que es probar la porción FCM.
Esto es algo que puede conseguirse mejor
con una llamada cURL.

Chinese: 
这表示你的证书可能出错了
请再次检查你的证书是正确的
你使用的环境也是正确的
排除故障 vs 产出
但是如果并没有显示错误信息
设备上却也显示不出通知
请再次检查你已经获得了允许
以声音或者提醒声音的方式显示通知
请在代码和设定里进行双重检查
同时 如果你的 app是在前台运行
请确保你已经编写了相关代码
在前台显示通知
因为iOS是不会默认显示的
尽管在iOS X中
这步工作要简单得多
如果你在用户通知中心调用
completionHandler(.alert)
那就相当于告诉iOS
你知道吗
你的app是在前台的
但是请继续显示这个提醒
iOS就会为你完成相关工作
非常方便
这肯定也会方便前期测试与开发
如果前面一切正常的话
就可以进入到下一步了
就是测试FCM
再次强调
最好将测试FCM与调用cURL结合起来

Japanese: 
証明書がまちがっているという
良い印かもしれません
だから証明書が正しいかよく確認してください
適切な環境にそれを使います
デバッグか実稼働か
だがそれでもエラーメッセージが
返らない場合
何もデバイスに表示されない場合は
音とバナーの通知を表示する許可があると
余分に確認してください
コードと設定の両方で
それを確認してください
更に アプリが前面で実行していれば
その通知を実際に表示するコードを
書いてあることを確認してください
これも又 iOS のデフォルトでは
おこらないのでね
iOS X ではこれがずっと簡単に
なっているんですが
completionHandler.alert を
userNotificationCenter 
willPresent 内に
withCompletionHandler 
メソッドで呼び出せば
それが iOS に伝えます
「あのね アプリが前面にあると
知ってるよ」
「でもとにかくこの警告を表示してくれ」と
そして iOS はそうしてくれます
それは本当に嬉しいです
それはテストと開発に確かに役立ちます
だがこれ全部が動くなら
次の段階に移れます
それは FCM 部分のテストです
これも実際 curl 呼び出しで
最高によく達成できます

Arabic: 
ويمكن أن تكون علامة جيدة أنك
لديك شهادة خاطئة
لذلك تأكد مرتين أن لديك
شهادة صحيحة
تستخدمها للمكان الصحيح
تصحيح مقابل إنتاج.
ولكن اذا كنت لاتزل تحصل علي
عدم وجود رسالة خطأ
ولكن لايظهر شيء في أعلي الجهاز
ضاعف تاكدك أنك
لديك الإذن لعرض الإشعار
مع الصوت واللافتات.
تأكد أن كليهما في البرمجة
وفي الضبط الخاص بك.
أيضاً، إذا كان تطبيقك
يعمل في الأمام
تأكد أنك كتبت بعض البرمجة
لتعرض الإشعار فعلياً.
لأن هذا مرة أخري لايحدث تلقائياً
علي iOS.
بالرغم من أنه في iOS X
جعلوا هذا أسهل كثيرًا.
إذا قمتَ بطلب
completionHandler.alert
في مركز إشعار مُستخدمكَ سيعرض
بطريقة معالجة الإكتمال التي تخبر iOS
مرحباً..انت عارف؟
أنا أعرف أن تطبيقك في المقدمة
لكن استمر واعرض هذا التنبيه
علي أي حال
و iOS سيفعل هذه لك.
في الحقيقة هذا جيد.
إنه بالتأكيد يساعد في الإختبار والتطوير.
لكن الآن، إذا كان كل هذه يعمل
يمكنك الانتقال للخطوة التالية
والتي هي اختبار جزء FCM
ومرة أخرى، في الحقيقة هذا شيء
يمكن إنجازه بـطلب cURL.

Korean: 
잘못된 인증성을 가지고 있다는
좋은 징후일 수도 있으니
제대로 된 인증서인지
다시 한번 확인해 보세요
제대로 된 환경에서
사용하고 있는지 말이죠
즉 디버그인지 생산인지 보는 겁니다
하지만 여전히 오류 메시지는
돌아오지 않으면서
기기에 아무 것도 나타나지 않는다면
소리와 배너 알림을 나타낼 수 있는
허락을 받았는지 다시 한번
확인하세요
코드와 설정 모두에서 확인해보세요
그리고 앱이 전면에서 작동되고 있다면
그 알림을 실제로 보여주게 하는
코드를 적었는지 확인하세요
이것은 iOS에서 기본값으로
일어나지는 않거든요
iOS X에서는 훨씬
쉽게 만들긴 했지만 말입니다
completionHandler.alert를
호출해서
사용자 알림 센터에서
완성 핸들러 방법으로 나타낸다면
그것은 기본적으로
iOS에게 이렇게 말하는 겁니다
앱이 전면에 있다는 것은 알지만
어쨌든 가서 이 경고를
나타내라고 하는 거죠
그럼 iOS는 그렇게 할 것이고
그것도 괜찮아요
확실히 점검과 개발에 도움이 됩니다
이제 이 모두가 작동한다면
다음 단계로 넘어갈 수 있어요
FCM 부분을 점검하는 겁니다
다시 한번 말씀 드리지만, 이것은 사실
cURL 호출을 이용해서
가장 잘 성취될 수 있어요

English: 
might be a good sign that you
have the wrong certificate,
so double check you've
got the right certificate,
you're using it for
the right environment,
debug versus production.
But if you're still getting
back no error message
but nothing is showing
up on the device,
do make doubly
extra sure that you
have permission to
display notification
with sound and banners.
Check that both in your
code and in your settings.
Also, if your app is
running in the foreground,
make sure you've written
some code to actually display
that notification.
Because again, this doesn't
happen by default on iOS.
Although in iOS X, they made
this a whole lot easier.
If you call
completionHandler.alert
in your user notification
center will present
with completion handler method,
that basically tells iOS, hey,
you know what?
I know your app is
in the foreground,
but go ahead and display
this alert anyway,
and iOS will do that for you.
And that's really nice.
It certainly helps for
testing and development.
But now if all this
is working, then you
can move on to the
next step, which
is testing the FCM portion.
And again, this is
actually something
that can best be accomplished
with a cURL call.

Spanish: 
Básicamente necesitarás dos cosas.
Necesitarás la clave del servidor,
la cual puedes encontrar en la consola
de Firebase
en la parte marcada como
clave de servidor.
Y luego conseguir el token de dispositivo
de FCM
requiere de llamar al método token
en la instancia de ID singleton.
Esto es lo que necesitas hacer
para conseguir tu token de dispositivo
de FCM.
Y creo que esto se imprime bien.
Este token cambia ocasionalmente.
En particular, creo que cambia
cuando vas de depurar a producir.
Así que mantén en mente
que querrás
no solo obtener esto siempre,
sino también escuchar por cuando cambia.
Hay notificaciones NS que se dispararán
cuando esto cambie,
así que puedes escuchar por eso allí.
Ahora una vez que tienen ambas piezas
de información
puede hacer una llamada cURL similar
a FCM.
Tienes tu clave del servidor aquí.
Y este loco hilo gigante es el token
de dispositivo de FCM.
Si todo sale bien, tendrán una respuesta
así.
Esto no significa que todo el mensaje
haya funcionado.
Sólo que hablamos bien con FCM.
Si recibes algo que no se ve como esto
probablemente recibas un útil mensaje
de error

Japanese: 
基本的に必要なのは２つです
サーバーキーが必要になり
それは Firebase コンソールの
「サーバーキー」という所で見つかります
デバイストークンを取得すると
FCM デバイストークンはトークンメソッドを
インスタンス ID シングルトンに呼び出します
これが基本的に
FCM デバイストークンを取得する為に
あなたがする必要があることです
これはよく表示してると思います
このトークンは時々変化します
特にデバッグから実稼働へ移る時には
変わると思います
だからそれに留意して
これを毎回取得するだけでなく
変わる時をリッスンしてください
これが変わる時作動する
NS 通知があります
だからそこでリッスンできます
これらの情報が両方あれば
FCM に同様の curl 呼び出し
ができますよね
ここにサーバーキーがあるし
それからこの凄く長い文字列の
FCM デバイストークンもあります
万事うまく行けば
このようなレスポンスを受け取ります
ところで これはメッセージが
動作したという意味にはなりません
ただ FCM に送信できただけです
これと違って見えるものを返されたら
又 役立つエラーメッセージを受けて

Portuguese: 
Você vai precisar de duas coisas.
Da chave do servidor,
que encontra no console do Firebase,
na chave do servidor do bit marcado.
Depois pegar o token do FCM,
ele requer a solicitação
do método de token
na instância de identificação
do singleton.
Isso é o que você precisa fazer
para obter o token do FCM.
E acho que isso exprime bem.
O token muda em algumas ocasiões.
Particularmente,
acho que muda quando você vai
da correção de erros à produção.
Lembre-se que você vai querer
não só conseguir isso o tempo todo,
mas também saber quando mudar.
Há algumas notificações de NS
que vão disparar quando isso mudar,
então pode ficar sabendo daí.
Agora que você tem essas duas informações,
pode fazer solicitação cURL
para o FCM, certo?
Conseguirá a chave do servidor.
E essa grande e louca solicitação
é o token do FCM.
E se tudo correr bem,
você obterá uma resposta como essa.
Isso não significa
que toda a mensagem funcionou.
Apenas que nos comunicamos bem com o FCM.
Se você receber algo
que não se parece com isso,
de novo, deve receber uma mensagem de erro

Chinese: 
你同样也是需要两样东西
第一个是服务器密钥
在Firebase控制台可以找到
如PPT所示
然后要获得FCM设备令牌
则需要调用令牌方法
也就是 instanceID( )
做完这些
即可获得FCM设备令牌
这里的打印（print）效果也很好
这个令牌偶尔是会变的
特别是在排查故障到产出的过程中
所以要记住
你不仅每次要得到令牌
更是要留意它什么时候时候会变
如果出现NS通知的时候
那它就会改变
所以要仔细留意
当获得服务器密钥与FCM令牌之后
就可以对FCM进行类似的cURL调用
你可以在此处获得你的服务器密钥
这条巨长的疯狂代码就是FCM设备令牌
一切进展顺利的话
输出的类似是这样的结果
但是这并不意味整条信息就可以工作了
这只是意味着我们与FCM对话了
如果输出的结果不是这样的
你可能会得到一个错误信息

Indonesian: 
Anda akan perlu dua hal.
Anda akan perlu kunci server
yang ada di konsol Firebase
pada bagian bertuliskan Server Key.
Untuk mendapat token perangkat FCM,
perlu memanggil metode token
di instanceID tunggal.
Ini yang diperlukan
untuk mendapat token perangkat FCM.
Menurut saya hasilnya bagus.
Token ini terkadang berubah.
Khususnya, saat Anda beralih
dari debug ke production.
Ingatlah, Anda tak hanya perlu
selalu mendapatkan ini,
tapi juga tahu perubahannya.
Ada sejenis notifikasi NS
yang muncul ketika ini berubah.
Anda bisa mengetahuinya di sana.
Ketika Anda sudah punya
kedua informasi ini,
Anda bisa buat panggilan cURL
ke FCM yang serupa.
Anda punya kunci server di sini.
String panjang ini
adalah token perangkat FCM.
Jika semua beres, Anda akan
mendapat respons seperti ini.
Ini tak berarti seluruh pesan berhasil.
Hanya berarti komunikasi ke FCM berhasil.
Jika respons yang didapat tak seperti ini,
Anda mungkin mendapat
pesan kesalahan yang berguna

English: 
You're basically going
to need two things.
You're going to need
the server key, which
you can find in the
Firebase console
in the bit labeled server key.
And then getting the device
token, the FCM device token,
requires calling
the token method
on the instance ID singleton.
And so this is
basically what you
need to do to get
your FCM device token.
And I think this
prints out nicely.
This token does
change on occasion.
In particular, I think
it changes when you
go from debug to production.
So just keep in mind
that you're going
to want to not only sort
of get this every time,
but also listen for
when it changes.
There are sort of
NS notifications
that will fire off
when this changes,
so you can listen for it there.
Now once you have both of these
pieces of information, well,
then you can make a similar
cURL call to FCM, right?
You've got your server key here.
And this giant crazy string
is the FCM device token.
And if all goes well, you'll
get back a response like this.
This doesn't mean, by the way,
that the whole message worked.
Only that we talked to FCM OK.
If you get back something
that doesn't look like this,
again, you'll probably get a
pretty useful error message

Korean: 
기본적으로 두 가지가 필요할 겁니다
서버 키가 필요할 겁니다
이건 파이어베이스 콘솔에 있는
비트 라벨 서버 키에서 찾을 수 있어요
그 후 FCM 기기 토큰을 가져올 때는
인스턴스 ID 싱글톤에서
토큰 방식을 호출해야 해요
따라서 이들이 기본적으로
FCM 기기 토큰을 위해 필요한 겁니다
그리고 이건 잘 프린트되는 것 같아요
이 토큰은 때로 바뀌기도 합니다
특히 제 생각에 디버그에서
생산으로 갈 때 바뀌어요
따라서 명심하세요
매번 이것이 필요할 뿐 아니라
변할 때도 들어야 한다는 걸 말입니다
일종의 NS 알림이 있어요
이것이 바뀌면 작동될 겁니다
따라서 여기서 들을 수 있는 겁니다
일단 이 정보를 모두 가지게 되면
FCM에 유사한 cURL
호출을 할 수 있어요
서버 키가 여기 있어요
이 거대한 스트링이
FCM 기기 토큰이에요
그리고 모든 게 잘 되면
이러한 반응을 받게 됩니다
그런데 이것은 모든 메시지가
작동됐음을 의미하진 않아요
FCM에 말한 것만 괜찮다는 겁니다
이것과 다른 무언가가 나타난다면
꽤 유용한 오류 메시지를
받게 될 겁니다

Arabic: 
أساساً، أنت ستحتاج لشيئين.
ستحتاج لمفتاح الخادم والذي
يمكنك إيجاده في
وحدة تحكم Firebase
في مفتاح الخادم المسمي bit.
ثم الحصول علي رمز الجهاز
رمز جهاز FCM
يتطلب الاتصال بطريقة الرمز
علي instance ID singleton.
ولذلك هذا أساساً ماتحتاج
أن تفعله لتحصل علي رمز جهاز FCM.
أعتقد أن هذا يطبع جيداً.
هذا الرمز يتغير أحياناً
خاصةً، أعتقد أنه يتغير عندما
تذهب من التصحيح للإنتاج.
لذلك خذ في اعتبارك
أنك لن تريد فقط
هذا في كل مرة
لكن أيضاَ استمع عندما يتغير.
هناك نوع من إشعارات NS
التي ستتوقف عندما تحدث التغييرات
لذلك يمكنك الاستماع إليها هناك.
الآن بمجرد أن يكون لديك تلك المعلومتين
يمكنك اجراء اتصال cURL 
إلي FCM
أنت حصلت علي مفتاح الخادم هنا.
وهذه السلسلة الكبيرة هي
رمز جهاز FCM.
واذا سار كل شيء جيداً ستحصل
علي استجابة مثل هذه.
علي أي حال، لايعني هذا
أن الرسالة بالكامل نجحت.
فقد التحدث إلي FCM كان ناجحاً.
لو حصلت علي شيء لايشبه هذا
مرة أخرى، علي الأرجح
أن تكون حصلت علي رسالة
خطأ جميلة ومفيدة

Korean: 
무엇이 잘못된 건지 알려주는 겁니다
반면에 어떠한 오류 메시지도
받지 않았지만
여전히 알림이 보이지 않는다면
여기서 점검해야 할 가장 큰 일은
FCM 알림에서 우선순위를
높게 설정했는가입니다
안드로이드와 iOS는
우선순위 값을 다르게 해석해요
그 결과 APN에서는 기본값이 10이고
이것은 기본적으로 높음과 동일하며
이것을 보내서 이 메시지를
바로 표시하라는 의미입니다
파이어베이스 클라우드
메시징의 기본값은 중간이고
안드로이드 기기에선 여전히
조금 높은 편이라고 밝혀졌어요
이건 가서 안드로이드 기기가
도즈 모드가 아니라면 이 알림을 보이고
그 모드면 조금 기다려란 의미죠
하지만 iOS에선
중간이 APNs의 5와 같아요
이건 아마도 알림을 볼 수도
못 볼 수도 있겠다
뭐 이런 겁니다
따라서 iOS 기기에서
FCM 메시지가 반드시
나타나길 원한다면
이것을 기본값으로 가는 게 아니라
표면적으로 높은 것으로
설정하기를 추천드립니다
또 다른 흔한 실수는 아마
APN 용어를 FCM 포스트에
사용하는 겁니다

Portuguese: 
que vai dizer o que há de errado.
Por outro lado,
se não receber nenhuma mensagem de erro,
mas ainda não está vendo uma notificação.
o mais importante para checar
é se você marcou a alta prioridade
na sua notificação do FCM.
Android e iOS possuem diferentes jeitos
de interpretar os valores de prioridade.
Como resultado, no APNs,
o valor padrão é 10,
o que é, basicamente, equivalente a alto,
o que significa,
"Envie isso aqui
e exiba a mensagem agora mesmo".
O valor padrão
no Firebase Cloud Messaging é médio,
o que ainda é um pouco alto
nos dispositivos Android.
Significa, "Mostre a mensagem
a menos que meu Android
esteja em Doze Mode
e nesse caso, espere um pouco".
Mas no iOS, médio é igual ao APNs de 5,
o que meio que significa,
"Talvez veja a notificação,
talvez não veja".
Então se quer se certificar
de que a mensagem do FCM apareça
nos dispositivos iOS,
eu recomendo explicitamente
que configure para "alto",
não que use o padrão.
Outros erros comuns
podem ser usar terminologia do APNs
no post do seu FCM.

Arabic: 
التي تخبرك ماالخطأ الذي حدث.
من ناحية أخرى، إذا لم تحصل علي
رسالة خطأ
لكنك مازلت لاترى إشعار
أهم شيء يجب أن تفحصه هنا
أنك قد وضعت أولوية عالية
في إشعار FCM.
Android وiOS
لديهم طرق مختلفة
في ترجمة قيمة هذه الأولوية.
وذلك نتيجة لهذا، في APNs
القيمة الإفتراضية
هي 10، والتي في الأساس
تكون مساوية للإرتفاع
ويعني هذا، مهلاً من فضلك أرسل هذه 
واعرض هذه الرسالة
علي الفور.
القيمة الإفتراضية في
سحابة تراسل Firebase 
هي متوسطة، والتي تظهر
علي أجهزة Android
تظل مرتفعة.
يعني هذا، استمر واعرض هذه الرسالة
مالم يكن جهازي Android 
في وضع خامل، في هذه الحالة
انتظر قليلاً.
لكن، علي IOS متوسطة
تعادل APNs of 5
والتي تشبه، احتمالية أن ترى الإشعار
أو لا لاتراه.
لذلك، إذا أردت أن تتأكد أن
رسالة FCM تظهر علي
أجهزة iOS، أنصح
بضبط الوضوح ليكون مرتفع
وألا يكون افتراضيًا.
خطا آخر شائع، من الممكن أن يكون
استخدام مصطلح APNs
علي منشور FCM الخاص بك.

Chinese: 
它很有用 
可以告诉你哪里出错了
另外 如果你没有看到错误信息
但是也看不到通知显示
最应该检查的是
FCM通知的优先级别是否标记为“高”了
安卓和iOS对优先值的诠释方式不同
在APN上默认的优先值是10
这就相当于“高”
意味着请发送并马上显示这条信息
FCM的默认优先值是“中”
这对于安卓设备而言还是比较高的
它表示 请继续显示这条信息
但如果我的安卓设备处于睡眠模式
就稍等一会
但是在iOS上“中”就相当于APN优先值为5
这意味着 
也许你能看到通知
也许你不能
如果你想确保你的FCM信息在iOS设备上显示的话
我强烈建议把优先值设为“高”
而不是使用默认值
另一个常见错误则是在FCM信息中使用了
APNs术语

Indonesian: 
yang memberi tahu apa masalahnya.
Sebaliknya, jika tak ada pesan kesalahan,
tapi tetap tak ada notifikasi,
Anda perlu memeriksa
apakah Anda sudah memberi
prioritas tinggi pada notifikasi FCM.
Android dan iOS punya cara berbeda
dalam mengartikan nilai prioritas.
Hasilnya, di APNs,
nilai default adalah 10.
Itu sebenarnya tinggi,
yang artinya pesan harus
segera dikirim dan ditampilkan.
Nilai default pada Firebase
Cloud Messaging adalah "sedang".
Itu masih cukup tinggi di Android.
Artinya, kirim pesan ini segera,
kecuali perangkat Android dalam mode tidur
yang membuatnya sedikit tertunda.
Tapi di iOS, "sedang" itu sama
dengan nilai lima di APNs,
yang artinya notifikasi mungkin
akan muncul, mungkin juga tidak.
Jika Anda ingin memastikan
pesan FCM muncul di perangkat iOS,
saya sarankan atur ini menjadi tinggi,
jangan menggunakan default.
Kesalahan umum lainnya
adalah memakai terminologi APNs
dalam pos FCM Anda.

English: 
that tells you
what's going wrong.
On the other hand, if you don't
get back any error message,
but you're still not
seeing a notification,
the biggest thing
to check here is
that you've labeled priority
high in your FCM notification.
Android and iOS
have different ways
of interpreting
this priority value.
So as a result, on
APNs, the default value
is 10, which is basically
the equivalent of high, which
means, hey, please send this
and display this message right
away.
The default value in
Firebase Cloud Messaging
is medium, which it
turns out on Android
devices is still kind of high.
It means, go ahead
and show this message
unless my Android device is
in doze mode, in which case,
wait a little bit.
But on iOS, medium
equates to APNs of 5,
which is sort of like, eh, maybe
you'll see the notification,
maybe you won't.
So if you want to make sure
your FCM message shows up
on iOS devices, I do
recommend explicitly
setting this to high, not
going with the default.
Other common mistakes might
be using APNs terminology
in your FCM post.

Spanish: 
que te dice qué está saliendo mal.
Por otro lado, si no reciben ningún
mensaje de error,
pero sigues sin ver una notificación,
lo más grande por revisar
es que hayas marcado alta prioridad
en tu notificación FCM.
Android e iOS tienen diferentes maneras
de interpretar este valor de prioridad.
Como resultado, en APNs el valor
por defecto es 10,
que es básicamente equivalente a alto,
lo cual significa oye, por favor envía
esto y muestra este mensaje de inmediato.
El valor por defecto en Firebase
Cloud Messaging es medio,
lo que en los dispositivos Android
igualmente es algo alto.
Significa adelántate y muestra es mensaje
a menos que mi dispositivo Android
este en modo ahorro de batería
en cuyo caso espera un poco.
Pero en iOS, medio equivale a APNs
de 5,
lo cual es como, eh, quizá veas
esta notificación,
quizá no.
Así que si quieres asegurarte
de que tus mensajes FCM
aparezcan en dispositivos iOS,
recomiendo ajustar esto
explícitamente a alto, no ir con el
preestablecido.
Otro error común puede ser usar
terminología de APNs
en tu puesto de FCM.

Japanese: 
どこが悪いか告げてくれるでしょう
一方 何もエラーメッセージが返らず
やはり通知が見えない場合
ここで確認すべき最大のことは
FCM 通知で優先順位を「高」にした場合です
Android と iOS では
この優先順位の値の解釈が違います
結果として APN で既定値は 10 です
これは基本的に「高」と等しく
つまり これを送って
このメッセージをすぐに表示します
FCM の規定値は「中」で
これは Android デバイスでは
やはりちょっと「高」です
それの意味は Android デバイスが
Dozeモードでなければ
このメッセージを表示します
その場合少し待ちます
だが iOS では「中」は
APN の５に等しく
それでは 通知が見える場合も
見えない場合もあります
だから確実に FCM メッセージを
iOS デバイスに表示したければ
お勧めは 明示的に
これを「高」に設定して
デフォルトにしないことです
よくある他の間違いでは
FCM ポストで APN 用語を使うことです

Chinese: 
PPT上是APNs与FCM的语句对应
大家要记得在FCM应该写的是
content_available true
而不是 content_available: 1
这些细节肯定会很容易让你出错
我看到有观众想要拍照
尽管拍吧
稍后我会把今天的演讲做成视频或者其他文件
以防大家错过相关信息
最后 请确保你已经
把证书上传到Firebase 控制台里了
因为没有证书的话 
FCM将不能与APNs对话
另外一部分就是通知与云消息传递对话
老实说
其实大家没有什么要担心的
如果你能通过调用cURL与FCM沟通
Firebase通知面板应该可以正常工作
如果没有的话 
最好的办法是前往
status.firebase.google.com
查看Cloud Messaging（云消息传递） 这一列
它会告诉你
通知或者云消息传递是否有错
我们花了很多时间讲云消息传递
现在我们进入第二个主题
Firebase动态链接
上个展示中也简单提到了动态链接

Korean: 
여기에서는 거의 비슷하게 쓰이니
content_available1이 아닌
content_available true를
하도록 하세요
이런 것들이 꼭 실수를 하게 만들거든요
사진을 찍고싶어 하시는 분들을
몇 분 봤는데요
찍으셔도 되고 못 보신 분들을 위해서
나중에 비디오 등으로 올릴게요
그리고 마지막으로 파이어베이스 콘솔에
실제로 인증서를
업로드하는 것을 잊지 마세요
인증서가 없으면 FCM이
APN에 말하지 못하거든요
그리고 여기 이 부분은
알림에서 클라우드 메시징으로
말하는데 솔직히
여기에서는 별로 걱정할 것이 없어요
cURL 호출을 통해
FCM으로 소통할 수 있다면
파이어베이스 알림 패널은
아마 작동하고 있을 겁니다
그렇지 않다면
status.firebase
.google.com을 확인하고
클라우드 메시징 열을 보세요
이게 알림이나 클라우드 메시징에서
무엇이 잘못 됐는지
말해 줄 겁니다
클라우드 메시징에 대해
아주 많은 걸 다뤘네요
다음 주제로 넘어 갈게요
다이나믹 링크에 대해 말해 볼게요
지난 프레젠테이션에서 잠깐 말했지만

Spanish: 
Son como equivalentes aquí,
así que asegúrate de estar haciendo
content_available true
y no content_available 1.
Cosas como esa pueden hacerte tropezar.
Vi varias personas queriendo tomar fotos
de eso.
Adelante.
Pondré esto en un video
o algo en algún momento luego
en caso de que se lo pierdan.
Y finalmente, asegúrate de haber subido
un certificado
a la consola de Firebase.
Porque sin eso FCM no puede hablar
con APNs.
Y luego está esta parte hablando
desde notificaciones
a Cloud Messaging.
Seré honesto.
No hay mucho por lo que preocuparse aquí.
Si puedes comunicarte con FCM
por una llamada cURL
Firebase Notifications Panel
debería estar funcionando.
Si no, lo mejor que puedes hacer
es verificar status.firebase.google.com,
ver esta fila de Cloud Messaging
Eso te dirá si hay algo que esté mal
con las notificaciones o Cloud Messaging.
Eso fue mucho sobre Cloud Messaging.
Cambiemos de tema.
Hablemos de Dynamic Links.
Hablamos de esto brevemente
en la última presentación,
pero la idea es que los Dynamic Links

Arabic: 
يوجد نوع من التعادلات هنا
لذلك، كن متأكداً
أنك تقوم بـ
content_available true
وليس content-available 1.
أشياء مثل هذه، يمكنها أن تجعلك 
تفشل بالتأكيد.
رأيتُ اثنين من الناس يريدون أن 
يأخذوا صورة من هذا، تابعوا
سأقوم بوضع هذا في فيديو
او أي شيء، عند بعض المواضيع
بعد ذلك، في حالة تفويته.
وبعد ذلك، في النهاية، تأكد
أنك بالفعل
قمت برفع الشهادة إلي
وحدة تحكم Firebase.
لأنه بدونها، FCM لايمكنه
التحدث إلي APNs.
وهناك هذا الجزء هنا، يتحدث
من الإشعارات
إلي سحابة التراسل.
لأكون أميناً ، ليس هناك الكثير
لتقلق حوله، لو استطعت الإتصال بـ
FCM من خلال cURL call
لوحة اشعارات Firebase 
يجب أن تعمل علي الأرجح.
إذا لم تعمل، فأفضل شيء
أن تفعله
هو فحص
status.firebase.google.com
انظر إلي صف سحابة الرسائل
والتي تخبرك إذا كان هناك أي شيء
خطأ قد حدث، بخصوص الإشعارات
أو سحابة التراسل
هذا كان الكثير جداً 
عن سحابة التراسل.
فلننتقل إلي موضوع آخر.
لنتحدث عن الروابط الديناميكية.
لقد ناقشنا هذا بشكل مختصر
في العرض السابق، لكن الفكرة

Indonesian: 
Mereka setara di sini.
Jadi, pastikan Anda menulis
content_available: true,
bukan content-available: 1.
Hal seperti ini bisa mengacaukan Anda.
Saya lihat ada yang mau memfoto ini.
Silakan.
Saya akan mengunggah video
tentang ini jika Anda melewatkannya.
Terakhir, pastikan Anda sudah
mengunggah sertifikat ke konsol Firebase.
Karena tanpanya, FCM tak bisa
bicara dengan APNs.
Bagian ini bicara
dari notifikasi ke Cloud Messasging.
Jujur saja. Tak banyak
yang perlu dicemaskan.
Jika Anda bisa mengomunikasikan
FCM lewat panggilan CURL,
panel Firebase Notification
mungkin bekerja.
Jika tidak, hal terbaik untuk dilakukan
adalah cek status.firebase.google.com,
lihat baris Cloud Messaging ini.
Ini akan memberi tahu jika ada yang salah
dengan notifikasi atau Cloud Messaging.
Terlalu banyak membahas
Cloud Messaging. Mari bahas topik lain.
Mari bahas Dynamic Link.
Kita sudah membahas ini secara singkat
di presentasi sebelumnya.

English: 
They're sort of equivalents
here, so make sure
you're doing
content_available true and not
content-available 1.
Things like that can
trip you up, definitely.
I saw a couple people wanting
to take pictures of that.
Go ahead.
I'm going to put
this up in a video
or something at some point
later in case you miss it.
And then finally, make
sure that you've actually
uploaded a certificate
to the Firebase console.
Because without it,
FCM can't talk to APNs.
And then there's this part
here talking from notifications
to Cloud Messaging.
I'll be honest.
There's not a lot
to worry about here.
If you're able to communicate
to FCM through a cURL call,
the Firebase Notifications panel
should probably be working.
If it's not, the
best thing to do
is check
status.firebase.google.com,
look at this Cloud
Messaging row.
That will tell you
if there's anything
that happens to be wrong with
either notifications or Cloud
Messaging.
That was an awful lot
about cloud messaging.
Let's move on to another topic.
Let's talk about Dynamic Links.
So we talked about this briefly
in the last presentation,

Japanese: 
ここに対照表があります
だから content_available true にして
content-available 1 にしないことです
こういうことで断然つまずきます
これの写真を写したがってる
人が見えました
どうぞ
皆さんが見逃すといけないので
後でこれをビデオか何かにしますよ
最後に Firebase コンソールに
証明書をアップしたか確認してください
それが無いと FCM は APN に
送信できませんからね
次にこの部分
通知からクラウドメッセージングへの
送信です
正直に言って
ここで心配なことはあまりありません
curl 呼び出しを介して
FCM と通信できれば
Firebase 通知パネルは多分
動作する筈です
動作しなければ１番良いのは
status.firebase.google.com を
調べてください
この Cloud Messaging 欄を見てください
通知かクラウドメッセージングに
何か悪いことがあるか教えてくれます
クラウドメッセージングについては
沢山話しました
別の話題に移りましょう
ダイナミックリンクについて
話しましょう
前のプレゼンでこれについて
ちょっと話しましたが

Portuguese: 
Há uns equivalentes aqui,
então certifique-se
de estar fazendo
o content_available mesmo,
e não o content-available 1.
Coisas como essa
podem enganar você, com certeza.
Eu vi algumas pessoas
tentando capturar a imagem disso.
Podem capturar.
Vou colocar isso em um vídeo
ou algo assim, em algum momento,
caso vocês percam.
Finalmente, certifique-se de conseguir
enviar o certificado
para o console do FCM.
Porque sem isso,
o FCM não se comunica com o APNs.
E há essa parte aqui
que fala sobre as notificações
para Cloud Messaging.
Serei sincero.
Não há com o que se preocupar.
Se consegue se comunicar com o FCM
por solicitação cURL,
o painel do Firebase Notifications
provavelmente funciona.
Se não, o melhor a fazer
é conferir o status.firebase.google.com,
e ver a fila de Cloud Messaging.
Isso vai te dizer se alguma coisa
deu errado com as notificações
ou com o Cloud Messaging.
Uma parte ruim do Cloud Messaging.
Vamos para outro tópico.
Vamos falar sobre Dynamic Links.
Falamos um pouco sobre isso
na última apresentação,

English: 
but the idea is Dynamic Links
are mobile deep links that
work the way you want them to.
So with one single link, we can
take the user to your Android
or iOS app if the
user has it installed
and they're on the
appropriate device.
If the user does not
have your app installed,
we can take them directly to
the App Store or the Play Store
or, I suppose, to a web page.
That choice is up to you.
But I think the real
magic of Dynamic Links
is that if your user does
not have the app installed
and we have to take them
to the App Store first,
that link data doesn't get lost.
When your user opens up your
app again for the first time,
the Dynamic Links library can
still fetch that original link
context for you so you
know what link originally
brought your user into your
app, and you can sort of
display that sort of in a more
appropriate welcome screen
than just some generic, hi,
sign in, kind of screen.
And that's really good to sort
of driving a good first time
experience.
So how does this work?
So for simplicity, and because
I'm running short on time,
let's focus on the iOS side
of things on iOS 9 or later.

Spanish: 
son enlaces profundos móviles
que trabajan de la forma que quieras.
Con un solo enlace podemos llevar
a tu usuario a tu app de Android
o iOS si el usuario lo tiene instalado
y si están en el dispositivo adecuado.
Si el usuario no tiene tu aplicación
instalada
podemos llevarlo directamente
a la App Store o la Play Store
o, supongo, a un sitio web.
La elección es tuya.
Pero creo que la magia de los Dynamic
Links
es que si tu usuario no tiene
la aplicación instalada
y debemos llevarlo a la App Store
primero,
los datos del enlace no se pierden.
Cuando tu usuario abre tu aplicación
por primera vez
la biblioteca de Dynamic Links
puede recuperar
ese contexto de enlace original para ti
para que sepas
qué enlace llevó a tu usuario
a tu aplicación, y puedes exhibirlo
en una pantalla de bienvenida
más apropiada
que una pantalla genérica del tipo,
"Hola, regístrate",
y eso es muy bueno para conducir
una buena primera experiencia.
¿Así que cómo funciona?
Para simplicidad, y porque me quedo
sin tiempo,
enfoquémonos en el lado de las cosas
de iOS 9 o posterior.

Japanese: 
ダイナミックリンクとは
皆さんが望むように動作するモバイルの
ディープリンクのことです
だから単一のリンクでユーザーを
Android や iOS アプリに連れて行けます
但しユーザーがそれをインストールしてあり
適切なデバイスの場合です
もしユーザーが皆さんのアプリを
インストールしていない場合
私達は直接 App Store か Play Store か
ウェブページに導けます
その選択はあなた次第です
ですが思うに
ダイナミックリンクの本当の魔法は
ユーザーがアプリをインストールしてなくて
まず App Store に導く場合
そのリンクデータが失われないことです
ユーザーがアプリを再び初めて開く時
ダイナミックリンクライブラリは
やはり元のリンクコンテキストを取得でき
元はどのリンクでユーザーが
アプリに来たか分かり
それをただの汎用サインイン画面ではなく
もっと適切な歓迎画面で
表示できます
これは良い初体験の実現に本当に良いです
ではどうやるのでしょう？
時間がなくなってきたので
単純化の為に
iOS 側 iOS9 以降に注目しましょう

Indonesian: 
Dynamic Link adalah tautan seluler
yang bekerja sesuai harapan Anda.
Jadi, dengan satu tautan,
kita bisa mengarahkan pengguna
ke aplikasi Android atau iOS Anda
jika pengguna memasangnya
dan perangkatnya sesuai.
Jika pengguna tak pasang aplikasinya,
kita bisa arahkan pengguna
ke App Store atau Play Store
atau bisa juga ke laman web.
Terserah Anda.
Tapi keistimewaan Dynamic Link adalah
jika pengguna tak memasang aplikasi
dan kita perlu mengarahkan
pengguna ke App Store,
data tautan itu tidak hilang.
Ketika pengguna membuka
aplikasi Anda lagi untuk pertama kali,
pustaka Dinamic Link masih bisa
mengambil konteks tautan aslinya
agar Anda tahu tautan apa
yang membawa pengguna ke aplikasi Anda
dan Anda bisa tampilkan itu
di layar pembuka yang lebih sesuai
alih-alih layar login biasa.
Itu sangat bagus untuk memberi
pengalaman pertama yang bagus.
Bagaimana cara kerjanya?
Agar sederhana,
dan karena waktu saya singkat,
mari fokus ke bagian iOS
di versi iOS 9 atau di atasnya.
Untuk cabang kiri ini,
jika aplikasi Anda terpasang

Chinese: 
它的本质就是移动端深度链接
按照你设定的方式工作
只要一个链接
即可将用户带到你的安卓或者iOS app
只要用户安装了你的app
并使用了合适的设备
如果用户没有安装app
那么链接可以直接将他们带到苹果的
App Store 或是Google的Play Store
或者是一个相应的网页
跳转到哪里完全取决于你
但我认为动态链接的真正魔力在于
如果你的用户还没有安装app
我们要先将用户带到App Store
链接的数据没有丢失
当你的用户第一次打开你的app时
动态链接库依然能获取原始链接的内容
这样你就知道是哪条链接将你的客户带来app的
你就可以展示更有针对性的欢迎信息
而不是很普通的“你好”之类的信息
这也是提升初次体验的好方法
那么它的工作原理是什么呢？
长话短说
我们时间不多了
我们着重看看iOS9及之后的版本
我们看到这个图的左边
如果安装了app

Portuguese: 
mas a ideia é que eles são links móveis
que funcionam como querem.
Com um único link, levamos o usuário
do aplicativo do Android
ou do iOS, se o usuário tiver instalado,
e se ele estiver
no dispositivo apropriado.
Se o usuário não tem
o app instalado,
podemos levá-lo diretamente
à App Store ou à Play Store,
ou, suponho, a uma página da web.
Essa escolha é sua.
Mas a mágica dos Dynamic Links
é que se seu usuário não tiver
o aplicativo instalado
e tivermos que levá-lo
primeiro à App Store,
os dados desse link não se perdem.
Quando seu usuário abre
o aplicativo pela primeira vez,
a biblioteca dos Dynamic Links
busca o conteúdo original
para que você possa saber qual link
originalmente levou o usuário
ao aplicativo e você pode exibir isso
em uma tela de boas-vindas mais apropriada
em vez de algo genérico, "Oi",
"Faça login", desse tipo
E isso é muito bom
para oferecer
uma boa primeira experiência.
Então, como isso funciona?
Para simplificar,
porque estou ficando sem tempo,
vamos focar no lado iOS das coisas,
do iOS 9 ou versão posterior.

Korean: 
다이나믹 링크는
원하는 방식으로 작동하는
모바일 딥 링크입니다
하나의 링크로 사용자를
안드로이드나 iOS 앱으로
데려갈 수 있어요
사용자가 그 앱을 설치했고
적절한 기기를 사용하고 있다면 말입니다
사용자가 그 앱을 설치하지 않았다면
그 사용자를 바로 앱 스토어나
플레이 스토어로 혹은 제 생각에
웹 페이지로 데려갈 수도 있어요
선택은 여러분한테 달렸어요
하지만 제 생각에
다이나믹 링크의 진짜 마술은
사용자가 앱을 설치하지 않아서
앱 스토어에 먼저 가야할 경우
그 링크 데이터가
소실되지 않는다는 겁니다
사용자가 앱을 처음으로 다시 열면
다이나믹 링크 라이버리가
원래의 링크 컨텍스트를
여전히 꺼낼 수 있어서 처음에
어떤 링크가 사용자를 앱으로
데려왔는지 알 수 있고
일반 로그인 화면이 아닌
적절한 환영 화면을
보여줄 수 있는 겁니다
이건 좋은 첫 경험을
유도하기 아주 좋은
방식입니다
어떻게 작동할까요?
시간도 별로 없으니 간단히 말해서
iOS 9 이후의
iOS 쪽에 초점을 둘게요

Arabic: 
في الروابط الديناميكة أنها 
روابط عميقة الحركة
والتي تعمل كما تريد أنت.
لذلك، برابط واحد نستطيع أن نأخذ
المستخدم إلي Android الخاص بك
أو تطبيق iOS، لو قام
المستخدم بتثبيته
وأنهم علي الجهاز المناسب.
إذا لم يثبّت المستخدم تطبيقك.
نستطيع أن ناخذه مباشرة إلي
App Store أو Play Store
أو علي ما أقترح، إلي صفحة ويب.
الاختيار لك.
أعتقد أن سحر الروابط
الديناميكة الحقيقي
في حالة عدم تثبيت المستخدم لتطبيقك
وعلينا أخذهم إلي متجر التطبيقات أولاً
حتي لاتضيع بيانات الرابط.
عندما يفتح المستخدم تطبيقك للمرة الأولي.
فإن مكتبة الروابط الدينامييكة
لاتزال تحضرالرابط الأصلي
لك، حتي تتعرف ماهو الرابط الأصلي
الذي أحضر مستخدمك إلي جهازك
ويمكن إظهار هذا في شاشة الترحايب
والذي هو أكثر ملائمة
من بمجرد بعض العبارات العامة
مرحباً، سجّل، نوع الواجهة
وهذا حقاً جميل ليعطي
أول تجربة جيدة.
إذاً، كيف يعمل هذا؟
ببساطة، ولأن وقتي قصير
فلنركز علي جانب iOS 
علي اصدار iOS 9 أو مابعد ذلك.

English: 
So for this left branch here,
if your app is installed
and we want to take your
user directly to the app,
we use Universal Links.
In case you don't know
what Universal Links are,
they're basically a way
of telling iOS, hey,
instead of opening a
link on my website,
go ahead and pass
that URL onto my app.
My app will know
how to handle it
and will send the user
to the right place.
And you do this by
placing a little file
on your website, this
Apple app site association
file, that basically
tells iOS that it's
going to be opening up your
app instead of the website.
Well, with Firebase
Dynamic Links,
it basically works the same.
The idea is that instead of your
website implementing Universal
Links, Firebase creates its
own little mini website that
has the same domain
as these Dynamic Links
that you create for your app.
Then we create our own little
Apple app site association
file that points into your app.
Your app can then take a
look at that incoming link
and show the right
information to the user.
So it's completely up
to you whether or not
your own website has
support for Universal Links.
It's fine if you do, but
it's also fine if you don't.
It doesn't matter.
I mean, heck, you barely
even need a website
and Dynamic Links
will still work.

Portuguese: 
Para esse item da esquerda,
se seu app está instalado
e queremos levar o usuário
diretamente ao app,
usaremos os Universal Links.
No caso de não saber o que são,
são basicamente um modo de dizer ao iOS,
"Em vez de abrir o link em uma página,
pode passar essa URL para meu aplicativo.
Meu aplicativo saberá como lidar
e enviará o usuário para o local certo."
E você faz isso colocando
um pequeno arquivo no seu site,
esse arquivo de associação
de app da Apple,
que diz ao iOS que vai abrir
o seu aplicativo
em vez de abrir a página.
Com Dynamic Links do Firebase
funciona da mesma forma.
A ideia é que em vez de sua página
implementar Universal Links,
o Firebase cria uma página própria
que possui o mesmo domínio
que os Dynamic Links
que você criou para o app.
Depois, criamos nosso arquivo
de associação da Apple
que vai para seu app.
Seu aplicativo pode olhar para o link
e dar a informação certa para o usuário.
Então cabe a você totalmente
se seu próprio site
suporta Universal Links ou não.
Tudo bem se aceitar,
mas tudo bem se não aceitar também.
Não importa.
Você mal precisa de um site
e os Dynamic Links ainda funcionam.

Japanese: 
この左側の枝で
アプリがインストールされていて
ユーザーを直接アプリに連れていく場合
ユニバーサルリンクを使います
ユニバーサルリンクを知らない方
それらは基本的に iOS に
以下のように伝えるものです
「ウェブサイトでリンクを開かずに」
「その URL をアプリに渡しなさい」
「アプリがそれの処理方法を知って」
「ユーザーを正しい場所に送ります」と
これをするにはウェブサイトに
小さなファイルを
この apple-app-site-association 
ファイルを置きます
これが基本的に iOS に告げて
ウェブサイトではなくアプリを開きます
Firebase ダイナミックリンクでは
基本的に同じ働きをします
構想は ウェブサイトが
ユニバーサルリンクを実装するのではなく
Firebase が自分の
小さなウェブサイトを作り
それを皆さんがアプリ用に作るこれらの
ダイナミックリンクと同じドメインにして
そうしてアプリを指す--
自身の「アップルのアプリサイトの
関連付け」ファイルを作成します
するとアプリはその着信リンクを見て
ユーザーに正しい情報を表示します
だから皆さん自身のウェブサイトが
ユニバーサルリンクをサポートするか
どうかは全く皆さん次第です
サポートしてもしなくても大丈夫です
それは問題じゃありません
つまり 皆さんはウェブサイトですら
殆ど必要ありません
それでもダイナミックリンクは機能します

Spanish: 
Para esta rama izquierda aquí,
si tu aplicación está instalada
y queremos llevar a tu usuario
directamente a la aplicación
usamos Universal Links.
Si no sabes qué son
los Enlaces Universales
son básicamente una forma de decirle
a iOS,
oye, en vez de abrir un enlace
en mi sitio web,
adelántate y pasa ese URL a mi app.
Mi app sabrá como manejarlo
y enviará a tu usuario al lugar correcto.
Haces esto colocando un pequeño archivo
en tu sitio web, este archivo
de sitio de asociación
de la aplicación de Apple, eso básicamente
le dice a iOS
que abrirá tu app en vez del sitio
web.
Bueno, con los Firebase Dynamic Links
funciona prácticamente igual.
La idea es que en vez de que tu sitio web
implemente Universal Links
Firebase crea su propio mini sitio web
que tiene el mismo dominio que estos
Dynamic Links
que creas para tu app.
Luego creamos nuestro propio archivo
de sitio de asociación
de la app de Apple
que apunta a tu app.
Luego tu app puede ver el enlace
y mostrar la información correcta
al usuario.
Así que depende de ti si tu propio
sitio web
soporta Universal Links.
Está bien si lo hace,
pero también esta bien si no.
No importa.
Quiero decir, apenas necesitas
un sitio web
y los Dynamic Links igual funcionarán.

Indonesian: 
dan kita ingin mengarahkan
pengguna langsung ke aplikasi,
kita gunakan Universal Link.
Jika Anda tak tahu Universal Link,
itu adalah cara memberi tahu iOS
untuk tak membuka tautan
di situs web saya,
melainkan memberi URL itu
ke aplikasi saya.
Aplikasi saya akan menanganinya
dan mengarahkan pengguna
ke tempat yang tepat.
Caranya dengan menempatkan file di situs,
yaitu file asosiasi situs aplikasi Apple,
yang memberi tahu iOS, file itu akan
membuka aplikasi, bukan situs web Anda.
Kerjanya sama dengan
Firebase Dynamic Link.
Situs web Anda tak perlu
mengimplementasikan Universal Link.
Firebase membuat situs web kecilnya
yang punya domain sama dengan Dynamic Link
yang Anda buat untuk aplikasi Anda.
Lalu buat
file asosiasi situs aplikasi Apple
yang mengarah ke aplikasi Anda.
Lalu aplikasi melihat tautan yang masuk
dan menampilkan informasi yang tepat.
Jadi, terserah Anda situs web Anda
mendukung Universal Link atau tidak.
Boleh mendukung, boleh tidak.
Tidak apa-apa.
Anda hampir tak perlu situs web,
Dynamic Link akan tetap bekerja.

Chinese: 
我们希望用户直接跳转到app内
那就要用到通用链接
如果你还不知道通用链接是什么的话
它就相当于告诉iOS
嘿 不要在网页打开链接
把这个URL传递给我的app
我的app知道怎么应对它
会把用户带到正确的地方
你只需要在你的网页上加入一个小文件
也就是 Apple-app-site-association文件
这个文件会告诉iOS打开你的app
而不是网页
那么Firebase动态链接的工作原理也是类似的
你再也不用在网页上插入通用链接
取而代之 
Firebase创建一个自有的迷你版网页
这个网页与你的app的动态链接的域名是一样的
然后我们创建Apple-app-site-association文件
它可以跳转至你的app
你的app看到了这个链接之后
就会向用户展示相应的内容
所以决定权完全在于你
要不要让你的网页支持通用链接
不管有没有通用链接 
都没问题
你看 
基本上不需要一个网页
动态链接依然正常工作

Korean: 
여기 이 왼쪽에 있는
부분의 경우 앱이 설치되고
사용자를 앱으로 바로 보내고 싶다면
유니버설 링크를 사용합니다
유니버설 링크를
모르시는 분들을 위해 설명하면
기본적으로 iOS에게
웹사이트의 링크를 여는 대신
URL을 앱으로 보내라고 말하는 거죠
앱은 URL을 어떻게 다루는지 알고
사용자를 적절한 곳에 보낼 겁니다
웹사이트에 작은 파일을
두면 되는 겁니다
이 애플 앱 사이트 연합 파일이고
기본적으로 iOS에게 웹사이트 대신
앱을 열게 될 것이라고 말해주는 겁니다
파이어베이스 다이나믹 링크의 경우도
기본적으로 똑같아요
웹사이트가 유니버설 링크를
시행하는 대신
파이어베이스가 작은
미니 웹사이트를 만들고
이 웹사이트는 앱을 위해 만든
다이나믹 링크와 같은
도메인을 가지는 겁니다
그리고 나서 앱으로 가는
작은 애플 앱 사이트 연합 파일을
만드는 겁니다
그리고 나서 앱은 들어오는 링크를 보고
사용자에게 알맞는
정보를 보여 주는 겁니다
따라서 이 모든 것은 전적으로
여러분의 웹사이트가
유니버설 링크를 
지원하는가에 달려 있어요
지원하더라도 아니더라도 괜찮아요
상관 없어요
웹사이트조차 필요하지 않는 겁니다
다이나믹 링크는 여전히 잘 될 겁니다

Arabic: 
بالنسبة للفرع الأيسر هنا
لو تم تثبيت تطبيقك
وأردنا أن نأخذ مستخدم
مباشرة إلى تطبيقك
نحن نستخدم روابط عالمية.
في حالة أنك لم تعرف ماهي
الروابط العالمية
هي في الأساس طريقة إخبار
iOS، مهلاً..
بدل من أن تفتح رابط علي موقعي
تابع، ومرر الـURL
إلي تطبيقي.
تطبيقي سيعرف كيف يتعامل معه
وسيرسل المستخدم إلي المكان الصحيح.
وأنت تفعل ذلك، عن طريق
وضع ملف صغير
علي موقعك، وهذ ملف اقتران
موقع تطبيقات Apple
والذي أساساً يخبر iOS
أنه سيفتح تطبيقك بدل من الموقع.
حسناً، ومع الروابط الديناميكية
لـFirebase تعمل نفس العمل.
الفكرة في أنه بدلاً من الروابط العالمية
الموجودة في موقعك
يقوم Firebase بإنشاء موقعه
الصغير الخاص به
والذي لديه نفس المجال
مثل الروابط الديناميكية
التي تقوم بإنشائها لتطبيقك.
بعد ذلك، نقوم بإنشاء ملف اقتران
موقع تطبيقات Apple الخاص بنا
الذي يشير إلي تطبيقك.
ثم يستطيع تطبيقك أن ينظر
إلي الروابط القادمة
ويعرض المعلومات الصحيحة لمستخدمك.
لذلك، لك الإختيار تماماً
في دعم موقعك للروابط العالمية أم لا.
فعلت أم لا، سيكون جيداً لك
في كل الأحول.
لايهم.
أعني نادراً ماتحتاج موقع انترنت
والروابط الديناميكة مازالت تعمل.

Portuguese: 
Então isso significa que precisa
adicionar suporte
aos Universal Links.
Uns desenvolvedores
veem na documentação
e pensam, "Não, eu não configurei
meu site para Universal Links".
Não se preocupem.
Tudo isso vai funcionar
se seu site estiver configurado
para Universal Links ou não.
E se o aplicativo não estiver instalado?
Assim, primeiro passamos
para um navegador.
É assim que vamos lembrar
dos dados do link.
Vamos deixar
umas impressões digitais aqui.
E faremos redirecionamento de JavaScript
para levar você à App Store.
E quando o usuário abrir o aplicativo,
a biblioteca do Firebase fará solicitação
para ver se o usuário clicou
em um Dynamic Link previamente.
Algo que se deve guardar sobre o processo,
é que ele não é infalível.
Geralmente não ficamos
completamente confiantes
de que o Dynamic Link
em que o usuário clicou,
na verdade, pertence ao usuário.
E você precisará saber disso
ao examinar o parâmetro
confiável de correspondência.
Se está configurado "fraco",
significa que achamos
que foi o Dynamic Link clicado,
mas não temos total certeza.

Indonesian: 
Ini artinya Anda tak perlu tambahkan
dukungan untuk Universal Link pada klien.
Beberapa pengembang melihat ini
di dokumentasi
dan cemas karena situs mereka
tak mendukung Universal Link.
Jangan khawatir.
Semua ini akan bekerja terlepas situs web
Anda mendukung Universal Link atau tidak.
Bagaimana jika aplikasi Anda tak diinstal?
Untuk itu, kita pantulkan lewat browser.
Inilah cara mengingat
data tautan untuk nanti.
Pada dasarnya, kita melakukan
sedikit finger print di sini.
Lalu kita melakukan JavaScript redirect
untuk mengarahkan Anda ke App Store.
Saat pertama pengguna membuka aplikasi,
pustaka Firebase memanggil jaringan
untuk tahu apakah pengguna sudah
pernah mengeklik Dynamic Link.
Satu hal yang perlu diingat,
proses ini tak selalu berhasil.
Biasanya kita tidak sepenuhnya yakin
Dynamic Link yang diklik pengguna
benar-benar milik pengguna tersebut.
Anda perlu mengetahuinya dengan memeriksa
parameter matchConfindence.
Jika nilainya weak,
berarti kita menduga
ini Dynamic Link yang diklik pengguna,
tapi kita tidak benar-benar yakin.

English: 
So this does mean on the
client you need to add support
for Universal Links.
And some developers see
this in the documentation
and they think, oh
no, I haven't set up
my website for Universal Links.
And so don't worry.
All of this will still
work whether or not
your website is set up
for Universal Links.
So what happens if your
app is not installed?
Well, for that, we first
bounce through a browser.
This is how we do some
work to remember that link
data for later.
Essentially, we kind of do some
light finger printing here.
Then we do a JavaScript redirect
to take you into the App Store.
And then when the user
first opens up the app,
the Firebase library
will make a network call
to see if it looks as though the
user had clicked on a Dynamic
Link previously.
Now, one thing to keep in
mind about this process
is that it is not foolproof.
We will usually not be
completely confident
that the Dynamic Link that
the user clicked on actually
belongs to this user.
And so you're going
to need to know this
by examining this match
confidence parameter.
If it's set to
weak, it means, we
think this is the Dynamic
Link the user clicked on,
but we're not completely sure.

Korean: 
따라서 고객의 경우
유니버설 링크에 대한 지원을
추가해야 한다는 겁니다
일부 개발자들은
문서에서 이 링크를 보고는
아, 안돼, 유니버설
링크를 위한 웹사이트를
설정하지 않았군, 하고 생각할 겁니다
걱정하지 마세요
여러분의 웹사이트가 
유니버설 링크를 위해
설정되든 안 되든
이 모든 게 다 잘 작동될 겁니다
앱이 설치되어 있지 않다면
어떻게 될까요?
그 경우엔 먼저
브라우저를 훑어봐야 해요
나중에 그 링크 데이터를
기억하기 위한 작업입니다
근본적으로 우린 간단한
지문 작업을 할 겁니다
그런 후 자바스크립트를 다시 보내서
앱 스토어로 가도록 하는 겁니다
그러면 사용자가 처음으로
앱을 열었을 때
파이어베이스 라이브러리는
네트워크 호출을 하겠죠
사용자가 다이나믹 링크를
이전에 클릭한 것처럼 보이는지
확인하기 위해서 말입니다
이제 이 과정에서 명심해야 할 것은
실패할 염려가 없는 것은
아니라는 겁니다
보통 사용자가 클릭한 다이나믹 링크가
실제로 이 사용자의 것이라고
완전히 장담할 수는 없을 겁니다
따라서 이 매치 컨퍼런스 파라미터를
조사해서 알아내야 하는 겁니다
이게 약하게 설정되었다면
사용자가 클릭한 다이나믹 링크이지만
완전히 확실하지는 않다는 것을 의미해요

Chinese: 
所以在客户端 你需要支持通用链接
有的开发者在文件中看到文档后可能会想
惨了 
我的网页还没有设置通用链接
不用担心
一切都能正常工作
不管你有没有设置通用链接
如果用户没有安装app 
那会发生什么呢
我们首先跳至浏览器
正是因为这样
我们才能在之后记住链接的数据
这就相当于在这里轻轻地按了指纹
然后我们利用一个JavaScript
将用户带至App Store
当用户首次打开app
Firebase库就会调用网络
看看用户先前是否点击了动态链接
大家要记住
这个过程并不是万无一失的
经常我们并不完全确定
是不是这位用户点击了那条动态链接
那你怎么知道呢
检查信心匹配参数
如果信心弱的话
那就表示 
我们认为这是用户点击的动态链接
但是我们并不完全确定

Spanish: 
Esto significa para el cliente
que necesitas soportar los
Universal Links.
Y algunos desarrolladores ven esto
en su documentación
y piensan, oh no, no ajusté mi sitio web
para Universal Links.
No te preocupes.
Todo esto funcionará independientemente
de si tu sitio está configurado para
Universal Links.
¿Qué sucede si tu app no está instalada?
Primero vamos a un navegador.
Así es como hacemos algo de trabajo
para recordar
la data de ese enlace para después.
Básicamente hacemos una suave
huella digital aquí.
Luego redireccionamos con JavaScript
para llevarte a la App Store.
Y cuando el usuario abre la app
por primera vez
la biblioteca de Firebase hará una llamada
de red
para ver si se ve como si el usuario
hubiera pulsado un Dynamic Link antes.
Ahora, una cosa para tener en cuenta
sobre este proceso
es que nada es a prueba de errores.
En general no estaremos confiados
completamente
de que el Dynamic Link que el usuario
pulsó
pertenece al usuario.
Así que deberás saber esto
examinando este parámetro de
coincidencia de confianza.
Si está fijado como débil, significa,
creemos que este es el Enlace Dinámico
que el usuario pulsó,
pero no estamos seguros.

Arabic: 
هذه يعني أنك في حاجة لإضافة دعم
للروابط الديناميكية.
وبعض المطورين يرون هذا في الوثائق
ثم يتذكرون ، لم أقم
بإعداد موقعي للروابط العالمية
لاتقلق إذاً.
كل هذا لايزال يعمل
سواء قمتَ
بإعداد موقعك للروابط العالمية أم لا.
إذاً ماذا يحدث إذا لم يتم
تثبيت تطبيقك؟
حسناً، بالنسبة لهذا، أولاً 
افتح المتصفح.
هذا وسيلة تذكر بيانات الرابط
بعد ذلك
في الأساس، نحن نقوم بوضع
بصماتنا المضيئة هنا.
بعد ذلك نقوم بجافاسكريبت redirect
لتأخذك إلي متجر التطبيقات.
وعندما يفتح المستخدم التطبيق لأول مرة
تقوم مكتبة Firebase بالاتصال بالشبكة
حتي تتأكد إذا كان يشبه مأراده المستخدم
علي الروابط الديناميكية في وقت سابق.
الآن، شئ واحد نضعه في الإعتبار
لهذه العملية
أنها ليست سهلة.
سنكون غالباً غير متأكدين تماماً
أن الروابط الدينامييكة
التي نقر عليها المستخدم
هي بالفعل خاصة بالمستخدم.
وستحتاج أن تعرف.
بفحص معيار مقارنة التأكد.
لو ضُبط كضعيف
هذا يعني
أنه الرابط الديناميكي 
الذي نقر عليه المستخدم
لكن لسنا متأكدين تماماً

Japanese: 
だからこれが意味を持つのは
クライアント側で
ユニバーサルリンクのサポートを
付ける必要があるのです
これを文書で見て開発者は
思ったりします--
「いや 私はウェブサイトに
ユニバーサルリンクを設定してない」と
だから心配ありませんよ
これの全ては
ユニバーサルリンクの設定に関係なく
動作します
ではアプリがインストールされてなければ
どうなるのでしょう？
それには 私達はまず
ブラウザを通り抜けます
こういう作業で後の為に
そのリンクデータを覚えておきます
本質的にここで光指紋を行い
JavaScript でリダイレクトして
あなたを App Store に連れて行きます
ユーザーが最初にアプリを開くと
Firebase ライブラリが
ネットワーク呼び出しをして
ユーザーが前にダイナミックリンクを
クリックしたかのように見えるか確かめます
さて １つこの過程で留意すべきことは
それは誰でもできる訳ではないことです
私達は通常
ユーザーがクリックした
ダイナミックリンクが
実際にこのユーザーに属するとは
完全にはわかりません
だから 皆さんはこれを知る必要がありますが
それにはこの matchConfidence 
パラメータを調べることです
「弱い」に設定してあれば
これがそのユーザーがクリックした
ダイナミックリンクだと思うけれど
完全にははっきりしないということです

Chinese: 
所以你的任务是要查看参数
确保在这种情况下不能向用户显示任何个人信息
简单谈谈动态链接的数据负载
在此我不会详讲动态链接的全部内容
我们有相关的详细文件
但我想强调一点
你的app在这种情况下接收的实际数据负载
就是链接参数
也许你注意到了
它看起来像一个URL
也许你也会疑问
为什么一定要是URL呢？
它可以是JSON对象或是其他东西吗？
答案是不可以
这是因为链接参数
其实有双重任务
这个数据负载可以让你的app阅读后
显示正确对象或是正确视图
除此之外
如果你的用户正在阅读的平台不支持动态链接
URL可以让用户跳转至可支持的平台
例如桌面网页浏览器
另外 
我觉得如果你已经在iOS设置了通用链接
那你基本上是必须要创建这个逻辑
将内容URL转化成app上合适的内容

Spanish: 
Así que es tu responsabilidad
mirar este parámetro
y asegurarte de que no muestras
ninguna información personal al usuario
si ese es el caso.
Nota rápida sobre la carga de datos
en los Dynamic Links,
no voy a adentrarme
en todo lo que hace a un Dynamic Link
completo.
Tenemos documentos para eso.
Pero quiero resaltar la carga de datos
que tu app recibe en este caso,
que es ese parámetro de enlace.
Notarán que se ve como un URL.
Y se preguntaran ¿por qué tiene que ser
un URL?
¿No podía ser un objeto JSON o algo?
Y la respuesta es no.
Y la razón es que este parámetro de enlace
esencialmente realiza dobles deberes.
No es solo la carga de datos lo que lee
tu app
para exhibir el objeto o vista correctos,
pero también es al URL al que llevaremos
a tu usuario
si están viendo el Dynamic Link
en una plataforma que no lo soporta,
como por ejemplo un navegador
de escritorio.
Además, creo que la idea
es que si ya te adelantaste
e implementaste Universal Links en iOS,
entonces ya has tenido que crear
toda esta lógica
para convertir el contenido URL
al contenido apropiado
en tu app.

Indonesian: 
Jadi, Anda bertanggung jawab
memeriksa parameter ini
dan pastikan Anda tak menampilkan
informasi apa pun ke pengguna
jika Anda tak yakin.
Catatan singkat tentang muatan data
dalam Dynamic Link.
Saya tidak akan membahas
keseluruhan Dynamic Link.
Ada dokumentasinya.
Saya ingin sorot muatan data aktual
yang diterima aplikasi Anda
dalam hal ini, yaitu parameter link.
Anda akan lihat ini tampak seperti URL.
Anda mungkin penasaran
kenapa harus berupa URL?
Tak bisa berupa
objek JSON atau lainnya?
Jawabannya adalah tidak.
Alasannya adalah
karena parameter link punya peran ganda.
Aplikasi Anda tak hanya
membaca muatan data
untuk menampilkan objek
atau tampilan yang tepat,
tapi juga membaca URL
yang dapat mengarahkan pengguna
jika pengguna melihat
Dynamic Link ini di platform
yang tidak mendukungnya,
seperti browser desktop.
Selain itu, idenya adalah jika Anda sudah
mengimplementasikan Universal Link di iOS,
maka Anda perlu membuat semua logika ini
untuk mengubah konten URL
menjadi konten yang sesuai di aplikasi.

Korean: 
따라서 이 파라미터를 살펴보고
이 경우 사용자에게 어떠한 개인 정보도
노출되지 않도록 하는 것은
여러분의 책임입니다
다이나믹 링크에서 데이터 페이로드를
짧게 설명하자면 전체
다이나믹 링크를 구성하는 모든 것을
다루지 않을 겁니다
이 설명에 대한 문서가 있어요
하지만 전 이 경우 앱이 받는
실제 데이터 페이로드를
강조하고 싶어요
바로 링크 파라미터 말입니다
URL과 비슷하다는 것을
눈치채셨을 겁니다
그리고 어째서 URL이어야
하는지 궁금하시겠죠
제이슨 객체 같은 걸 수는 없을까요?
대답은 할 수 없다입니다
이유는 이 링크 파라미터가 근본적으로
이중 의무를 수행하거든요
이 파라미터는 적절한
객체와 뷰를 보이기 위해
앱이 읽어내는 데이터
페이로드일 뿐 아니라
사용자가 데스트탑 웹 브라우저와 같이
이를 지원하지 않는 플랫폼에서
이 다이나믹 링크를 보고 있을 때
사용자를 데려갈 수도
있는 URL이기도 하거든요
게다가 iOS에 유니버설 링크를
이미 시행하지 않았다면
기본적으로 앱에서
URL 컨텐츠를 적절한 컨텐츠로
바꿔야 한다는 논리가
이미 만들어졌어야 한 겁니다

Arabic: 
لذلك، إنها مسؤليتك أن تنظر
لهذا المعيار
وتأكد أنك لاتظهر أي نوع 
من المعلومات الشخصية
للمستخدم، في حالة حدوث هذا.
ملاحظة سريعة عن
حمولة البيانات
في الروابط الديناميكية..
لا أريد أن أقول كل شيء
عن الروابط الديناميكية
لدينا ملفات لذلك.
لكن أريد أن أركز علي
حمولة البيانات الفعلية
التي يستقبلها تطبيقك 
في هذه الحالة
والتي هي معيار الرابط.
ستلاحظ أنها تشبة URL.
ويمكن أن تتعجب، لماذا يجب
أن تكون URL؟
ألا يمكن أن تكون JSON
أو شيء آخر؟
الإجابة هي لا.
السبب أن معيار الرابط في الأساس
يؤدي عمل مزدوج.
ليس فقط حمولة البيانات
التي يقرأها تطبيقك
حتي يعرض الشيء الصحيح
أو العرض الصحيح
لكنه أيضاً، انه URL
الذي يأخذ مستخدمك إليه
لو تم روؤية هذا الرابط الديناميكي
علي المنصة
والتي لاتدعمه، مثل متصفح الويب
علي سطح المكتب
بالإضافة، أنني أعتقد أن الفكرة
لو قمتَ بالمتابعة، وأضفت 
الروابط العالمية علي iOS
بعد ذلك، عليك أن تقوم أساساً
بإنشاء كل هذه الأشياء المنطقية
لتحويل محتوي URL
إلي محتوي ملائم بتطبيقك

Japanese: 
だからあなたの責任は
このパラメータを見て
たまたまそうなる場合
何らかの個人情報がユーザーに
表示されないことを確認することです
ダイナミックリンクのデータ
ペイロードについての注意点です
私はダイナミックリンクを全て構成する
全部の話はしません
それには文書があります
ですが この場合にアプリが受ける実際の
データペイロードを強調したかったのです
それはこのリンクパラメータです
URL のように見えますね
不思議でしょうね
「なぜこれが URL なんだろう」
「JSON オブジェクトとかじゃないのか？」と
答えはノーです
その理由は このリンクパラメータは
本質的に二重の務めをするからです
それは正しいオブジェクトとか
正しいビューを表示する為に
アプリが読み込む
データペイロードなだけでなく
私達がユーザーを連れていく
URL でもあるのです
もし彼らがこのダイナミックリンクを
サポートしないプラットフォーム上
例えばデスクトップ
ウェブブラウザで見てる場合にですね
又 もしもう iOS に
ユニバーサルリンクを実装してある場合
あなたはもう基本的に
この論理全部を作っていて
コンテンツ URL を アプリの
適切なコンテンツに変換しています

English: 
So it's your responsibility
to look at this parameter
and make sure you don't show
any kind of personal information
to the user if that
happens to be the case.
Quick note about
the data payload
in Dynamic Links-- I'm not
going to go into everything that
makes up a full Dynamic Link.
We have docs for that.
But I did want to highlight
the actual data payload
that your app receives
in this case, which
is that link parameter.
You'll notice that
it looks like a URL.
And you might wonder, why
does this have to be a URL?
Couldn't it be a JSON
object or something?
And the answer is no.
And the reason why is that
this link parameter essentially
performs double duty.
It's not only the data
payload that your app reads
in to display the right
object or the right view,
but it's also the URL that
we might take your user
to if they are viewing this
Dynamic Link on a platform that
doesn't support it, like for
instance a desktop web browser.
Plus, I think the idea
is that if you've already
gone ahead and implemented
Universal Links on iOS,
then you've already had to
basically create all this logic
to convert the content URL
into the appropriate content
in your app.

Portuguese: 
Então é sua responsabilidade
olhar para o parâmetro
e certificar-se de não mostrar
informações pessoais
para o usuário, se esse é o caso.
Observação sobre a carga de dados
nos Dynamic Links.
Não vou abordar todas as coisas
que compõem um Dynamic Link.
Temos documentos para isso.
Mas quero destacar a carga de dados
que seu aplicativo recebe,
que é o parâmetro de link.
Você vai perceber
que se parece com uma URL.
E pode se perguntar
por que tem que ser URL.
Não pode ser objeto de JSON ou algo assim?
E a resposta é "não".
E a razão é porque esse parâmetro de link
executa uma atividade dupla.
Não é apenas a carga de dados
que seu aplicativo lê
para exibir o objeto correto
ou a visão correta,
mas também que a URL
à qual podemos levar o usuário
se eles estão vendo o Dynamic Link
em uma plataforma
que não o suporta como, por exemplo,
um navegador de área de trabalho.
E mais, acho que as ideias
são de que se você seguiu
e implementou os Universal Links no iOS,
basicamente você deve ter criado
toda essa lógica
para converter o conteúdo da URL
em algo apropriado para seu app.

Japanese: 
だから多分それに相乗りできて
このダイナミックリンク
パラメータを解釈できるでしょう
ではダイナミックリンクの
いくつかの使用例があり
皆さんはそれらを利用できると思います
本当に良い１つは人々を
モバイルウェブサイトから
直接アプリに人々を得ることです
汎用のヘッダーで「アプリを
インストールしたらどう？」ではなく
それにダイナミックリンクを利用してれば
人々をウェブサイトで見ていたのと
同じコンテンツのアプリに直接連れて行けます
これは本当に嬉しいです--
それに汎用の歓迎ページより
ずっと良いですね
Lawrence が指摘したように
ユーザー間の共有にも本当に良いでしょ？
あるユーザーから別のユーザーへ
レシピを共有したければ
ダイナミックリンクでそれができます
表示しているコンテンツに基づいて
クライアントにダイナミックリンクを
生成させます
もしこのリンクが共有には醜ければ
REST API があり
それを短縮してくれます-- 
そうして基本的に
望む何でも共有します
共有シートを持ち出したり
電子メール内に直接リンクを埋め込めます
どうするかは皆さん次第です
最後に １番質問が多いと
思われるケースについて話します

Indonesian: 
Mungkin Anda bisa menumpangnya
untuk mengintrepetasikan
parameter Dynamic Link ini.
Ada beberapa penggunaan Dynamic Link
yang bisa Anda manfaatkan.
Salah satunya, mengarahkan pengunjung
dari situs selular langsung ke aplikasi.
Daripada header biasa
yang mengajak untuk menginstal aplikasi,
jika itu ditenagai dengan Dynamic Link,
Anda bisa arahkan pengunjung
langsung ke aplikasi
dengan konten yang terlihat di situs web.
Itu bagus. Sekali lagi, lebih bagus
dari laman pembuka biasa.
Seperti kata Lawrence, itu bagus
untuk berbagi antarpengguna, 'kan?
Jika mau berbagi resep
dari satu pengguna ke pengguna lain,
bisa gunakan Dynamic Link.
Anda harus meminta membuat klien
menghasilkan Dynamic Link
berdasar konten yang Anda tampilkan.
Jika tautannya tampak jelek
untuk dibagikan,
ada API REST yang akan
menyingkatnya untuk Anda.
Lalu membaginya sesuka Anda.
Anda bisa pakai lembar bagikan
atau langsung sematkan tautan dalam email.
Terserah Anda mau
melakukannya seperti apa.
Kita akan bahas kasus terakhir
yang mungkin paling sering ditanyakan.

Korean: 
그리고 이 다이나믹 링크 파라미터를
해석하기 위해 포함되는 겁니다
따라서 제 생각에
여러분이 활용할 수 있는
다이나믹 링크의 경우가
몇 개 있다고 봅니다
정말 좋은 경우는 사람들로
하여금 모바일 웹사이트에서 바로
앱으로 가도록 해주는 겁니다
일반적인 경우인
"저희 앱을 까는 게 어때요"
하는 식의 헤더를 쓰는 대신
다이나믹 링크로 만들어낸다면
사람들이 웹사이트에서
보고 있는 똑같은 컨텐츠가 보이는
앱으로 바로 데려갈 수 있는 겁니다
정말 좋아요
다시 한번 일반적인
환영 페이지 같은 것보다 훨씬 나아요
로렌스가 지적했듯이
사용자간의 공유에도 정말 좋아요
여러분이 한 사용자에서 다른
사용자에게로 레시피를 공유하고 싶다면
다이나믹 링크로 할 수 있어요
기본적으로 여러분이
보여주는 컨텐츠를 기초를 한
다이나믹 링크를 고객이
만들어내도록 하는 겁니다
이 링크가 공유하기에
좀 예쁘지 않다면 REST API가
링크를 줄여줄 것이고
기본적으로 여러분이 원하는 방식으로
공유하도록 해 줄 겁니다
공유 시트나 이메일에 첨부된
링크를 직접 가져오면 됩니다
어떻게 하는가는 여러분께 달려 있어요
마지막으로 마지막
케이스에 대해 말해 볼게요
아마 가장 많은 질문을
받는 주제일 것 같습니다

Spanish: 
Así que quizá puedes apoyarte en eso
para interpretar este parámetro
de Dynamic Links.
Hay un par de casos de uso
para los Dynamic Links
donde creo que puedes aprovecharlos.
Uno muy bueno es llevar gente de tu sitio
web móvil
directamente a tu app.
En vez de un genérico encabezamiento
del tipo
Oye, por qué no instalas
nuestra app,
si tienes eso motorizado por Dynamic
Links
entonces puedes llevar a la gente
directamente a tu app
con el mismo contenido que 
que veían en tu sitio web.
Y eso es muy bueno, mucho mejor
que una página de bienvenida genérica.
Como señaló Lawrence,
también es muy bueno para compartir
de usuario a usuario.
Si quieres compartir una receta
de un usuario a otro
puedes hacerlo con Dynamic Links.
Tu cliente tendrá que generar un Dynamic
Link
basado en el contenido que muestras.
Si este enlace se ve feo para compartir,
tenemos una REST API
que lo acortará para ti y básicamente
lo compartirá
como tu quieras.
Puedes traer una share sheet
o poner el enlace en un mail directamente.
Cómo quieres hacerlo depende de ti.
Y finalmente, hablaremos sobre
un último caso
del que probablemente
recibo más preguntas,

Chinese: 
所以你可以利用URL
诠释动态链接的参数
动态链接有几个用途
我觉得是可以好好利用的
第一个是让用户从移动页面
跳转至你的app
而不再是一些泛泛而谈的标题
嘿 为什么不来安装我们的app呢
如果你拥有动态链接的话
那你可以让用户直接跳转至app
App上的内容和他们此刻在
网页阅读的内容是一样的
这样效果真的很好
再说一次 
真的比那些没有针对性的欢迎页面好得太多
Lawrence在前面也提到
这也方便用户间分享
如果一个用户想将食谱分享给另一个用户
那么动态链接就可以实现
根据用户目前正在浏览的内容
你可以生成一个动态链接
如果PPT上这个链接看起来太不美观不便分享的话
还可以用REST API将网址缩短
所以你想用什么形式分享都可以
你可以创建一个分享页面
或者将链接直接嵌入到电邮里
形式完全取决于你
最后一个情况
也是最多人问的
也就是在社交媒体上分享动态链接

Arabic: 
وربما يمكنك أن تفعل هذا
لتفسير معيار الرابط الديناميكي
هناك استخدامات قليلة
للراوبط الديناميكية
وأعتقد أنه يمكنك الإستفادة منها.
إحدى المميزات، أنه يمكنك الحصول
علي الناس من موقع المحمول
الخاص بك إلي تطبيقك.
بدلاًمن الإستخدام العام
مرحباً
لماذا لاتثبت تطبيقنا
هذا نوع من العناوين
لو شغلْت هذا بالروابط الديناميكية
يمكنك أن تأخذ الناس مباشرة
إلي تطبيقك بنفس المحتوى
الذي وجدوه في موقعك علي الانترنت.
وهذا بالفعل جيد.. ومرة ثانية،
إنه أفضل بكثير
من صفحة الترحاب العامة.
كما أشار لورانس
إنها أيضاً
جيدة للمشاركة من مستخدم لآخر
أليس كذلك؟
إذا أردت مشاركة وصفة
من مستخدم لآخر
يمكنك ذلك
بالروابط الديناميكية.
وسوف تحتاج لجعل العميل يطلب
الرابط الديناميكي
بناءًا علي المحتوي الذي تقدمه..
لو ظهر ذلك الرابط
بطريقة سيئة للمشاركة
يكون لدينا REST API
والذي يقوم بإختصاره لك
وفقاً لما تريد.
ويمكن إحضار ورقة المشاركة
أو ارفاق الرابط بالإيميل مباشرة.
أنت تفعل ذلك كما تريد.
وأخيراً، سنتحدث عن آخر حالة
والتي وصلتني معظم
الأسئلة بخصوصها

Portuguese: 
E talvez você possa adicionar algo
para também interpretar
esse parâmetro de Dynamic Link.
Existem alguns usos para Dynamic Links
dos quais eu acho
que você pode se aproveitar.
Um muito bom é levar as pessoas
do seu site móvel para o aplicativo.
Em vez de um genérico,
"Por que não instala nosso app?"
Se ele é alimentado pelos Dynamic Links,
então pode levar as pessoas
direto ao aplicativo
com o mesmo conteúdo
que eles viam no seu site.
Isso é muito legal.
Novamente, muito melhor
do que uma página genérica de boas-vindas.
Como Lawrence mostrou,
é bom para compartilhar entre usuários.
Se você quer compartilhar uma receita
entre usuários,
pode fazer com os Dynamic Links.
Você vai fazer com que seu cliente
gere um Dynamic Link
baseando-se no conteúdo que mostra.
Se esse link parecer meio feio
para compartilhar,
temos um REST API
que vai encurtá-lo para você.
E você vai poder compartilhar como quiser.
Pode pôr avisos de compartilhamento
ou incorporar o link a um e-mail.
Como fazer, cabe a você.
E falaremos sobre um último caso,
o que devo receber mais perguntas,

English: 
And so maybe you can
kind of piggyback
on that to also interpret
this Dynamic Link parameter.
So there's a few use
cases for Dynamic Links
where I think you can kind
of take advantage of them.
One really good one is getting
people from your mobile website
directly into your app.
Instead of a generic,
hey, why don't you
install our app, kind of
header, if you have that
powered by Dynamic
Links, then you
can take people directly into
your app with the same content
that they were looking
at on your website.
And that's really nice--
again, much better
than sort of a
generic welcome page.
As Lawrence pointed
out, it's also
really good for
user-to-user sharing, right?
If you want to share a recipe
from one user to another,
you can do that
with Dynamic Links.
You're going to basically have
your client generate a Dynamic
Link based on the content you're
showing-- if this link looks
kind of ugly to share,
we have a REST API
that will shorten it for
you-- and then basically sort
of share it however you want.
You can bring up a share sheet
or embed the link in an email
directly.
However you do
that is up to you.
And finally, we'll talk
about one last case
that I probably get the
most questions about,

Portuguese: 
é compartilhar Dynamic Links
de um post de rede social.
Geralmente, compartilhar
de uma mídia social como Facebook,
funciona bem
e as pessoas olham para o site
diretamente com um navegador,
como o Safari ou o Chrome.
Tudo isso funciona bem.
O problema é quando tentam ver um post
diretamente no aplicativo do Facebook.
Enquanto o Universal Link funciona
se o destinatário
já tem o aplicativo instalado,
o app do Facebook tende a desativar
redirecionamentos do JavaScript
que tiram o usuário do app
e o levam à App Store, por exemplo.
Essa parte do fluxo
acaba sendo interrompida.
Em vez disso, o usuário acaba na URL
que foi definida no parâmetro de link.
A equipe procura maneiras
de fazer isso funcionar melhor.
Por enquanto, a solução alternativa
que eu gosto é que naquela URL
descrita no parâmetro de link,
vá em frente e crie um bom e normal link
para a App Store.
Porque é um link normal,
não um redirecionamento,
ele funcionará bem.
Vai perder um pouco
do conteúdo do link original,
que é um pouco da mágica
do Firebase Dynamic Link.
Mas por outro lado, tem usuários

Chinese: 
总体而言
在Facebook这样的社交媒体
网页上分享内容几乎没有问题
如果人们是在浏览器上阅读 
例如移动版Safari或者Chrome
这种情况 一切都无缝衔接
问题出现在人们在Facebook app上直接阅读
通用链接路径工作状态也没问题
如果用户已经安装了app
Facebook app经常禁用JavaScript页面重定向
这样用户就不能跳出Facebook app前往App Store了
这部分链条就断裂了
用户最终跳转至的只是你的链接参数里的URL
我们团队正在努力改进这个过程
我很喜欢的一个变通方法是
继续用链接参数里描述的URL
创建一个跳至App Store的常用链接即可
因为这是一个正常的链接
而不是Java Script页面重定向
所以这个链接是可以正常工作的
但是你会丢失初始链接的一些内容
也就是Firebase动态链接的魔力所在
但是从另一个角度看
你可以让用户安装app了

English: 
which is sharing Dynamic
Links from a social post.
See, in general, sharing from a
social media site like Facebook
works pretty well when people
are looking at the site
directly within a browser,
like Mobile Safari or Chrome.
This all works great.
The problem comes when
people try and view
a post from directly
within the Facebook app.
While the Universal
Link path works OK
if the recipient already
has the app installed,
the Facebook app tends to
disable JavaScript redirects
that take the user outside of
the app and to the App Store,
for instance.
And so this part of the
flow ends up broken.
And instead, the user
ends up at the URL
that was defined in
your link parameter.
And so the team's
looking at ways
we can make this process better.
But in the meantime,
a simple workaround
that I like is,
well, in that URL
that's described in
the link parameter,
just go ahead and create a plain
old, normal link to the App
Store.
Because this is a normal link,
not a JavaScript redirect,
this will work fine.
You will lose some
of that original link
context, which is some of the
Firebase Dynamic Link magic.
But on the other hand,
you've gotten users

Japanese: 
それはソーシャル投稿からの
ダイナミックリンクの共有です
一般的に Facebook のような
ソーシャルメディアからの共有が
よく機能するのはサイトを直接
モバイル Safari や Chrome のような
ブラウザ 内で見ている時です
これはすべてうまく機能します
問題は 直接 Facebook アプリ内から
投稿を見ようとする時です
ユニバーサルリンクのパスは
受信者が既にアプリをインストールしてる場合
うまく機能しますが
Facebook アプリは JavaScript の
リダイレクトを無効にしがちで
ユーザーをアプリ外へ
例えば App Store に連れて行きます
だから結局流れのこの部分が切れ
代わりに ユーザーは
リンクパラメータで定義された
URL に行ってしまいます
それでチームはこのプロセスを
良くできる方法を探っています
それまでは 
私が好きな簡単な回避策は
リンクパラメータで記述されている
その URL 内に
App Store への古い通常の
リンクを作ります
これは通常のリンクで
Javascript リダイレクトでないので
正常に動作します
その元のリンクコンテキストを
失います
それは Firebase 
ダイナミックリンクの魔法です
ですが他方でユーザーに

Indonesian: 
yaitu berbagi Dynamic Link
dari posting sosial media.
Secara umum, berbagi
dari situs sosial media seperti Facebook
bekerja baik saat pengguna melihat
situs langsung di browser,
seperti Mobile Safari atau Chrome.
Ini bekerja dengan baik.
Masalah muncul saat pengguna mencoba
melihat langsung dari aplikasi Facebook.
Meski jalur Universal Link bekerja baik
jika penerima sudah menginstal aplikasi,
aplikasi Facebook cenderung
menonaktifkan pengalihan JavaScript
yang mengarahkan pengguna
dari aplikasi tersebut ke App Store.
Bagian dari aliran ini jadi rusak.
Pengguna akhirnya mendapat URL
yang didefinisikan dalam parameter link.
Tim kami mencari cara
untuk membuat proses ini lebih baik.
Tapi sementara ini,
solusi yang saya suka adalah
dalam URL yang dideskripsikan
dalam parameter link,
buat saja tautan biasa ke App Store.
Karena ini tautan biasa,
bukan pengalihan JavaScript,
ini bekerja dengan baik.
Beberapa konteks tautan awal
akan hilang,
yang merupakan sebagian
keistimewaan Firebase Dynamic Link.

Arabic: 
وهي مشاركة الروابط الديناميكية
من منشور اجتماعي
بشكل عام، المشاركة من موقع وسيلة 
تواصل الإجتماعي مثل Facebook
يعمل بشكل جيد، عندما
يدخل الناس للموقع
مباشرة من خلال متصفح مثل
Safari للموبايل أو Chrome.
كل هذا يعمل جيداً.
المشكلة تأتي عندما يحاول الناس
أن يشاهدوا منشور مباشرة
من خلال تطبيق Facebook.
بينما مسار الرابط العالمي
يعمل بشكل جيد
لو كان المستخدم لديه
التطبيق مُثبت بالفعل
تطبيق Facebook يقوم بتعطيل
جافاسكريبت redirects
التي توجه المستخدم خارج التطبيق
وإلي متجر التطبيقات.
لذلك، هذا الجزء من هذا التدفق
تم تعطيله.
وبدلاً من ذلك، حصل المستخدم
علي URL
والذي تم تعريفه في 
معيار الرابط خاصتك.
لذلك يبحث الفريق عن طرق
لجعل هذه العملية أفضل.
لكن في الوقت الحالي
حل بسيط
وأحبه في URL
أنه يتم وصفه في معيار الرابط
فقط تابع، وأنشأ رابط 
عادي وبسيط إلي
متجر التطبيقات
لأ هذا رابط عادي وليس
جافاسكريبت redirect
سيعمل هذا بشكل جيد.
ستفقد بعض من محتوي الرابط الأصلي
الذي هو جزء من سحر
رابط Firebase الديناميكي.
لكن، من ناحية أخري
حصلت علي مستخدمين

Korean: 
SNS 포스팅에서
다이나믹 링크를 공유하는 겁니다
일반적으로 페이스북 같은
SNS 사이트에서 공유하는 것은
모바일 사파리나 크롬과 같은
브라우저 내에서
그 사이트를 바로
보고 있을 땐 꽤 잘 작동해요
이 경우 전부 잘 됩니다
문제는 사람들이 페이스북 앱 내에서
바로 포스팅을 보려고 할 때 생깁니다
유니버설 링크 경로는 잘 작동하는 반면
수신자가 그 앱을 이미 설치했다면
페이스북 앱은 자바스크립트로
전송 안 되도록 하는 경향이 있어요
이는 사용자를 앱 바깥으로, 예컨대
앱 스토어로 보내는 역할을 하는 겁니다
그래서 플로우의 이 부분은
결국 고장나게 됩니다
따라서 이 대신에 사용자는
결국 링크 파라미터에 정의된
URL에 있게 되는 겁니다
그래서 우리 팀은 이 과정을 조금 더
괜찮게 만들어 줄 방법을 찾고 있어요
하지만 동시에 제가
좋아하는 간단한 차선책은
링크 파라미터에 묘사된
URL로 가서
앱 스토어로 가는 평범하고 오래된
일반 링크를 만드는 겁니다
이 링크는 자바 스크립트 전송이 아닌
일반 링크이기 때문에 잘 될 겁니다
원래의 링크 컨텍스트 일부가 손실될텐데
이건 파이어베이스
다이나믹 링크 마법의 일부입니다
반면 사용자로 하여금
앱을 설치하도록 했으니

Spanish: 
que es compartir Dynamic Links
desde una publicación social.
En general compartir desde
un sitio mediático como Facebook
funciona bastante bien cuando las personas
ven el sitio
desde un navegador,
como Safari Móvil o Chrome.
Todo esto funciona bien.
El problema viene cuando las personas
intentan ver publicaciones
directamente desde la app
de Facebook.
Mientras la ruta de los Enlaces
Universales funciona bien
si el beneficiario ya tiene la app
instalada,
la app de Facebook tiende
a desactivar los redireccionamientos
de JavaScript que llevan al usuario
fuera de la app a la App Store,
por ejemplo.
Así que esta parte del flujo se rompe
y en cambio el usuario termina en el URL
que estaba definido en tu parámetro
de enlace.
El equipo está buscando formas
de mejorar este proceso.
Mientras, una solución
alternativa simple que me gusta
es en ese URL
descrito en el parámetro de enlace,
adelántate y crea un viejo y normal enlace
a la App Store.
Como es un enlace normal,
no una redirección de JavaScript,
funcionará bien.
Perderás algo de ese contexto
de enlace original,
que es algo de la magia de Firebase
Dynamic Link,

Japanese: 
アプリをインストールして貰えます
それもとても良いですね
私は多分長く話し過ぎたでしょうから
今度は Jonny に来てもらって
FirebaseUI ライブラリでできる
素敵なことを話して貰います
ありがとう Todd
やあ Johnny です
Firebase データベースのエンジニアです
今日 私は FirebaseUI について話します
本日早く FirebaseUI の
バージョン 1.0 を発表しました
iOS でこれらの機能の幾つかの使い方を
模索しているところです
ですが舞台裏で
FirebaseUI がその仕事で
実際に使うトリックの幾つかを見ていきます
では挙手をお願いします--
今日の発表前に FirebaseUI のことを
聞いてた方は？
わぁ 沢山いますね
実際使ったことがある方？
これも多いですね
FirebaseUI を使ったことが無い場合
是非調べてみてください

Spanish: 
pero por otro lado, has conseguido
que los usuarios instalen tu app,
y eso es bueno también.
Probablemente he hablado
demasiado tiempo.
Dejaré que Jonny venga
y hable sobre algunas cosas geniales
que puedes hacer
con la biblioteca FirebaseUI.
Gracias, Todd.
Hola, mi nombre es Jonny
y soy ingeniero en la base de datos
de Firebase.
Hoy estaré hablando sobre FirebaseUI.
Hoy más temprano anunciamos la versión 1.0
de FirebaseUI
y estaremos viendo cómo usar
algunas de esas características en iOS.
Pero también estaremos viendo
detrás de escenas
y algunos de los trucos que FirebaseUI
usa para hacer lo que hace.
Una pequeña votación a mano alzada,
¿quién había oído de FirebaseUI
antes del anuncio de hoy?
Wow, esas son muchas manos.
¿Quién ha usado FirebaseUI?
Aún son muchas manos.
Si no han usado FirebaseUI,
recomiendo que le echen un vistazo.

Chinese: 
这不也是一件好事吗
我讲了蛮久了
现在把时间交给Jonny
他将讲述可以利用Firebase UI 库做哪些酷炫的事情
谢谢 Todd
大家好 
我叫Jonny
我是Firebase数据库的一名工程师
今天我要来谈谈FirebaseUI
今天早些时候
我们发布了FirebaseUI 1.0
那现在就让我们看看如何将部分特征用于iOS
但是我们的视角是幕后工作
也就是Firebase UI各项工作的实际诀窍是什么
请问有哪位在以前听说过Firebase UI吗？
如果有的话 请举一下手
哇 看来人数还不少
有谁实际用过FirebaseUI的吗？
依旧有很多用户
如果你还没有用过FirebaseUI的话
强烈建议大家去体验一下
那FirebaseUI是什么呢？

Indonesian: 
Tapi di sisi lain, pengguna menginstal
aplikasi Anda, dan itu bagus juga.
Saya mungkin sudah bicara terlalu lama.
Sekarang saya persilakan Jonny
untuk membahas hal keren yang bisa
dilakukan dengan pustaka Firebase UI.
Terima kasih, Todd.
Hai, nama saya Jonny.
Saya adalah teknisi Firebase Database.
Hari ini, saya akan membahas FirebaseUI.
Tadi, kami mengumumkan
FirebaseUI versi 1.0.
Kita akan melihat
cara menggunakan fiturnya di iOS.
Kita juga akan melihat di balik layar
dan beberapa trik
yang digunakan FirebaseUI
untuk menjalankan fungsinya.
Mohon tunjuk tangan, siapa yang sudah
pernah mendengar tentang FirebaseUI
sebelum pengumuman hari ini?
Ada banyak.
Siapa yang sudah pernah
menggunakan FirebaseUI?
Banyak juga.
Jika Anda belum pernah pakai FirebaseUI,
saya sarankan untuk mencobanya.
Jadi, apa itu?

Arabic: 
يقوموا بتثبيت تطبيقك
وهذا جيد أيضًا.
إذاً، في الغالب لقد تحدثت كثيراً
والآن، سأقوم بدعوة جوني
ليتحدث عن بعض الأشياء الجيدة
التي يمكن أن تفعلها
بـFirebaseUI library.
شكراً لك، تود.
مرحباً، اسمي جوني
وأنا مهندس
في قاعدة بيانات Firebase 
اليوم، سأتحدث عن FirebaseUI.
في وقت سابق، أعلنا النسخة 1.0
من FirebaseUI.
وسنري كيفية استخدام بعض 
من هذه الميزات في iOS.
وسنرى من خلف الكواليس
بعض الحيل التي يستخدمها
FirebaseUI
فعلياً، ليؤدي عمله.
ليرفع يديه سريعاً..
من سمع عن FirebaseUI
قبل يوم الإعلان؟
هناك الكثير من الأيادي.
من فعلياً استخدم FirebaseUI؟
لاتزال هناك أيادي كثيرة.
إذا لم تستخدم FirebaseUI
أنصحك بمراجعة ذلك.

English: 
to install your app, and
that's pretty good, too.
So I've probably been
talking for way too long.
I am now going to
have Jonny come up
and talk about some cool things
you can do with the FirebaseUI
library.
JONNY DIMOND: Thank you, Todd.
[APPLAUSE]
Hi, my name's Jonny,
and I'm an engineer
on the Firebase database.
And today I'll be
talking about FirebaseUI.
So earlier today, we announced
version 1.0 of FirebaseUI.
And we'll be looking how to use
some of these features in iOS.
But we'll also be looking
behind the scenes and some
of the tricks that
FirebaseUI actually
uses to do what it does.
So a quick show of hands--
who heard of FirebaseUI
before the announcement today?
Wow, that's a lot of hands.
Who has actually
used FirebaseUI?
Still a lot of hands.
So if you haven't
used FirebaseUI,
I do recommend checking it out.

Korean: 
이것도 꽤 좋은 겁니다
제가 너무 길게 말하는 것 같아요
이제 조니를 불러서
파이어베이스 UI 라이브러리로
할 수 있는 멋진 것들에 대해
얘기하도록 할게요
고마워요, 토드
안녕하세요, 전 조니이고
파이어베이스 데이터베이스의
엔지니어입니다
오늘 전 파이어베이스 UI에
대해 발표할 겁니다
오늘 좀 전에 파이어베이스 UI의
버전 1.0을 발표했어요
iOS에서 이 기능들 일부를
어떻게 이용하는지 살펴 볼게요
하지만 그 이면도 볼 겁니다
파이어베이스 UI가 이를 위해
실제로 사용하는 기술들도 알아 볼게요
그러면 오늘 발표가
있기 전에 파이어베이스 UI를
들어 보신 분 손 들어 주실래요?
와, 많이 드셨네요
파이어베이스 UI를
실제로 사용해 보신 분은요?
여전히 많으시네요
파이어베이스 UI를 사용한 적이 없다면
확인해보시길 추천할게요

Portuguese: 
para instalar seu aplicativo
e isso também é bom.
Provavelmente falei por muito tempo.
Agora vou pedir que Jonny suba
e fale de coisas legais a fazer
com a biblioteca do FirebaseUI.
Obrigado, Todd.
Oi, meu nome é Jonny
e eu sou um engenheiro
do banco de dados do Firebase.
E hoje eu vou falar sobre FirebaseUI.
Hoje mais cedo,
anunciamos a versão 1.0 do Firebase UI.
E vamos ver como usar
alguns desses recursos no iOS.
Mas também vamos olhar os bastidores
e alguns dos truques que o FirebaseUI
usa para fazer o que faz.
Respondam levantando as mãos,
quem ouviu falar em FirebaseUI
antes do anúncio de hoje?
Uau, são muitas mãos.
Quem já usou o FirebaseUI?
Ainda temos muitas mãos.
Então se você não usou o FirebaseUI,
eu recomendo que dê uma conferida.

Indonesian: 
Ada beberapa UI atau pola UX di Firebase
ketika Anda membuat
aplikasi dengan Firebase
yang selalu muncul.
Anda sebenarnya tak ingin mengulangnya,
dan Anda tak mau menulis
kodenya berulang kali.
Itulah gunanya FirebaseUI.
FirebaseUI mengambil pola umum ini
dan membungkusnya
dalam panggilan pustaka yang sederhana.
Ini tersedia di iOS dan Android.
Ini sumber terbuka. Anda bisa lihat
tautan ke versi iOS di slide ini.
Kontribusi komunitas selalu
diterima dan diapresiasi.
Satu hal yang kami tambahkan
baru-baru ini adalah integrasi
dengan Firebase Storage.
Jika Anda di browser,
Firebase Storage sangat mudah digunakan
karena Anda bisa dapatkan kembali URL.
Anda hanya perlu
masukkan URL itu ke aplikasi.
Browser akan lakukan semuanya untuk Anda.
Akan mengunduhnya dan melakukan cache.

Arabic: 
إذاً فما ماهو؟
هناك نوعين من UI أو أنواع
من UX في Firebase
عندما تقوم بتطوير تطبيقات
باستخدام Firebase
والتي تظهر طوال الوقت.
أنت حقاً لاتريد تكرار نفسك
ولاتريد أن تكتب البرمجة
مرات ومرات.
ولهذا قد جاء FirebaseUI
إنه يأخذ تلك الأنواع الشائعة ويضمها
في صورة مكالمات مكتبية بسيطة.
هذا متاح لكلًا من
iOS وAndroid.
إنه مفتوح المصدر.
يمكنك رؤية الرابط إلي نسخة iOS 
علي شريحة العرض من هنا.
ومساهمات المجتمع دائماً
مقبولة ومُقدرة.
هناك شيء أضفناه حديثًا
هو التكامل مع
تخزين Firebase 
إذاً، لو استخدمت مُتصفح نتْ
فإن تخزين Firebase 
من السهل استخدامه.
لأنك تستطيع الحصول علي URL
وفقط تضع هذا الـ URL
بتطبيقك، وسيقوم المتصفح
بفعل كل شيء لك.
سيقوم بتحميله.
سيخزنها مؤقتًا.

Chinese: 
Firebase有好几个重复使用的UI或者UX模版
如果你用Firebase开发app的话
你又不想来去重复
总是写一样的代码
这时候FirebaseUI就可以发挥作用了
它集结了这些常见的模版
把它们做成简单的库调用
iOS和安卓均适用
它是开源的
屏幕上是iOS版本的链接
我们接受并非常感激社群贡献
我们最近增添的一个事件是
与Firebase存储(Firebase Storage)兼容
如果你是在用网页浏览器
Firebase存储使用是非常便捷的
因为它会返回一个URL
你直接把URL放进app里
网页浏览器就会做剩下的事情
它可以完成下载
并做缓存处理

Korean: 
그렇다면 파이어베이스 UI란 뭘까요?
파이어베이스에는 몇 개의
UI 혹은 UX 패턴이 있어요
파이어베이스로 앱을 개발할 때
항상 나타납니다
그리고 계속 반복하기 싫고
코드를 반복해서 쓰기도 싫을 겁니다
그때 파이어베이스 UI가 유용한 겁니다
이 공통된 패턴을 써서
간단한 라이브러리 호출로
감싸는 겁니다
이건 iOS와 안드로이드
모두에서 이용할 수 있어요
오픈 소스입니다
여기 슬라이드에 iOS 버전으로
가는 링크를 보실 수 있어요
커뮤니티 공헌은 항상 열려있고
감사하게 생각하고 있어요
최근에 추가된 것은
파이어베이스 저장으로의
통합입니다
웹브라우저에 있다면 파이어베이스 저장은
사용하기 아주 쉬워요
URL을 다시 받을 수 있기 때문에
그냥 앱에 URL을 넣으면
브라우저가 전부 알아서 해줄 겁니다
다운로드 할 것이고
캐싱할 겁니다

Portuguese: 
Então, o que é?
Há alguns padrões de UI e UX no Firebase
quando você desenvolve apps com o Firebase
que aparecem o tempo inteiro.
E você não quer se repetir,
você não quer escrever o código
de novo e de novo.
E é aí que o FirebaseUI aparece.
Ele pega esses padrões comuns e os coloca
em solicitações simples de biblioteca.
Está disponível para Android e para iOS.
Tem código aberto.
É possível ver o link
para a versão iOS nesse slide aqui.
E as contribuições da comunidade
são sempre aceitas e apreciadas.
Uma coisa que adicionamos recentemente
foi a integração com o Firebase Storage.
Se você está em um navegador,
Firebase Storage é muito fácil de usar.
Porque você pode pegar uma URL
e colocar essa URL no seu aplicativo,
e o navegador vai fazer tudo por você.
Ele vai fazer o download.
Vai salvar no cache.

Spanish: 
Así que, ¿qué es?
Hay varios patrones UI o UX en Firebase
cuando estás desarrollando apps
con Firebase
que aparecen todo el tiempo.
Y realmente no quieres repetirte
y no quieres escribir el código una
y otra vez.
Y allí es donde aparece FirebaseUI.
Toma estos patrones comunes
y los envuelve
en simples library calls.
Está disponible para iOS y Android.
Es de código abierto.
Pueden ver el enlace en la versión de iOS
en la diapositiva de aquí.
Y las contribuciones de la comunidad
siempre son aceptadas y apreciadas.
Una cosa que añadimos recientemente
fue la integración de Firebase Storage.
Si estás en un navegador, Firebase Storage
es muy fácil de usar
porque puedes recuperar un URL,
y solo pones ese URL en tu app
y el navegador hará todo por ti.
Lo descargará,
hará el caché.

Japanese: 
それは何でしょう？
Firebase には幾つかの UI や
UX パターンがあり
Firebase でアプリを開発してる時
それがいつも表示されます
本当は皆さんは繰り返したくないし
何度もコードを書きたくありませんね
そこで FirebaseUI の出番です
これらの共通パターンをとって
簡単なライブラリ呼び出しにラップします
それは iOS と Android の
両方で利用可能で
オープンソースです
ここのスライドで iOS バージョンへの
リンクが見えますね
そしてコミュニティの貢献は常に
受け入れ感謝します
１つ最近加えたものは
Firebase ストレージとの統合でした
ウエブブラウザの中なら
Firebase ストレージは
とても使いやすいです
URL を取得できるので
アプリにその URL を入れると
あとはブラウザが全部やってくれます
それをダウンロードして
キャッシュします

English: 
So what is it?
There's a couple of UI or
UX patterns in Firebase
when you're developing
apps with Firebase
that show up all the time.
And you don't really
want to repeat yourself,
and you don't want to write
the code over and over again.
And that is where
FirebaseUI comes in.
It takes these common
patterns and wraps them
in simple library calls.
It is available for
both iOS and Android.
It's open source.
You can see the link to the
iOS version on the slide here.
And community
contributions are always
accepted and appreciated.
So one thing we added
recently was the integration
with Firebase Storage.
So if you're in a web
browser, Firebase Storage
is very easy to use.
Because you can get
back a URL, and you just
put that URL in your
app, and the browser
will do everything for you.
It will download it.
It will do caching.

English: 
On a mobile device,
that's not quite true.
You have to do that manually.
And that's kind of work that you
don't necessarily want to do.
So there's this
great open source
library called SDWebImage.
And we didn't want to
reinvent the wheel,
so we integrated Firebase
Storage with SDWebImage.
So where you could
previously pass in a URL
and the SDWebImage
library would actually
go ahead and download the image
and do the caching for you,
you can now pass in
a storage reference
and the FirebaseUI library
will do everything for you.
When using the
Firebase database,
oftentimes you have
something like a collection,
and you want to display
this collection or this list
of things to the user.
And a great way to display
that is, well, showing a list.
And one way to do this on
iOS is using a UITableView.
FirebaseUI does also
support UICollectionView.

Chinese: 
移动设备可就不能这么做了
你必须手动完成这些工作
但也许你并不想做这些繁琐的事情
所以还有一个非常伟大的开源库
它叫SDWebImage
我们并不想重新开发一个系统
所以我们实现了Fiebase存储
与SDWebImage的兼容
以前你可以写一个URL
SDWebImage就会接棒
自动下载图片并储存
现在你可以直接写一个存储代号
FirebaseUI 库就会为你完成剩下的事情
当我们使用Firebase数据库的时候
经常会用到一个集合
那你想向用户显示这个集合或是这列数据
很方便的一个显示方法就是演示一列数据
要在iOS上实现
其中一个方法就是使用UITableView
FirebaseUI库是支持UICollectionView的

Indonesian: 
Di perangkat selular, tidak seperti itu.
Anda perlu melakukannya secara manual.
Itu hal yang tak ingin Anda lakukan.
Ada pustaka sumber terbuka bagus
yang disebut SDWebImage.
Kami tak mau membuat yang sudah ada.
Jadi, kami mengintegrasikan
Firebase Storage dengan SDWebImage.
Di tempat Anda bisa memasukkan URL,
lalu pustaka SDWebImage mengunduh
gambarnya dan melakukan cache,
kini Anda bisa memasukkan
referensi penyimpanan
dan pustaka FirebaseUI akan
melakukan semuanya untuk Anda.
Saat menggunakan Firebase Database,
seringkali Anda punya
sesuatu seperti koleksi.
Anda ingin menampilkan koleksi
atau daftar sesuatu ke pengguna.
Cara bagus untuk menampilkannya
adalah dengan menampilkan daftar.
Satu cara untuk membuat ini
di iOS yaitu memakai UITableView.
FirebaseUI juga mendukung
UICollectionView.

Spanish: 
En un dispositivo móvil, eso no es cierto.
Tienes que hacerlo manualmente,
y ese es trabajo que no necesariamente
quieres hacer.
Así que hay una biblioteca
de código abierto
llamada SDWebImage.
No queríamos reinventar la rueda,
así que integramos Fireabse Storage
con SDWebImage.
Donde antes podías pasar un URL
y la libería SDWebImage se adelantaría
y descargaría la imagen y haría el caché
por ti,
ahora puedes pasar una referencia
de almacenamiento
y la librería FirebaseUI hará todo por ti.
Cuando usas la base de datos de Firebase
muchas veces tienes una especie
de colección
y quieres exponer esta colección o lista
de cosas al usuario.
Una buena forma de exponerlo es
mostrando una lista,
y una forma de hacer esto en iOS
es usando una UITableView.
FirebaseUI también soporta
UICollectionView.

Arabic: 
علي موبايل، وهذا ليس صحيح تمامًا.
يجب عليك فعل هذا يدوياً.
وهذا النوع من العمل، ليس
من الضروري أن تفعله.
يوجد مكتبة ذات 
مصدر مفتوح كبير
يُطلق عليها
SDWebImage
ونحن لن نعيد اختراع العجلة.
لذلك نقوم بدمج تخزين Firebase
مع SDWebImage
حيث يمكنك مسبقًا
تمريره في URL
ومكتبة SDWebImage 
ستقوم فعليًا
بالإستمرار وتحميل الصورة
والتخزين مؤقتًا لك
يمكنك الآن تمريره
في مرجع التخزين
وستقوم مكتبة FirebaseUI
بفعل كل شيء لك.
عندما تستخدم قاعدة بيانات Firebase
عادة يكون لديك شيء مثل مجموعة
وأنت تريد أن تعرض 
هذه المجموعة أو قائمة
الأشياء للمستخدم.
والطريقة الجيدة لعرض هذا
بإظهار القائمة.
والطريقة الوحيدة لفعل هذا علي iOS 
هو بإستخدام UITableView.
FirebaseUI يدْعم أيضًا
UICollectionView.

Korean: 
모바일 기기에서는 그렇지 않아요
이걸 수동으로 해야 합니다
그리고 반드시 하고 싶은 일은 아닙니다
따라서 이 좋은 오픈 소스
라이브러리가 있어요
SD웹이미지라고 불리는 겁니다
이미 있는 것을 다시 만드느라
시간 낭비할 필요없이
SD웹이미지로 파이어베이스
저장을 통합했어요
따라서 이전에는 URL에서 패스해서
SD웹이미지 라이브러리가
실제로 이미지를 다운 받아서
캐싱을 해줬다면 이제는
저장 레퍼런스에서 패스할 수 있고
파이어베이스UI 라이브러리가
알아서 해줄 겁니다
파이어베이스를 사용하다보면
종종 컬렉션 같은 것이 있어요
이 컬렉션이나 이 목록을
사용자에게 보여주고 싶은거죠
이걸 보여주는 정말 좋은 방법은
목록을 보여주는 겁니다
그리고 iOS에서 이걸 하는 방법은
UI테이블뷰를 이용하는 겁니다
파이어베이스UI는
UI컬랙션뷰도 지원해요

Japanese: 
モバイルデバイスでは
それはあまりあてはまりません
それを手動でしなくてはなりません
それは必ずしもやりたくない仕事です
そこで SDWebImage という
この素敵な
オープンソースライブラリがあります
車輪の再発明をしたくなかったので
Firebase ストレージを
SDWebImage と統合しました
だから以前 URL を渡せる場所で
SDWebImage ライブラリは実際に
画像をダウンロードし
キャッシュしてくれます
今度は ストレージ参照を渡すと
FirebaseUI ライブラリは
すべてをやってくれます
Firebase データベースを使ってる時
多くの場合 皆さんはコレクションのような
ものを持っていて
このコレクションとか物のリストを
ユーザーに表示したいものです
それを表示する良い方法は
リストを表示することです
iOS でこれをする１つの方法は
UITableView を使うことです
FirebaseUI は又 UICollectionView も
サポートしています

Portuguese: 
Em um dispositivo móvel,
isso não é bem verdade.
Tem que fazer manualmente.
E esse é um trabalho
que você não quer muito fazer.
Então tem essa biblioteca de código aberto
chamada SDWebImage.
E nós não queríamos reinventar a roda,
então integramos o Firebase Storage
com a SDWebImage.
Então onde você poderia antes
passar uma URL
e a biblioteca da SDWebImage
poderia seguir em frente,
fazer o download da imagem
e salvar no cache por você,
agora você pode passar
em uma referência de armazenamento
e a biblioteca do FirebaseUI
vai fazer tudo por você.
Quando se usa
o banco de dados do Firebase,
muitas vezes você tem algo
como uma coleção,
e você quer exibir a coleção
ou a lista de coisas para o usuário.
E uma ótima maneira de exibir
é mostrando uma lista.
E uma maneira de fazer isso no iOS
é usando o UITableView.
FirebaseUI também suporta
o UICollectionView.

English: 
But we'll be looking
on how you can
use the UITableView to display
Firebase database data.
So what steps are necessary
to display a list of things?
It's actually
three simple steps.
The first thing you need
is a Firebase query.
And this can be any reference.
This can be any query.
You can add limits
you can start at.
We don't care where
it is in the Firebase.
What we do care is how
the data looks like.
And a general rule
is if you're using
push IDs to add items
to this collection,
then your data is good to go.
So now we have this query.
Next thing we have to do
is create a data source.
So if you've been
using UITableView,
you know you have to populate
it using a data source.
And this is where
FirebaseUI comes in.
So you pass in the
query so it knows
where to get the data from.
You pass in the table view so
it knows where to put the data
and where to load the UI.

Portuguese: 
Mas estaremos vendo como você pode usar
o UITableView para exibir
os dados do banco de dados do Firebase.
Que etapas são necessárias
para exibir uma lista de coisas?
São três etapas básicas.
A primeira coisa que você precisa
é consultar o Firebase.
E pode ser qualquer referência,
qualquer consulta.
Pode adicionar limites de onde começar.
Não importa onde está no Firebase.
Importa com o que o dado se parece.
E a regra geral
é que se você usa IDs de envio
para adicionar itens a essa coleção,
então o seu dado está pronto.
Agora temos essa consulta.
A próxima coisa que temos que fazer
é criar uma fonte de dados.
Então se você tem usado o UITableView,
sabe que tem que preenchê-lo
utilizando uma fonte de dados.
E é aí que o FirebaseUI entra.
Então você pode processar a consulta
para saber onde conseguir o dado.
Você processa a exibição de tabela
para saber onde pôr o dado
e onde carregar o UI.

Japanese: 
だが 私達が目を向けているのは
皆さんがどう UITableView を使って
Firebase データベースの
データを表示するかです
物のリストを表示するには
どんな手順が必要でしょうか？
実は３つの簡単な手順です
まず必要なのは Firebase クエリです
これは任意の参照であり
任意のクエリです
開始する場所に制限を追加することができます
それが Firebase のどこでも構いません
私達が気にするのは
データがどんな風に見えるかです
一般的なルールは
あなたがプッシュ ID を使用して
このコレクションに項目を追加する場合
あなたのデータは準備ができています
今 私たちにはこのクエリがあります
次は データソースを作る必要があります
だから 皆さんが UITableView を
使ってる場合
データソースを使用してそれを埋める
必要があると知っていますね
ここが FirebaseUI の出番です
クエリを渡すと
それはデータをどこから取得するか知ります
TableView を渡すと
どこにデータを置き
どこに UI を読み込むか知ります

Spanish: 
Pero estamos viendo cómo puedes usar
UITableView
para exponer datos de la base de datos
de Firebase.
Así que ¿qué pasos son necesarios
para exhibir una lista de cosas?
Son en realidad tres simples pasos.
Primero necesitas una consulta
de Firebase.
Puede ser cualquier referencia.
Puede ser cualquier consulta.
Puedes añadir límites con los que puedes
comenzar.
No nos importa dónde está en Firebase.
Lo que nos importa es cómo se ve
este dato.
Y una regla general es que si estás usando
push IDs
para agregar cosas a esta colección
tus datos está bien.
Así que tienes esta consulta.
Lo siguiente que debemos hacer
es crear una fuente de datos.
Así que si has estado usando
UITableView
sabes que debes darle datos usando
una fuente de datos.
Y aquí es donde entra FirebaseUI.
Así que pasas la consulta
para que sepa de donde sacar los datos.
Pasas la table view para que sepa
dónde poner los datos
y dónde cargar el UI.

Arabic: 
ولكننا نبحث كيف يكون بمقدورك
استخدام UITableView لعرض
بيانات قاعدة بيانات Firebase 
إذاً، ماهي الخطوات الضرورية
لعرض قائمة الأشياء؟
إنها في الحقيقة ، ثلاث خطوات
أول شيء تحتاجه هو
Firebase query
ويمكن أن يكون هذا أي مرجع.
ويمكن أن يكون أي query
يمكنك وضع حدود
يمكنك البدء عندها
نحن لانهتم بوضعها في Firebase.
مانهتم به هو كيف تبدو البيانات.
وهناك قاعدة عامة وهي
لو كنت تستخدم
push IDs لإضافة عناصر
لهذه المجموعة
فإن بياناتك تصبح جيدة.
والآن لدينا query
الشيء التالي هو انشاء
مصدر للبيانات.
لذلك، لو كنت تستخدم
 UITableView
فأنت تعرف أن عليك ملء ذلك
باستخدام مصدر البيانات.
ولهذا يوجد FirebaseUI
وقمت بالدخول في query 
حتي يعرف
من أين يستردْ البيانات.
وتدخله في عرض الجدول
حتي يعرف أين تم وضع البيانات
وأين يتم تحميل UI.

Indonesian: 
Tapi kita akan bahas
cara memakai UITableView
untuk menampilkan data
dari Firebase Database.
Tahap apa saja yang diperlukan
untuk menampilkan daftar?
Ada tiga tahap sederhana.
Pertama, Anda perlu kueri Firebase.
Ini bisa berupa referensi
dan kueri apa pun.
Anda bisa tambahkan batas awalnya.
Tak peduli letaknya di Firebase.
Yang penting adalah tampilan data.
Aturan umumnya adalah jika Anda gunakan
ID push untuk menambah item ke koleksi,
maka data Anda sudah siap.
Sekarang, kita punya kueri ini.
Berikutnya, kita perlu
membuat sumber data.
Jadi, jika Anda pernah pakai UITableView,
Anda tahu bahwa Anda perlu
mengisinya dengan sumber data.
Inilah gunanya FirebaseUI.
Anda masukkan kueri sehingga ia tahu
di mana harus mengambil data.
Anda masukkan tableView
agar ia tahu di mana meletakkan data
dan tempat memuat UI.

Chinese: 
但我们现在要看的是
如果使用UITableView
显示Firebase数据库里的数据
要展示一列事物
哪些步骤是必备的呢？
其实是三个很简单的步骤
第一步就是Firebase资料查询(query)
它可以是任何参考资料
也可以是任何查询
你还可以增添限制
我们不在乎它是不是存在于Firebase
那我们真正在乎的是数据的样式
一个通用的规则是
如果你是用push ID将事件增添到这个集合里
那么你的资料已经准备好了
在完成资料查询之后
我们要创建一个数据源
如果你一直用的是UITableView
那么你需要使用数据源来复制
此时FirebaseUI库就可以发挥作用了
你输入查询资料之后
它会知道从哪里获得这些资料
你再把资料输入UITableView 
它会知道把数据储存在哪里
在哪里加载UI
然后你输入一个populate cell回调函数

Korean: 
그러면 파이어베이스
데이터베이스 데이터를
보여주기 위해 UI테이블뷰를
어떻게 이용할 수 있을지 볼 겁니다
그러면 목록을 보여주기 위해서는
어떤 단계가 필요할까요?
실제로 3가지의 간단한 단계가 있어요
처음으로 필요한 것은
파이어베이스 쿼리입니다
이건 뭐든 참조 될 수 있어요
아무 쿼리나 될 수 있어요
시작할 수 있는 제한점도
더할 수 있어요
파이어베이스에서 어디에
있는지는 상관 없어요
중요한 것은 데이터가
어떻게 생겼는가 입니다
일반적인 법칙은 이 컬렉션에
항목을 더하기 위해
푸쉬 ID를 쓰고 있다면
그 데이터는 쓰셔도 좋다는 겁니다
이제 이 쿼리가 있으니
다음으로 할 일은
데이터 소스를 만드는 겁니다
UI테이블뷰를 사용해 오고 있다면
데이터 소스를 이용해서 파퓰레이트
해야한다는 걸 알고 있을 겁니다
이때 파이어베이스 UI가 들어오는 겁니다
쿼리를 패스하면 데이터가 어디에서
오는지 알 수 있는 겁니다
테이블뷰를 패스해서
데이터를 어디에 놓을지
또 UI를 어디에 로딩할지 아는 겁니다

Portuguese: 
Então você processa
uma célula de redistribuição.
O FirebaseUI não escreve o UI para você.
Infelizmente, por fim,
você ainda tem que fazer você mesmo.
Mas isso é mais fácil para você.
Então para cada item na coleção,
processaremos essa célula
de redistribuição.
E pode usar os mesmos padrões
que você tem costume no iOS.
Então pode reutilizar identificadores
e você pode remover a célula
pelo bom desempenho.
Depois daremos a você uma foto instantânea
e você poderá usar essa foto
para preencher a célula.
Uma vez que fizer isso,
a última coisa que fará
é associar a fonte de dados
à exibição de tabela.
E pronto, acabou.
Então vamos dar uma olhada
no que acontece nos bastidores
quando se faz isso.
A fonte de dados de exibição de tabela
configurará os ouvintes.
Vai fazer o trabalho chato por você.
Vai garantir que ouça
os eventos infantis adicionados,
eventos infantis removidos
e todos os outros eventos.
E como pode ver aqui nessa imagem,
ele também vai fazer animações para você.

Chinese: 
FirebaseUI是不会帮你写UI的
所以很可惜
你还是要自己写
但是它的确是把事情简化了
对于集合里的每一个事件
我们将其称为populate cell回调函数
你也可以用熟悉的iOS的模版
所以你能使用重用标识（reuse identifier）
你还可以让一个cell出队以提高性能
然后我们会输出一个快照（snapshot）
你就可以用快照继续复制那个cell
完成以上步骤之后
最后要做的事情是
将数据源与table view连接起来
好的 
现在完成啦
我们看一下此时幕后发生的是什么
Firebase tableview数据源会设置一个监听者
它会自动完成这些繁琐的工作
它会确保监听添加子类事件
移除子类事件 
还有其他全部事件
正如此图所示
它还能展示动画

Arabic: 
وقمت بإدخال 
populate cell callback.
إذاً، Firebase لا يكتب UI لك.
للأسف، علي الأقل، مازال عليك
أن تفعل هذا بنفسك.
لكنه يجعله سهلًا لك.
إذاً، لكل عنصر في هذه المجموعة
سنطلق عليه
populate cell callback
ويمكنك استخدام نفس الأنواع
التي اعتدت عليها في iOS
يُمكنك استخدام
مُعرفات إعادة الإستخدام
ويمكنك إلغاء صف الخلية
للحصول على أداء جيد.
بعد ذلك، سنعطيك لقطة
ويمكنك استخدام اللقطة 
لملء تلك الخلية
بمجرد أن تفعل ذلك
آخر شيء ستفعله
هو دمج مصدر البيانات
في عرض الجدول.
وهكذا، لقد انتهيت.
فلنلقي نظرة عما يحدث
خلف الكواليس
عندما تفعل ذلك.
سيقوم مصدر بيانات عرض جدول Firebase
بإعداد المستمعين.
سوف تؤدي كل المهام الرتيبة لك.
سيجعلك تتأكد من الاستماع
لأحداث الطفل المُضافة
وأحداث الطفل المحذوفة
وكل الأحداث الأخرn.
وكما تري هنا في هذه الصورة
ستقوم أيضًا بعمل رسوم متحركة لك.

English: 
And then you pass in a
populate cell callback.
So FirebaseUI does not
write the UI for you.
Unfortunately, at least, you
still have to do that yourself.
But it does make
it easy for you.
So for every item
in that collection,
we'll call this
populate cell callback.
And you can use
the same patterns
that you are used to from iOS.
So you can use
reuse identifiers,
and you can dequeue a cell
for that good performance.
And then we'll give
you the snapshot,
and you can use the snapshot
to populate that cell.
So once you did that, the
final thing you want to do
is hook up the data
source to your table view.
And voila, you're done.
So let's take a look of what
happens behind the scenes
when you do that.
So the Firebase table
view data source
will set up the listeners.
It will do all the
grunt work for you.
It will make sure to listen
for child added events,
child removed events, and
all of the other events.
And as you can see
here in this image,
it will actually also
do animations for you.

Korean: 
그리고 나서 파퓰레이트
셀 콜백으로 패스하는 겁니다
파이어베이스UI가
UI를 적어주진 않아요
안타깝게도 적어도 UI는 여전히
여러분 스스로 하셔야 합니다
하지만 쉽게 만들어 줍니다
그 컬렉션 내의 모든 항목의 경우
이를 파퓰레이트 셀 콜백이라고 부를게요
iOS에서 익숙한 같은 패턴을
사용하면 됩니다
재사용 식별자를 사용하고
좋은 성능을 위해 셀을 덱하면 됩니다
그러면 스냅샷이 생길 것이고
그 셀을 파퓰레이트하기 위해
그 스냅샷을 이용하면 되는 겁니다
일단 이렇게 하고 나면
마지막으로 할 일은
데이터 소스를 테이블뷰에 
연결하는 겁니다
그러면 다 됐어요
이걸 할 때 이면에서는
어떤 일이 일어나는지
살펴 볼게요
파이어베이스 테이블뷰 데이터 소스는
리스너를 설정할 겁니다
귀찮은 일을 모두 해결해 주는 겁니다
ChildAdded 이벤트,
ChildRemoved 이벤트, 그리고
모든 다른 이벤트를 확실히 따를 겁니다
그리고 이 이미지에서 보시는 것처럼
애니메이션 역시 실제로 해줄 겁니다

Spanish: 
Y luego pasas una populate cell callback.
FirebaseUI no escribe
el UI por ti.
Por desgracia todavía debes hacerlo
tú mismo.
Pero sí lo hace mas sencillo para ti.
Así que para cualquier objeto
en esa colección
llamaremos a este populate cell callback.
Puedes usar los mismos patrones
a los que estás acostumbrado en iOS.
Puedes usar reuse identifiers
y puedes sacar a una celda de la cola
para mejorar el rendimiento.
Luego les daremos la vista general
y pueden usar la vista general
para llenar esa celda de datos.
Una vez que has hecho esto, lo último
que quieres hacer
es conectar la fuente de datos
a tu table view.
Y voila, has terminado.
Así que veamos lo que pasa detrás
de escenas
cuando haces eso.
La fuente de datos de table view
de Firebase
configurará los interlocutores.
Hará todo el trabajo duro por ti.
Se asegurará de escuchar por child added
events,
child removed events,
y todos los otros eventos.
Como pueden ver en esta imagen
hará animaciones por ti.

Indonesian: 
Lalu Anda masukkan
panggilan balik populateCell.
Jadi, Firebase tak menulis UI untuk Anda.
Sayangnya, Anda masih
harus melakukannya sendiri.
Tapi FirebaseUI mempermudahnya untuk Anda.
Untuk setiap item di koleksi itu,
kita akan memanggil balik populateCell.
Anda bisa gunakan pola
yang biasa Anda pakai di iOS.
Anda bisa gunakan ulang
pengidentifikasi.
Anda bisa batalkan antrean sel
demi performa yang baik.
Kami akan tunjukkan cuplikannya.
Anda bisa menggunakannya
untuk mengisi sel.
Setelah melakukannya, terakhir Anda perlu
menghubungkan sumber data ke tableView.
Selesai sudah.
Mari lihat apa yang terjadi
di balik layar jika Anda melakukannya.
Sumber data tableView Firebase
akan menyiapkan pendengar.
Ia akan melakukan
semua tugas kasar untuk Anda.
Ia akan memastikan
untuk mendengar event child_added,
event child_removed,
dan semua event lainnya.
Seperti yang Anda lihat di gambar ini,
ia juga akan membuat animasi untuk Anda.

Japanese: 
それから populateCell 
コールバックを渡します
FirebaseUI はその UI を
書いてくれません
残念ながら 少なくともそれはやはり
皆さんが自分でやるしかありませんが
簡単にしてくれています
だから そのコレクションの各項目に対し
この populateCell コールバックを
呼び出します
iOS から慣れている同じバターンを使えます
再利用識別子を使えます
良好なパフォーマンスのために
セルをデキューすることができ
スナップショットを提供します
そのスナップショットを使って
そのセルを埋めることができます
これを実行したら 最後にすることは
データソースをテーブルビューに
繋げることです
するとほら出来上がりです
そうすると舞台裏で
何が起こるか見てみましょう
Firebase tableView データソースは
リスナーを設定します
それは単調でつらい仕事を
全部やってくれます
child_added イベントを
child_removed イベントや
他の全てのイベントを確実にリッスンします
ご覧のように ここのこの画像で
実際アニメーションもしてくれます

Portuguese: 
Entсo o banco de dados do Firebase
é ótimo para dados em tempo real.
E se quer dados em tempo real,
também quer mostrar os dados
à medida em que mudam.
E animação é um ótimo jeito de mostrar.
Você vai ganhar animações gratuitamente
se você estiver usando o FirebaseUI.
Se estiver usando o UITableView,
ele é indexado baseado em linhas,
e em nenhum lugar do Firebase
se consegue um index.
É baseado em chaves.
Então como o FirebaseUI faz isso?
Na verdade,
ele mapeia a coleção para uma matriz.
Nesse exemplo, temos algumas chaves.
E acabei de perceber
que está faltando a letra "D".
Vamos presumir que...
bom, vamos adicionar aos dados.
E queremos que a exibição de tabela
atualize isso.
E como saberemos onde colocar?
No iOS, existe uma função especial

Arabic: 
لذلك، قاعدة بيانات Firebase 
جيدة بالفعل لبيانات الوقت الحقيقي
وإذا كان لديك بيانات الوقت الحقيقي
ستحتاج أيضًا لعرض بيانات
التغيرات المصاحبة.
والرسوم المتحركة طريقة
جيدة لعرض ذلك.
إذاً، ستحصل مجانًا علي
رسوم متحركة خارج الصندوق
إذا كنت تستخدم FirebaseUI.
الآن، إذا كت تستخدم UITableView
كما تعلم، إنها مفهرسة على أساس الصف
لايوجد مكان في Firebase
للحصول علي فهرس.
كل شيء قائم علي المفتاح.
إذاً كيف يقوم FirebaseUI بذلك؟
تحت الغطاء تربط بالفعل
هذه المجموعة إلى مصفوفة.
إذاً في هذا المثال، لدينا 
زوجين من المفاتيح.
لاحظت للتو أن حرف D
مفقود هنا.
إذاً، لنفترض أن..
فلنضيفه إلي البيانات.
ونريد من عرض الجدول
أن يعدّل ذلك بالفعل.
كيف يمكننا معرفة
أين نضع هذا؟
في iOS يوجد وظيفة خاصة

Spanish: 
Así que la base de datos de Firebase
es muy buena para datos de tiempo real.
Y si tienes datos de tiempo real,
también quieres mostrar los datos
mientras cambian
y las animaciones son una gran forma
de mostrarlo.
Así que tendrás animaciones out of the box
gratis
si usas FirebaseUI.
Ahora, si han estado usando UITableView
saben que es indexado basado en filas
y en ningún lado de Firebase
tengo un índice.
Es todo basado en llaves.
Así que ¿cómo hace esto Firebase?
Asigna esto a una colección.
En este ejemplo tenemos un par de llaves.
Acabo de notar que falta la D allí.
Añadámoslo a los datos,
y queremos que la table view lo actualice.
¿Cómo sabemos dónde poner esto?
En iOS hay una función especial

Japanese: 
Firebase データベースはリアルタイム
データに本当に優れています
リアルタイムデータがあれば
変化する時のデータを表示したいです
アニメーションはそれを表示する
すぐれた方法です
だから FirebaseUI を使えば
すぐに無料でアニメーションが得られます
UITableView を使ってる場合
それはインデックス付きの行ベースですね
Firebase ではどこにも
インデックスはありません
全てキーベースです
では Firebase はどうやってるのでしょう？
陰で実はこのコレクションを
配列にマップします
この例では幾つかキーがあります
今気づいたんですが
ここには D の文字がありません
では仮定として--
それをデータに入れてみましょう
テーブルビューを実際に更新します
するとどこにこれを入れるか
どうして分かるでしょう？
iOS では 
この特別な関数は

Indonesian: 
Firebase Database sangat bagus
untuk data waktu-nyata.
Jika punya data waktu-nyata, Anda juga
perlu menampilkan data selagi berubah.
Animasi adalah cara bagus
untuk menampilkannya.
Anda akan dapat
animasi kreatif dengan gratis
jika menggunakan FirebaseUI.
Jika Anda sudah gunakan UITableView,
itu diindeks sesuai baris.
Sedangkan di Firebase, tak ada indeks.
Itu semua berdasarkan kunci.
Jadi, bagaimana Firebase melakukan ini?
Di balik layar, ia memetakan
koleksi ini ke array.
Dalam contoh ini,
kita punya beberapa kunci.
Saya baru perhatikan
huruf D hilang di sini.
Mari anggap-- Mari tambahkan itu ke data.
Kita ingin tableView untuk memperbaruinya.
Bagaimana kita tahu tempat meletakkan ini?

English: 
So Firebase database is really
good for real-time data.
And if you have
real-time data, you also
want to sort of show
the data as it changes.
And animations are a
great way to show that.
So you'll get animations
out of the box for free
if you're using FirebaseUI.
Now if you've been
using UITableView,
you know, well, it's
indexed row-based,
and nowhere in Firebase
do I get an index.
It's all key-based.
So how does FirebaseUI do this?
Under the hood it actually maps
this collection to an array.
So in this example, we
have a couple of keys.
And I just noticed that the
letter D is missing in here.
And so let's assume that--
well, let's add it to the data.
And we want the table view
to actually update that.
And how do we know
where to put this?
On iOS, there is
this special function

Korean: 
따라서 파이어베이스 데이터베이스는
실시간 데이터에 아주 좋아요
그리고 실시간 데이터가 있다면 데이터가
변해가는 것을 보여주고 싶을 겁니다
이를 보여주기에 애니메이션이
정말 좋은 방법이고
따라서 공짜로 상자 밖에서
애니메이션을 얻게 됩니다
파이어베이스 UI를 쓴다면 말입니다
UI테이블뷰를 사용해오셨다면
이건 가로열 베이스로
인덱스되는 걸 알 겁니다
그런데 파이어베이스에서는
인덱스를 어디에서도 얻을 수 없어요
전부 키 베이스이기 때문입니다
그렇다면 파이어베이스UI가
이를 어떻게 하는 걸까요?
아래에서 컬렉션을 배열로 맵핑해요
따라서 이 예시에서
몇 개의 키가 있어요
여기 철자 D가 없다는 것을
방금 알았어요
그러면 철자 D를 데이터에 더해 볼게요
그리고 테이블뷰가 실제로
이걸 업데이트 하길 원하는 겁니다
그러면 이 철자 D를 어디에
넣을지 어떻게 알까요?
iOS에서는 이 특별한 기능이 있어요

Chinese: 
所以Firebase数据库对于实时数据是很有用的
如果你有实时数据的话
你也可以展示数据变化情况
动画自然是很直观的展示方式
你可以在库里免费使用动画
如果你是FirebaseUI用户的话
如果你用过UITableView
那你应该知道这些是竖排分布的索引
大家可能想Firebase哪里有索引啊
它全部是基于key的啊
那么FirebaseUI是如何完成的呢？
在幕后它其实是把集合与阵列对应起来
在这个例子中，我们有几个key
我刚刚发现字母D是缺失的
我们假设要把它加进数据里
我们希望table view可以更新
那么我们怎么知道要放在哪里呢
在iOS有一个特别的函数

Spanish: 
que pueden no conocer.
Así que cuando escuchas eventos
le asignas un tipo de evento.
Y luego pasas un bloque
y te damos las vistas generales.
Pero también está esta función
donde puedes pasar un tipo especial
de bloque
que te da la vista general de los datos
más una cuerda.
Y esta cuerda te dice dónde este evento
es relativo
en la vista general.
Te dirá cuál es el sibling previo
en esta colección y sabrás donde añadirlo.
Así que veamos un ejemplo.
Tenemos esta colección con nuestras
llaves
y queremos agregar la letra D.
Y Firebase nos dirá
que el child previo es C.
Así que todo lo que debemos hacer
es escanear a través de la colección,
y afortunadamente coloqué el bloque
en el lugar correcto
y ahora sabemos que el nuevo índice
es 3
así que podemos añadirlo a la colección
y ahora sabemos como traducir
las llaves de Firebase

Indonesian: 
Di iOS, ada fungsi khusus
yang mungkin belum Anda ketahui.
Biasanya, saat mendengarkan event,
Anda memberinya eventType.
Lalu Anda masukkan blok,
dan kami akan memberi cuplikannya.
Tapi ada juga fungsi
untuk memasukkan blok khusus
yang memberi cuplikan data dan string.
String ini memberi tahu Anda
tempat event dibandingkan cuplikannya.
Ia akan beri tahu mana yang sebelumnya
dalam koleksi ini,
dan Anda akan tahu
tempat untuk menambahkannya.
Mari lihat contohnya.
Kita punya array dengan kuncinya.
Kita ingin menambah huruf D.
Firebase akan memberi tahu
anak sebelumnya adalah C.
Jadi, kita tinggal memeriksa array ini.
Untungnya, saya menaruh blok
di tempat yang benar.
Kita sekarang tahu
indeks barunya adalah 3.
Jadi, kita tambahkan itu ke array.
Sekarang kita tahu
cara menerjemahkan kunci Firebase

English: 
that you might not be aware of.
So usually when you
listen to events,
you give it an event type.
And then you pass in
a block, and we'll
give you the snapshot.
But there's also
this function where
you can pass in a special
kind of block that gives you
the data snapshot plus a string.
And this string tells
you where this event
is relative in the snapshot.
It will tell you, what
is the previous sibling
in this collection, and you
will know where to add it.
So let's look
through an example.
So we have this
array with our keys,
and we want to add the letter
D. And Firebase will tell us
that the previous child
is C. So all we have to do
is scan through the array.
And luckily I placed the
block at the right place.
And we know now that
the new index is 3.
And so we can add
it to the array,
and now we know how to
translate Firebase keys

Japanese: 
皆さんが認識していないかもしれません
ですから普通イベントをリッスンする時
それにイベント型を付けます
そうしてブロックを渡すと
スナップショットを提供します
だがこの関数はまた
特別なブロックを渡すと
データスナップショットと文字列を提供します
そしてこの文字列はこのイベントが
スナップショットのどこに関係するか
伝えます
それはこのコレクションの中で
どれが前の兄弟か教えてくれます
それでどこに加えるか分かるのです
では例を見通してみましょう
キー付きのこの配列があります
私達は D という文字を付けたしたいですね
すると Firebase は
前の子は C だと教えてくれるので
配列をスキャンすればいいだけです
そして運よく 正しい場所に
ブロックを置けました
今度は新しいインデックスは３です
それを配列に加えられます

Chinese: 
也许大家先前没有留意
但你实际监听事件的时候
你会将其命名为一类事件
那么当你在block里输入事件类型的时候
我们会返回一个快照
但是还有一个特别的函数
在你输入一个特殊的block时
它会返回快照以及字符串
这个字符串可以告诉你
这个事件与快照的关系
它与集合里的哪项是同级的
那你就知道在哪里添加了
我们看一个例子
这是一个阵列与key
现在我们想加入字母D
那么Firebase就会告诉我们
前一个子节点是C
那我们要做的就是
扫描阵列
那我就可以很幸运地把block放在了正确的地方
现在我们可以看到新的索引是3
我们把它加入到了阵列

Arabic: 
والتي من المحتمل ألا تكون واعٍ بها.
لذلك، غالباً عندما تستمع للأحداث
تعطيها نوع الحدث.
بعد ذلك، تمرر كتلة
وسنعطيك اللقطة.
لكن، يوجد أيضًا هذه الوظيفة.
حيث يمكنك تمرير في نوع خاص
من الكتل، والتي تعطيك
لقطة البيانات، بالإضافة إلي سلسلة.
وهذه السلسلة تخبرك أين هذا الحدث
الذي له علاقة في اللقطة.
ستخبرك، ماهو القريب السابق
في هذه المجموعة، وستعرف أين تضيفه.
فلنأخذ مثال.
لدينا هذا الترتيب في مفاتيحنا
ونريد أن نضيف الحرف D
وسيخبرنا Firebase
أن الطفل السابق هو C
كل مايجب فعله هو
المسح خلال المصفوفة.
ولحسن الحظ، قمت بوضع الكتلة 
في المكان الصحيح.
ونحن نعرف الأن أن الفهرس الجديد هو 3
لذلك يمكن إضافته للمصفوفة
والآن نحن نعرف كيف نترجم
مفاتيح Firebase

Portuguese: 
que você pode não ter conhecimento.
Normalmente,
quando você escuta os eventos,
você tipifica esse evento.
Você processa um bloco
e nós vamos te dar uma foto instantânea.
Mas também existe essa função
em que você pode processar
um tipo especial de bloco
que dá a você a foto do dado
e também uma corda.
E essa corda diz a você onde esse evento
está relacionado com a foto.
Vai dizer a você
quem era o semelhante anterior
nessa coleção
e você saberá onde adicionar.
Vamos ver um exemplo.
Temos essa matriz com nossas chaves
e queremos adicionar a letra "D".
Firebase vai nos dizer
que o de antes é o "C".
Então o que temos que fazer
é examinar a matriz.
Por sorte,
posicionei o bloco no local certo.
E sabemos que o novo index é 3.
Podemos adicioná-lo à matriz
e agora sabemos como traduzir
as chaves do Firebase

Korean: 
아마 잘 모르실 겁니다
보통 이벤트를 따를 때
이벤트 타입을 주잖아요
그리고선 블락으로 패스하고
그러면 스냅샷이 생길 겁니다
그런데 다음과 같은 기능도 있어요
데이터 스냅샷과 스트링도 주는
일종의 특별한 블락으로
패스할 수 있는 겁니다
이 스트링은 이 이벤트가 스냅샷에서
상대적으로 어디에 있는가를 알려줍니다
이 컬렉션에서 이전 형제가
뭔지 알려줄 것이고
여러분은 어디에
첨부할지 알게 될 겁니다
그럼 예시로 살펴 볼게요
우리 키와 이 배열이 있어요
그리고 철자 D를 더하고 싶다면
파이어베이스가 우리에게
이전 차일드가 C라고 말해주고
따라서 우리가 해야할 일은
배열을 죽 훑어보는 것 뿐입니다
다행히도 제가 블락을
적당한 곳에 뒀어요
이제 새 인덱스가 3인걸 알게 됐어요
따라서 이걸 배열에 더하면 되고
이제 테이블뷰에서
파이어베이스 키를 인덱스로

Korean: 
어떻게 이동할지 아는 겁니다
따라서 파이어베이스UI는
처음에 데이터를 로딩할 때
모든 것을 애니메이트할 겁니다
그리고 가끔 이런 질문을 받아요
처음 로딩을 애니메이트하는 대신
스피너를 보여주고 싶고
로딩 되면 전부 한번에 데이터를
보여주고 싶으면 어쩌냐는 질문입니다
파이어베이스 데이터베이스에 대한
2 가지 사실이 있어요
이걸 할 수 있게 해주는데
여러분은 아마 모르실 겁니다
먼저 이벤트 타입은 사실
성능을 바꾸지 않는다는 겁니다
ChildAdded나 ChildRemoved
혹은 심지어 값 이벤트를
더하더라도 상관 없어요
배경에서 일어나는 일은 완전히 똑같아요
그러면 이 사실이 어떻게 도와줄까요?
첫 번째 사실은 두 번째 사실과
함께 해야만 도움이 될 겁니다
즉, 값 이벤트는 다른 모든
이벤트가 작동된 후
작동될 것이라는 사실입니다
로더를 보여주는 예를 들어 보면
ChildAdded 리스너를 첨부할 때
모든 ChildAdded
이벤트를 작동할 겁니다

Arabic: 
إلي الفهارس في عرض الجدول.
إذاً FirebaseUI، عندما تقوم مبدأيًا
بتحميل البيانات
ستنشط كل شيء.
وأحيانًا نحصل علي سؤال
ماذا لو لم أريد تشيط التحميل المبدأي
وبدلاً من هذا أريد إظهار دوّار
وفقط عرض البيانات كلها عندما تُحمَل؟
وهذه حقيقتين عن
قاعدة بيانات Firebase
ربما لاتكون واعٍ بأنه يسمح لك بفعل هذا.
أول شيء هو نوع الحدث
والتي في الواقع لايغير الأداء.
لايهم إذا أضفت إضافة طفل
أو إزالة طفل أو حتي قيمة الحدث.
العمل الذي يحدث في الخلفية
هو بالضبط نفس العمل.
اذاً، كيف يساعدك هذا؟
إنه فقط يساعدك في الجمع مع
الحقيقة الثانية
قيمة الحدث ستعمل
بعدما تعمل
كل الأحداث الأخرى.
لو أخذنا مثال في عرض المُحمل
عندما ترفق مستمع إضافة الطفل
سنقوم بتشغيل كل أحداث الطفل المُضافة.

English: 
to indexes in the table view.
So FirebaseUI, when you
initially load the data,
it will animate everything.
And sometimes we get
the question, well,
what if I don't want to
animate the initial loading,
but I instead want
to display a spinner
and just show the data all
at once when it's loaded?
And there's two facts
about the Firebase database
that you might not be aware
of that allows you to do this.
The first one is
the type of event
actually does not
change performance.
It doesn't matter whether
you add a child added
or child removed or
even a value event.
The work that happens in the
background is exactly the same.
So how does that help you?
It only helps you in combination
with the second fact,
that a value event will fire
after all of the other events
have fired.
So if we take the example
of showing a loader, when
you attach the child
added listener,
we'll fire all of the
child added events.

Spanish: 
a índices en la table view.
FirebaseUI, cuando cargas los datos
inicialmente,
animará todo.
A veces recibimos la pregunta, bueno,
¿qué si no queremos animar
la carga inicial
pero queremos exhibir un spinner
y mostrar los datos todo de una vez
cuando esté cargado?
Y hay dos hechos acerca de la base
de datos de Firebase
que pueden no conocer que les permiten
hacer esto.
La primera es que el tipo de evento
no cambia el rendimiento.
No importa si añades un evento
child added
o child removed o hasta un evento
de valor.
El trabajo que sucede en el fondo
es básicamente el mismo.
así que ¿cómo te ayuda esto?
Sólo ayuda en combinación con
el segundo hecho,
que un evento de valor se disparará
luego de que otros eventos
se hayan disparado.
Si tomamos el ejemplo de mostrar
un cargador,
cuando unes el interlocutor child added
dispararemos todos los eventos
child added.
Y sabemos de primera mano que también
podemos agregar

Chinese: 
还知道了要如何在table view中
将Firebase key与索引对应起来
而当你开始在FirebaseUI载入数据的时候
它会将一切动画化
所以有时候有人提问
如果我不想将初始载入动画化
而是想要展示一个spinner
当它全部加载完成了再一次性展示数据呢？
你可能不知道
Firebase有两个属性
可以帮你达到这个目的
第一个就是事件类型
并不会改变性能
所以不管这个事件是添加子类
移除子类
甚至是一个value事件
后台完成的工作是完全一样的
那么这会如何帮助你呢？
它还需要与Firebase的第二个属性协作才能帮到你
只有当其他全部事件都启动之后
value事件才会启动
以载入程序为例
你为添加子类事件设置了监听者
那么所有的添加子类事件都会启动
第一个属性告诉我们

Japanese: 
これで Firebase キーをテーブルビューの
インデックスに翻訳方法が分かりますね
FirebaseUI は最初にデータを読み込む際
全てがアニメーションになります
時々質問を受けます
「最初の読み込みをアニメーションでなく」
「スピナーを表示して」
「読み込みが済んだ時一度に
データを表示したい場合は？」と
Firebase データベースには
２つの事実があり
皆さんはそれを知らないかもしれませんが
これを可能にします
最初のものは イベントの型は
実はパフォーマンスを変えません
child_added だろうと child_removed
value イベントさえ付けるかどうかは
問題じゃありません
背面で起こる仕事は全く同じです
ではそれはどう役立つのでしょう？
それは 他のイベントが全部作動した後で
value イベントが作動するという第２の事実
と組み合わせで役立つだけです
ローダーを表示する例をとると
child_added リスナーを付けると
私達は child_added イベントの
全てを作動させます
私達は第１の事実から value リスナーも

Indonesian: 
ke indeks dalam tableView.
Saat Anda pertama memuat data,
FirebaseUI akan menganimasikan semuanya.
Kadang kita mendapat pertanyaan.
Bagaimana jika saya tak ingin
menganimasikan pemuatan pertama,
tapi saya ingin menampilkan spinner
dan hanya menampilkan
semua data sekaligus saat dimuat?
Ada dua fakta tentang Firebase Database
yang mungkin Anda tak tahu
dan memungkinkan Anda melakukan ini.
Yang pertama adalah jenis event
sebenarnya tidak mengubah performa.
Tak peduli Anda menambahkan child_added,
child_removed atau bahkan value-event.
Pekerjaan yang terjadi
di balik layar tepat sama.
Bagaimana itu membantu Anda?
Itu hanya membantu
dalam kombinasi dengan fakta kedua,
bahwa value-event akan muncul
setelah semua event lain.
Jika kita ambil contoh menampilkan pemuat,
saat Anda melampirkan
pendengar child_added,
kita akan munculkan
semua event child_added.

Portuguese: 
em indexes na exibição de tabela.
No FirebaseUI,
quando você inicialmente carrega o dado,
vai animar tudo.
E de vez em quando
recebemos a pergunta,
"E se eu não quiser animar
o carregamento inicial,
mas em vez disso,
eu quiser exibir algo girando
e só quiser mostrar o dado
quando estiver carregado?".
E há dois fatos
sobre o banco de dados do Firebase
que você pode não saber
e que permitem que você faça isso.
O primeiro é que o tipo do evento,
na verdade, não altera o desempenho.
Não importa se você adicionar uma criança
ou remover uma criança
ou até mesmo evento.
O trabalho que acontece por trás
é exatamente o mesmo.
Como isso ajuda você?
Só vai ajudar se for combinado
com um segundo fato,
que o evento vai disparar
depois de todos os eventos
terem disparado.
Se pegarmos o exemplo de mostrar
um carregador,
quando anexa a criança
adicionada como ouvinte
vamos disparar todos os eventos
de criança adicionados.
E sabemos pelo primeiro fato
que podemos adicionar

Portuguese: 
um ouvinte sem custos adicionais.
Então adicionaremos isso também.
E quando disparar,
saberemos que temos os eventos infantis
e agora temos dados completos.
Se for uma primeira redistribuição
para um evento de valor,
podemos lembrar
que conseguimos esconder o carregador.
Podemos pegar o estado atual
e exibir para o usuário.
Tem um fato importante
que eu gostaria de pontuar.
O fato de que você deve limpar
depois de usar.
É óbvio que se está ouvindo
às consultas do Firebase,
há preço de custo associado a isso.
Faremos uma conexão
se ainda não houver uma.
Usaremos memória.
E se o dado está mudando,
continuaremos usando largura de banda.
Não temos uma opinião forte
sobre onde deve colocar seu ouvinte.
Recomendamos, no entanto,
que você o equilibre
com um não ouvinte em um local apropriado.
Por exemplo,
se configurar um ouvinte no viewDidLoad

Chinese: 
可以在此处添加value监听者
无需耗费任何资源
所以我们把它添加进来
当它启动的时候
我们就知道全部的添加子类事件都已经启动了
我们现在已经拥有完整的数据了
如果是第一次回调一个value事件
那就记得 
我们可以隐藏加载程序
将当前状态展示给用户
我还想提很重要的一点
也就是一定要自我清理
如果你在监听Firebase资料查询
那这是要耗费资源的
如果还没有连接 
我们要设置连接
我们要使用内存
如果数据有变
还要使用一些带宽
我们不硬性要求
要具体在哪里设置监听者
但我们的确强烈建议在合适的地方取消监听
以作平衡
举个例子
如果你在viewDidLoad设置了监听者

Korean: 
그리고 첫 번째 사실로부터
다른 비용 없이 값 리스너 또한
더 할 수 있다는 사실을 알잖아요
따라서 값 리스너도 더할 겁니다
이것이 발화하면 ChildAdded
이벤트 모두가 있으니
이제 완전한 데이터를 
가지게 되는 겁니다
따라서 이것이 값 이벤트에 대한
첫 번째 콜백이라면
로더를 감출 수 있다는 걸
기억하면 됩니다
현재 상태를 가지고 사용자에게
보여주면 됩니다
이제 제가 말하고 싶은
중요한 사실 하나가 있어요
즉, 항상 정리하라는 겁니다
분명 파이어베이스 쿼리를 따르고 있으면
이와 관련된 리소스 비용이 있을 겁니다
연결이 아직 없다면
연결을 스핀업할 겁니다
메모리를 좀 쓸 겁니다
그리고 데이터가 변하고 있다면
대역폭 또한 계속 사용할 겁니다
따라서 여러분의 리스너를 어디에
설정해야 하는지에 대해서는
강력하게 주장하진 않을 겁니다
하지만 적절한 장소에서
언리스너와 균형을 잡기를
권장하고 싶어요
예컨대 리스너를
viewDidLoad에 설정했다면

Arabic: 
ونحن نعرف من الحقيقة الأولي 
أننا نستطيع أيضًا إضافة قيمة المستمع
بدون تكاليف إضافية.
لذلك، سنقوم بإضافة ذلك أيضًا.
وعندما تعمل، سنعرف أننا حصلنا
علي كل أحداث الطفل المُضافة
والآن لدينا البيانات كاملة.
اذاً، لو كان أول استدعاء 
لقيمة الحدث
فأننا نستطيع تذكر ذلك
نستطيع إخفاء المُحمل.
نستطيع عرض حالتنا الحالية
لمستخدك.
الآن، هناك حقيقة مهمة
أريد أن أقولها
وهي، نظّف دائمًا بعد الإنتهاء.
لذلك، من الواضح، اذا كنت تستمتع
إلي استفسارات Firebase
هناك بعض مصادر التكلفة 
المصاحبة لذلك.
سنُفعّل الاتصال
إذا لم يكن
هناك اتصال بعد.
سنستخدم ذاكرة.
لو تغيرت البيانات ستستمر في
استخدام عرض الحزمة
لذلك، ليس لدينا رأي قوي
أين يجب إعداد المُستمع الخاص بك.
بالرغم من ذلك، ننصح بجعله متوازن.
مع غير المُستمع
علي سبيل المثال، لو قمت بإعداد
المُستمع في viewDidLoad

Indonesian: 
Kita tahu dari fakta pertama bahwa
kita juga bisa menambah nilai pendengar
tanpa biaya tambahan.
Kita juga akan tambahkan itu.
Saat itu muncul, kita tahu
kita mendapat semua event child_added.
Kini, data kita lengkap.
Jadi, jika itu panggilan balik pertama
untuk value-event,
kita bisa ingat
kita bisa sembunyikan pemuatnya.
Kita bisa ambil keadaan sekarang
dan menampilkannya ke pengguna.
Ada satu fakta penting
yang perlu saya katakan.
Selalu bereskan kekacauan yang Anda buat.
Jika Anda sedang
mendengarkan kueri Firebase,
ada beberapa biaya sumber
yang terhubung dengan ini.
Kita buat koneksi jika belum ada.
Kita akan gunakan memori.
Jika data berubah, itu akan
terus memakai bandwidth.
Jadi, kami tidak punya pendapat kuat
tentang tempat seharusnya
Anda mengatur pendengar.
Tapi kami merekomendasikan
Anda menyeimbangkannya
dengan pembatal dengar
di tempat yang layak.
Contohnya, jika Anda mengatur
pendengar di viewDidLoad,

Spanish: 
un interlocutor de valor
sin costo adicional.
Así que también agregaremos eso.
Y cuando se dispara sabemos que
tenemos todos los eventos child added
y ahora tenemos datos completos.
Así que si es el primer callback
para un evento de valor
podemos recordar que podemos esconder
el cargador.
Podemos tomar nuestro estado actual
y enseñárselo al usuario.
Ahora, hay un hecho importante
que quisiera señalar
y es siempre limpia tu propio desorden.
Obviamente si has estado escuchando
por consultas de Firebase
hay un costo de recursos asociado
a esto.
Haremos una conexión
si no ha habido conexión todavía.
Usaremos algo de memoria.
Y si los datos están cambiando, también
continuarán a usar ancho de banda.
Así que no tenemos una opinión fuerte
sobre dónde deberías fijar
tu listener.
Sí recomendamos que lo balancees
con un unlistener en el lugar adecuado.
Por ejemplo, si fijas el listener
en viewDidLoad

English: 
And we know from the first fact
that we can also add a value
listener at no additional cost.
So we'll add that, too.
And when it fires, we know
we've gotten all of the child
added events, and we now
have a complete data.
So if it's the first
callback for a value event,
we can remember that
we can hide the loader.
We can take our current state
and display it to the user.
Now, there's one important
fact that I'd like to call out.
And that is, always
clean up after yourself.
So obviously if you're
listening to Firebase queries,
there's some resource
cost associated with this.
We'll spin up a
connection if there
hasn't been a connection yet.
We'll use some memory.
And if data is changing, it will
also continue to use bandwidth.
So we don't have a strong
opinion of where you
should set up your listener.
We do, however, recommend
that you balance it
with an unlistener at
the appropriate place.
So for example, if you set up
the listener in viewDidLoad,

Japanese: 
追加料金無しで追加できると知っています
だからそれも追加します
そしてそれが作動する時
child_added イベントを全て取得したと知り
今は完全なデータを持っています
だから それが value イベントの
最初の呼び出しなら
ローダーを非表示にできると思い出せます
私達は現在の状態をとって
それをユーザーに表示できます
説明したい重要な事実が１つあります
それは 常に自分の後にきれいにすることです
明らかに Firebase クエリを
リッスンしている場合
これに関連するリソースコストがあります
接続がまだされてない場合
接続をスピンアップします
いくらかメモリを使います
データが変わる場合
帯域幅も使用し続けます
だからどこにリスナーを設定すべきかについて
強い意見は持ちません
ですが お勧めは
適切な場所のアンリスナーで
バランスをとることです
例えば viewDidLoad に
リスナーを設定すれば

Chinese: 
那么你要确保你在dealloc取消监听
如果你回应了didReceiveMemoryWarning的回调函数
并在那里卸载了视图
请确保在那里取消监听
不然在下一个viewDidLoad
你就会有两个监听者
同样道理
如果你在viewWillAppear监听
那么在viewWillDisappear应该取消监听
最后一点就是要留心循环引用
Firebase使用的是block
要用block作业是很简单的
但是如果你在一个block里引用了self
那就可能导致循环引用
所以可能没办法调用dealloc
你也永远没办法取消监听
因此
如果你要在一个block里引用self
请切记将其定义为weak(弱)
FirebaseUI的部分就是这么多
在座有没有React Native的开发人员啊？
有好几位
很可惜的是 
FirebaseUI只适用于iOS

Indonesian: 
Anda perlu memastikan 
Anda tidak mendengar di dealloc.
Jika Anda merespons
panggilan didReceiveMemoryWarning
dan memuat tampilannya di sana,
pastikan Anda tak mendengar di sana.
Jika tidak, di viewDidLoad berikutnya,
Anda akan membuat pengganda pendengar.
Begitu pula jika Anda atur
pendengar di viewWillAppear,
Anda perlu berhenti mendengar
di viewWillDisappear.
Yang terakhir, hati-hati
dengan siklus yang ditahan.
Firebase menggunakan blok,
dan blok sangat mudah dipakai.
Tapi jika Anda mereferensikan
self dalam blok,
itu dapat menyebabkan siklus tertahan.
Sehingga dealloc mungkin
tidak akan dipanggil,
dan Anda tak akan berhenti mendengar.
Jadi, jika Anda menggunakan
self dalam blok,
pastikan Anda mereferensikannya
dengan weak.
Jadi, itu adalah FirebaseUI.
Apakah ada pengembang
React Native di sini?
Ada beberapa.
Sayangnya, FirebaseUI hanya untuk iOS.

Korean: 
dealloc에서도 반드시
언리슨해야 합니다
didReceiveMemory
경고 호출에 응답하고
거기서 뷰를 언로드한다면
그곳에서도 꼭 언리슨하도록 하세요
그렇지 않으면 다음
viewDidLoad에서
중복된 리스너를 설정하게 될 겁니다
viewWillAppear에 리슨을
설정할 때도 똑같아요
viewWillDisappear에서
언리슨해야 합니다
마지막으로 리테인 사이클을 주의하세요
파이어베이스는 블락을 사용하고
블락은 사용하기 쉬워요
하지만 블락에서 셀프를 참조한다면
리테인 사이클을 야기할수 있어요
그러면 dealloc이
호출되지 않을 것이고
언리슨하지 않게 될 겁니다
따라서 블락에서 셀프를 사용하고 있다면
약하게 참조하도록 하세요
지금까지 파이어베이스 UI였습니다
혹시 여기 리엑트 네이티브
개발자 분 계십니까?
몇 분 계시네요
안타깝게도 파이어베이스UI를
iOS를 위한 겁니다

Spanish: 
necesitas asegurarte de fijar un
unlistener en el dealloc.
Y si respondes a llamadas
didReceiveMemoryWarning
y descargas la vista allí,
asegúrate de fijar un unlistener ahí
o en el próximo viewDidLoad
tendrás que fijar un listener duplicado.
Igualmente si fijas tu listen
en el viewWillAppear,
quieres fijar el unlisten
en el viewWillDisappear.
Y otra última cosa es estén atentos
a los ciclos retenidos.
Firebase usa bloques,
y es muy fácil trabajar con bloques.
Pero si referencias self en un bloque
eso puede causar un ciclo retenido.
Así que puede que nunca se llame a dealloc
y nunca podrás unlisten.
Así que si estás usando self en un bloque
asegúrate de que estás haciendo
una referencia débil.
Así que eso fue FirebaseUI.
¿Hay algunos desarrolladores
de Native React aquí?
Ahí hay un par.
Por desgracia, obviamente, FirebaseUI
es para iOS

Arabic: 
يجب أن تتأكد أنك أيضاً من
عدم الاستماع في dealloc.
وإذا استجبت إلي
didReceiveMemoryWarning calls
ولم تُحمل العرض هناك، تأكد
أيضًا أنك لا تستمع هناك
أو أيضًا في viewDidLoad القادم
ستقوم بإعداد مُستمع مضاعف
نفس الشيء، إذا قمت بإعداد مُستمعك
في ..viewWillAppear
تريد أن لا تستمع
في viewWillDisappear
وهناك شيء أخير هو أن تكون
واعٍ بـ الدوائر المُحتجزة
لذلك، يستخدم Firebase الكتل
والكتل سهل العمل معها.
ولكن، إذا أشرتَ إلي
self في الكتلة
يمكن أن يسبب هذا الدوائر المُحتجزة
لذلك، dealloc مُحتمل ألا يُطلب.
وأنت لن تكون  غير مستمع أبداً.
إذاً، إذا كنت تستخدم
self في الكتلة
تأكد أنك تقوم بإشارة ضعيفة.
لهذا، تواجد FirebaseUI.
هل يوجد هنا مُطوري React Native؟
يوجد اثنين.
للأسف، واضح أن FirebaseUI 
يكون لـ iOS

Japanese: 
dealloc でアンリッスンすることも
確実にする必要があります
didReceiveMemoryWarning 呼び出しに
応答して
そこでビューをアンロードする場合も
確実にそこでアンリッスンするか
さもなければ 次の viewDidLoad で
重複リスナーを設定します
viewWillAppear でリスナーを
設定した場合も同じで
viewWillDisappear で
アンリッスンする必要があります
そうして最後の１つは
保持サイクルに用心することです
Firebase はブロックを使い
ブロックはとても作業しやすいのです
だが ブロック内で self を参照すると
保持サイクルを引き起こす可能性があります
だから dealloc は呼び出されない
かもしれません
そしてアンリッスンしません
だから ブロックで self を使う場合は
それを弱い参照にしてください
これが FirebaseUI でした
ここに React Native 開発者はいますか？
数人いますね
残念ながら 明らかに
FirebaseUI は iOS 用です

English: 
you need to make sure that you
also unlisten in the dealloc.
And if you do respond to
didReceiveMemoryWarning calls
and unload the view there, also
make sure to unlisten there,
or else in the next
viewDidLoad, you'll
set up a duplicate listener.
Same if you set up your
listen in the viewWillAppear--
you want to unlisten in
the viewWillDisappear.
And then one last thing is
beware of retained cycles.
So Firebase uses
blocks, and blocks
are very easy to work with.
But if you reference
self in a block,
that can cause a retained cycle.
And so dealloc might
not ever be called,
and you'll never unlisten.
So if you are using
self in a block,
make sure that you
weak reference it.
So that was FirebaseUI.
Are there any React
Native developers here?
There's a couple.
So unfortunately, obviously,
FirebaseUI is for iOS.

Portuguese: 
você precisa se certificar
de não ouvir no dealloc.
E se você atende a solicitações
didReceiveMemoryWarning
e para de visualizar lá,
certifique-se de não ouvir também,
caso contrário, no próximo viewDidLoad,
você vai configurar um ouvinte duplo.
O mesmo acontece se configurar
o ouvinte no viewWillAppear,
vai ter que desabilitar
no viewWillDisappear.
Uma última coisa,
fique ciente dos ciclos retidos.
O Firebase usa blocos
e blocos são muito fáceis de trabalhar.
Mas se você faz referência em um bloco,
ele pode usar um ciclo retido.
E o dealloc pode não ser solicitado
e você não desabilita o ouvinte.
Se você usa a autorreferência em um bloco,
certifique-se de que seja
uma referência fraca.
Isso foi o FirebaseUI.
Há algum desenvolvedor
de React Native aqui?
Há alguns.
Infelizmente, é óbvio,
o Firebase é para iOS.

Chinese: 
如果你在使用React Native
那么你没有办法用React Native
但是 Firebaseweb客户端函式库 
（Firebase web client libraries）
可以支持React Native
它的特征稍异于
移动端用户
所以也有第三方社群作出了许多贡献 
也就是Firestack
它的链接在PPT上
它将移动端本地库打包起来
那你就可以在React Native也使用到了
我的部分就这么多
时间交回给Todd
好的 非常感谢Jonny
我知道我们是一下子抛出了一大堆的知识
但是大家很幸运
你们完全不需要把它们记下来
我们稍后会将今天演讲归档
供大家访问
我们还有一个YouTube频道
上面的主持人可都颜值爆表
所以如果你还没有订阅的话
请马上订阅啦
我们稍后还有机会交流
有一个Ask Firebase环节
今晚还有一个会后party
如果你有任何问题
欢迎随时提出

English: 
And if you're
using React Native,
then you can't use that.
However, the Firebase
web client libraries
are supported for React Native.
The feature set is just
slightly different than
for the mobile native client.
So there's a third
party community effort
called Firestack-- the
link is on the slide here--
that actually wraps the native
mobile libraries that you
can use in React Native.
That's all for me.
Back to you, Todd.
TODD KERPELMAN: All
right, thanks, Jonny.
[APPLAUSE]
OK, so I know that was an awful
lot of information at once.
Luckily for you, you don't
have to memorize any of it.
We've got some
lovely documentation
that you can visit.
We also have a YouTube channel
full of very good-looking
performers, so you
should subscribe
to that if you haven't yet.
And we'll be hanging
out afterwards,
both in the Ask Firebase area
and the after party later
this evening.
So feel free to talk to us if
you have any other follow-up
questions.

Arabic: 
وإذا كنت تستخدم React Native
لن تستطيع استخدامه.
بالرغم من ذلك فإن
Firebase web client libraries
تدعم React Native
الخاصية التي تم إعدادها
مختلفه قليلًا فقط عن
عن mobile native client
هناك جهد مجتمع كجزء ثالث
يُطلق عليها Firestack
الرابط علي الشريحة هنا
ويقوم في الواقع بضمْ
native mobile libraries
التي يمكن استخدامها في
React Native
هذا كل ماعندي.
نعود إلي، تود.
حسناً، أعرف أننا قدمنا معلومات
كثيرة جداً.
لحسن حظك، لاداعي لحفظها.
قمنا بوضع مستندات جميلة
والتي تستطيع أن تزورها.
لدينا أيضًا قناة YouTube
بأداء جيد جدًا
لذلك، يمكنك الاشتراك بذلك
إذا لم تشترك من قبل.
وسأكون بعد ذلك
في كلاً من المكان الخاص بـ
اسأل Firebase وبعد الحفلة هذا المساء
لذلك، تحدث بحرية معنا
لو كان لديك أي أسئلة.

Korean: 
그리고 리엑트 네이티브를 사용한다면
파이어베이스UI를 사용할 수 없어요
하지만 파이어베이스 웹
클라이언트 라이브러리는
리엑트 네이티브를 지원해요
모바일 네이티브 
클라이언트와 피쳐 세트는
조금 달라요
따라서 파이어스택이라는
제 3의 커뮤니티가
노력하고 있고
링크는 여기 슬라이드에 있어요
리엑트 네이티브에서 쓸 수 있는
네이티브 모바일 라이브러리를
실제로 포함하고 있어요
이게 전부입니다
다시 토드에게 넘길게요
조니, 고마워요
좋아요, 한번에 듣기엔
정말 많은 정보라는 것을 압니다
다행히도 이걸 전부
암기할 필요는 없어요
여러분이 방문할 수 있는
사랑스러운 자료가 있거든요
또한 아주 잘 생긴 개발자들로 가득 찬
유투브 채널도 있으니 아직 안 하셨다면
구독하세요
그리고 오늘 저녁
파이어베이스 질문하기 구역과
그 이후의 에프터 파티에서도 놀 겁니다
그러니 이어지는 질문이 있다면
저희한테 편하게 물어보세요

Japanese: 
React Native を使ってる場合は
それを使えません
ですが Firebase ウェブ
クライアントライブラリは
React Native 用にサポートされています
機能セットはモバイル Native Client と
少し違うだけです
Firestack というサードパーティの
コミュニティ努力があり
そのリンクはここのスライドにありますが
React Native で使えるネイティブ
モバイルライブラリを含みます
私からは以上です
ではあなたに Todd
はい ありがとう Jonny
これは一度にすごい情報量ですね
幸いに皆さんはそのどれも
暗記する必要はありません
皆さんが訪問できる文書があります
また YouTube チャンネルにも
美しい出演者がいっぱいいます
だからまだの方は
是非登録してください
私達はこの後
Ask Firebase の辺りや
後の今晩の二次会にいます
他の質問等があれば
どうぞ話しかけてください

Indonesian: 
Jika menggunakan React Native,
Anda tidak bisa menggunakannya.
Tapi pustaka klien web Firebase
didukung untuk React Native.
Pengaturan fiturnya hanya sedikit berbeda
dari pengaturan klien asli di selular.
Jadi, ada usaha komunitas pihak ketiga
yaitu Firestack-- tautannya ada di sini--
yang membungkus pustaka selular asli
yang bisa digunakan di React Native.
Sekian dari saya. Kembali ke Anda, Todd.
Baik. Terima kasih, Jonny.
Saya tahu informasi itu terlalu banyak.
Beruntung, Anda tak perlu menghafalnya.
Kami punya dokumentasi menarik
yang bisa Anda kunjungi.
Kami juga punya saluran Youtube
yang penuh dengan pengisi acara menawan.
Jadi, sebaiknya
Anda berlangganan jika belum.
Setelah ini, kami akan hadir
di area #AskFirebase
dan acara setelah pesta nanti sore.
Silakan bertanya pada kami
jika Anda ingin bertanya lebih lanjut.

Portuguese: 
E se você usa React Native,
então não pode usar aquilo.
No entanto, as bibliotecas virtuais
dos clientes do Firebase
suportam o React Native.
A gama de recursos é um pouco diferente
do que é para os clientes
de dispositivos móveis.
Há uma coisa da galera do third party
chamada Firestack.
O link está nesse slide aqui.
que envolve as bibliotecas móveis
que você pode usar no React Native.
Por mim, é só.
De volta a você, Todd.
Muito bem. Obrigado, Jonny.
Sei que foram muitas informações
de uma só vez.
Para a sorte de vocês,
não terão que memorizar nada disso.
Temos algumas documentações
que vocês podem visitar.
Também temos um canal do YouTube
cheio de apresentadores lindos,
então você pode se inscrever
se ainda não fez isso.
E nos veremos depois,
tanto na área do #AskFirebase
quanto na festa hoje à noite.
Sintam-se à vontade para falar conosco
se vocês tiverem outras perguntas.

Spanish: 
y su usas React Native
no puedes usarlo.
A pesar de esto, las bibliotecas
de clientes web de Firebase
soportan React Native.
El ajuste de la característica
es un poco difetente
que para el cliente nativo de móvil.
Hay un esfuerzo de terceros
llamado Firestack, el link está en esta
diapositiva aquí,
que cubre las bibliotecas
de móviles nativos
que puedes usar en React Native.
Eso es todo de mí.
De vuelta a ti, Todd.
Bien, gracias, Jonny.
Se que eso fue mucha información
de una vez.
Por suerte, no tienen que memorizarlo.
Tenemos algunas documentaciones
que pueden visitar.
También tenemos un canal de YouTube
lleno de actores bien parecidos
así que deberían suscribirse a eso
si no lo han hecho aún.
Y estaremos pasando el rato luego,
tanto en el área de Ask Firebase
como en la after party
esta tarde.
Siéntanse libres de hablarnos
si tienen otras preguntas.

Spanish: 
Y con eso tenemos 0 en el conteo regresivo
así que se nos acabó el tiempo.
Muchas gracias por escuchar.
Y en este punto, Abe y Damian
saldrán y hablarán sobre juegos geniales
y cosas de unidades de Firebase.
Así que estoy emocionado, sí.

Chinese: 
现在我们的倒计时已经是0了
我们的展示有点超时了
感谢各位聆听
下一对讲者是Abe和Damian
他们要讲的是很酷的游戏
还有与Firebase统一
我已经迫不及待想听他们的展示了 
耶！

Korean: 
이렇게 해서 카운트다운
시간이 0이 됐네요
시간이 없어요
들어주셔서 너무 감사해요
이제 이 시점에서
아베와 다미안이 나와서
파이어베이스로 하는
멋진 게이밍과 유니티에 대해
이야기 할 겁니다
정말 신나요

Indonesian: 
Penghitung waktunya sudah
menunjukkan angka nol.
Jadi, waktu kami sudah habis.
Terima kasih sudah menyimak.
Sekarang, Abe dan Damian akan
tampil untuk membahas
permainan keren
dan penyatuan dengan Firebase.
Saya tertarik.

Japanese: 
これでカウントダウンがゼロになりました
時間切れです
ご視聴ありがとうございました
この時点で Abe と Damian が来て
素敵なゲームと
Firebase との統一の話をします
だから私はワクワクしています

Arabic: 
ومع هذا حصلنا علي صفر
في العد التنازلي
لذلك نحن متأخرين.
شكراً لاستماعكم.
وعند هذه المرحلة
يأتي ابي ودميان
ليتحدثوا عن بعض
الألعاب الجيدة
والأشياء unity في Firebase
لذلك أنا متحمس

Portuguese: 
Estamos com 0 segundos
na contagem regressiva,
então nosso tempo acabou.
Obrigado por nos ouvirem.
E agora, Abe e Damian
vão vir falar sobre jogos legais
e coisas importantes do Firebase.
Eu estou animado.

English: 
And with that, we've
got 0 on the countdown,
so we are out of time.
Thank you very
much for listening.
And now at this
point, Abe and Damian
are going to come up and
talk about some cool gaming
and unity things with Firebase.
So I'm excited-- yeah.
[MUSIC PLAYING]
