https://github.com/scripbox/firebase-admin-ex
Firebase Admin Elixir SDK
https://github.com/scripbox/firebase-admin-ex
elixir elixir-lang firebase firebase-admin firebase-admin-sdk firebase-messaging
Last synced: 2 months ago
JSON representation
Firebase Admin Elixir SDK
- Host: GitHub
- URL: https://github.com/scripbox/firebase-admin-ex
- Owner: scripbox
- License: mit
- Created: 2018-04-06T06:37:01.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2023-03-11T16:10:45.000Z (almost 3 years ago)
- Last Synced: 2025-10-21T15:55:55.116Z (3 months ago)
- Topics: elixir, elixir-lang, firebase, firebase-admin, firebase-admin-sdk, firebase-messaging
- Language: Elixir
- Size: 52.7 KB
- Stars: 47
- Watchers: 3
- Forks: 32
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Firebase Admin Elixir SDK
[](https://travis-ci.org/scripbox/firebase-admin-ex)
## Overview
The Firebase Admin Elixir SDK enables access to Firebase services from privileged environments
(such as servers or cloud) in Elixir.
For more information, visit the
[Firebase Admin SDK setup guide](https://firebase.google.com/docs/admin/setup/).
## Installation
* Add `firebase_admin_ex` to your list of dependencies in `mix.exs`:
```ex
defmodule YourApplication.Mixfile do
use Mix.Project
# Run "mix help deps" to learn about dependencies.
defp deps do
[
{:firebase_admin_ex, "~> 0.1.0"}
]
end
end
```
Next, run `mix deps.get` to pull down the dependencies:
```sh
$ mix deps.get
```
Now you can make an API call by obtaining an access token and using the
generated modules.
### Obtaining an Access Token
Authentication is typically done through [Application Default Credentials][adc]
which means you do not have to change the code to authenticate as long as
your environment has credentials.
Start by creating a [Service Account key file][service_account_key_file].
This file can be used to authenticate to Google Cloud Platform services from any environment.
To use the file, set the `GOOGLE_APPLICATION_CREDENTIALS` environment variable to
the path to the key file. Alternatively you may configure goth (the
the authentication ssyas described at
https://github.com/peburrows/goth#installation
For example:
```sh
$ export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service_account.json
```
If you are deploying to App Engine, Compute Engine, or Container Engine, your
credentials will be available by default.
### Usage
#### Messaging
* Sending a `WebMessage`
```ex
# Get your device registration token
registration_token = "user-device-token"
# Define message payload attributes
message = FirebaseAdminEx.Messaging.Message.new(%{
data: %{},
token: registration_token,
webpush: FirebaseAdminEx.Messaging.WebMessage.Config.new(%{
headers: %{},
data: %{},
title: "notification title",
body: "notification body",
icon: "https://icon.png"
})
})
# Call the Firebase messaging V1 send API
project_id = "YOUR-FIREBASE-PROJECT-ID"
{:ok, response} = FirebaseAdminEx.Messaging.send(project_id, message)
```
* Sending a `AndroidMessage`
```ex
# Get your device registration token
registration_token = "user-device-token"
# Define message payload attributes
message = FirebaseAdminEx.Messaging.Message.new(%{
data: %{},
token: registration_token,
android: FirebaseAdminEx.Messaging.AndroidMessage.Config.new(%{
headers: %{},
data: %{},
title: "notification title",
body: "notification body",
icon: "https://icon.png"
})
})
# Call the Firebase messaging V1 send API
project_id = "YOUR-FIREBASE-PROJECT-ID"
{:ok, response} = FirebaseAdminEx.Messaging.send(project_id, message)
```
* Sending a `APNSMessage`
```ex
# Get your device registration token
registration_token = "user-device-token"
# Define message payload attributes
message = FirebaseAdminEx.Messaging.Message.new(%{
data: %{},
token: registration_token,
apns: FirebaseAdminEx.Messaging.APNSMessage.Config.new(%{
headers: %{},
payload: %{
aps: %{
alert: %{
title: "Message Title",
body: "Message Body"
},
sound: "default",
"content-available": 1
},
custom_data: %{}
}
})
})
# Call the Firebase messaging V1 send API
project_id = "YOUR-FIREBASE-PROJECT-ID"
{:ok, response} = FirebaseAdminEx.Messaging.send(project_id, message)
```
#### Authentication Management
The `FirebaseAdminEx.Auth` module allows for some limited management of the
Firebase Autentication system. It currently supports getting, deleting and creating users.
* Getting a user by `uid`:
```ex
iex(1)> FirebaseAdminEx.Auth.get_user("hYQIfs35Rfa4UMeDaf8lhcmUeTE2")
{:ok,
"{\n \"kind\": \"identitytoolkit#GetAccountInfoResponse\",\n \"users\": [\n {\n \"localId\": \"hYQIfs35Rfa4UMeDaf8lhcmUeTE2\",\n \"providerUserInfo\": [\n {\n \"providerId\": \"phone\",\n \"rawId\": \"+61400000111\",\n \"phoneNumber\": \"+61400000111\"\n }\n ],\n \"lastLoginAt\": \"1543976568000\",\n \"createdAt\": \"1543976568000\",\n \"phoneNumber\": \"+61400000111\"\n }\n ]\n}\n"}
```
* Getting a user by phone number
```ex
iex(1)> FirebaseAdminEx.Auth.get_user_by_phone_number("+61400000111")
{:ok,
"{\n \"kind\": \"identitytoolkit#GetAccountInfoResponse\",\n \"users\": [\n {\n \"localId\": \"hYQIfs35Rfa4UMeDaf8lhcmUeTE2\",\n \"providerUserInfo\": [\n {\n \"providerId\": \"phone\",\n \"rawId\": \"+61400000111\",\n \"phoneNumber\": \"+61400000111\"\n }\n ],\n \"lastLoginAt\": \"1543976568000\",\n \"createdAt\": \"1543976568000\",\n \"phoneNumber\": \"+61400000111\"\n }\n ]\n}\n"}
```
* Getting a user by email address
```ex
iex(1)> FirebaseAdminEx.Auth.get_user_by_email("user@example.com")
{:ok,
"{\n \"kind\": \"identitytoolkit#GetAccountInfoResponse\",\n \"users\": [\n {\n \"localId\": \"hYQIfs35Rfa4UMeDaf8lhcmUeTE2\",\n \"providerUserInfo\": [\n {\n \"providerId\": \"phone\",\n \"rawId\": \"+61400000111\",\n \"phoneNumber\": \"+61400000111\"\n \"email\": \"user@example.com\"\n }\n ],\n \"lastLoginAt\": \"1543976568000\",\n \"createdAt\": \"1543976568000\",\n \"phoneNumber\": \"+61400000111\"\n }\n ]\n}\n"}
```
* Deleting a user
```ex
iex(4)> FirebaseAdminEx.Auth.delete_user("hYQIfs35Rfa4UMeDaf8lhcmUeTE2")
{:ok, "{\n \"kind\": \"identitytoolkit#DeleteAccountResponse\"\n}\n"}
```
* Creating a user
```ex
iex(4)> FirebaseAdminEx.Auth.create_email_password_user(%{"email" => "user@email.com", "password" => "hYQIfs35Rfa4UMeDaf8lhcmUeTE2"})
{:ok,
"{\n \"kind\": \"identitytoolkit#SignupNewUserResponse\",\n \"email\": \"user@email.com\",\n \"localId\": \"s5dggHJyr3fgdgJkLe234G6h6y\"\n}\n"}
```
* Generating the email action link for sign-in flows
```ex
# Define ActionCodeSettings
action_code_settings =
FirebaseAdminEx.Auth.ActionCodeSettings.new(
%{
requestType: "EMAIL_SIGNIN",
email: "user@email.com",
returnOobLink: true,
continueUrl: "www.test.com/sign-in",
canHandleCodeInApp: false,
dynamicLinkDomain: "",
androidPackageName: "",
androidMinimumVersion: "",
androidInstallApp: false,
iOSBundleId: ""
}
)
client_email = "YOUR-FIREBASE-CLIENT-EMAIL"
project_id = "YOUR-FIREBASE-PROJECT-ID"
iex(4)> FirebaseAdminEx.Auth.generate_sign_in_with_email_link(action_code_settings, client_email, project_id)
{:ok,
"{\n \"kind\": \"identitytoolkit#GetOobConfirmationCodeResponse\",\n \"email\": \"user@email.com\",\n \"oobLink\": \"https://YOUR-FIREBASE-CLIENT.firebaseapp.com/__/auth/action?mode=signIn&oobCode=xcdwelFRvfbtghHjswvw2f3g46hh6j8&apiKey=Fgae35h6j78_vbsddgs34th6h6hhekj97gfj&lang=en&continueUrl=www.test.com/sign-in\"\n}\n"}
```
## Firebase Documentation
* [Setup Guide](https://firebase.google.com/docs/admin/setup/)
* [Authentication Guide](https://firebase.google.com/docs/auth/admin/)
* [Cloud Messaging Guide](https://firebase.google.com/docs/cloud-messaging/admin/)
## License and Terms
Your use of Firebase is governed by the
[Terms of Service for Firebase Services](https://firebase.google.com/terms/).
## Disclaimer
This is not an officially supported Google product.
[adc]: https://cloud.google.com/docs/authentication#getting_credentials_for_server-centric_flow
[service_account_key_file]: https://developers.google.com/identity/protocols/OAuth2ServiceAccount#creatinganaccount
[hex_pm]: https://hex.pm/users/google-cloud
[goth]: https://hex.pm/packages/goth