📜  Firebase云功能(1)

📅  最后修改于: 2023-12-03 15:30:46.451000             🧑  作者: Mango

Firebase云功能介绍

Firebase是一个由Google提供的独立的移动和网络应用开发平台,它提供了各种云功能,包括实时数据库、身份验证、云存储、云函数、推送通知等等。

云功能列表
实时数据库

Firebase的实时数据库是一种云数据库,可让您存储和同步数据,为您的应用程序提供实时和协作功能。它将数据存储在JSON格式中,并支持本地缓存数据以提高性能。您可以使用JavaScript、Java、Objective-C、Swift、以及各种其它语言的客户端库来访问实时数据库。

代码片段:

// 从 Firebase 获取一个实时数据库引用
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("message");

// 向数据库添加数据
myRef.setValue("Hello, World!");

// 读取数据库数据并监听数据变化
myRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        String value = dataSnapshot.getValue(String.class);
        Log.d(TAG, "Value is: " + value);
    }

    @Override
    public void onCancelled(DatabaseError error) {
        Log.w(TAG, "Failed to read value.", error.toException());
    }
});
身份验证

Firebase的身份验证可以让您轻松地为您的应用程序提供用户身份验证和管理。您可以使用Firebase支持的各种身份验证方法来授权您的用户进行数据访问和操作。

代码片段:

// 在 Firebase 中创建一个新用户 
FirebaseAuth mAuth = FirebaseAuth.getInstance();
mAuth.createUserWithEmailAndPassword(email, password)
    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            if (task.isSuccessful()) {
                // 用户创建成功
                FirebaseUser user = mAuth.getCurrentUser();
            } else {
                // 用户创建失败
                Log.w(TAG, "createUserWithEmail:failure", task.getException());
                Toast.makeText(EmailPasswordActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show();
            }
        }
    });

// 对已有用户进行登录
mAuth.signInWithEmailAndPassword(email, password)
    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            if (task.isSuccessful()) {
                // 用户登录成功
                FirebaseUser user = mAuth.getCurrentUser();
            } else {
                // 用户登录失败
                Log.w(TAG, "signInWithEmail:failure", task.getException());
                Toast.makeText(EmailPasswordActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show();
            }
        }
    });
云存储

Firebase的云存储可让您安全、快速地上传和下载文件。它提供了托管存储空间来存储用户生产的内容,如照片和视频等。您可以使用各种客户端库来上传和下载文件。

代码片段:

// 从 Firebase 获取一个云存储引用
FirebaseStorage storage = FirebaseStorage.getInstance();
StorageReference storageRef = storage.getReference();

// 上传文件
Uri file = Uri.fromFile(new File("path/to/file.jpg"));
StorageReference riversRef = storageRef.child("images/file.jpg");
UploadTask uploadTask = riversRef.putFile(file);

// 记录上传进度
uploadTask.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
    @Override
    public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
        double progress = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount();
        Log.d(TAG, "Upload is " + progress + "% done");
    }
});

// 监听上传结果
uploadTask.addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception exception) {
        // 上传失败
    }
}).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
    @Override
    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
        // 上传成功
    }
});

// 下载文件
StorageReference riversRef = storageRef.child("images/file.jpg");
File localFile = new File("path/to/local/file.jpg");

riversRef.getFile(localFile)
    .addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
        @Override
        public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
            // 下载成功
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception exception) {
            // 下载失败
        }
    });
云函数

Firebase的云函数是一种基于事件驱动的计算平台,可让您轻松地以JavaScript的形式运行后端代码,并与Firebase的其他云功能进行交互。

代码片段:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

// 添加一个新用户时插入记录
exports.addUser = functions.auth.user().onCreate((user) => {
    const name = user.displayName || '用户';
    const email = user.email;
    const photoURL = user.photoURL;
    
    return admin.firestore().collection('users').doc(user.uid).set({
        name: name,
        email: email,
        photoURL: photoURL
    });
});

// 当创建新博客帖子时,自动邮件通知管理员
exports.sendNotification = functions.firestore.document('posts/{postId}').onCreate((snap, context) => {
    const postId = context.params.postId;
    const postData = snap.data();
    
    const subject = '新的博客帖子创建';
    const text = `一篇新博客帖子被创建,标题为"${postData.title}"。`;

    // 使用SMTP服务发送电子邮件
    var transporter = nodemailer.createTransport({
        host: "smtp.gmail.com",
        port: 587,
        secure: false,
        auth: {
            user: functions.config().gmail.email,
            pass: functions.config().gmail.password
        }
    });

    var mailOptions = {
        from: `Firebase Admin <${functions.config().gmail.email}>`,
        to: `admin@example.com`,
        subject: subject,
        text: text
    };

    return transporter.sendMail(mailOptions);
});
推送通知

Firebase的推送通知服务可让您向用户发送通知消息,帮助您吸引和保留用户。Firebase的推送通知可以让您轻松地通过控制台或API将通知消息发送到Android、iOS和Web的设备。

代码片段:

// 在 Firebase 控制台创建消息模板
{
  "message": {
    "notification": {
      "title": "Title",
      "body": "Message"
    },
    "webpush": {
      "fcm_options": {
        "link": "https://example.com"
      }
    },
    "token": "device_token_here" // 指定要发送消息的设备
  }
}

// 在 Android 应用中实现消息接收
public class MyFirebaseMessagingService extends FirebaseMessagingService {
    public static final String TAG = "MyFirebaseMsgService";

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        Log.d(TAG, "From: " + remoteMessage.getFrom());

        // 从 Firebase 控制台中指定的消息数据中获取通知信息
        RemoteMessage.Notification notification = remoteMessage.getNotification();

        // 显示通知
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "default")
            .setSmallIcon(R.drawable.ic_notification)
            .setContentTitle(notification.getTitle())
            .setContentText(notification.getBody())
            .setPriority(NotificationCompat.PRIORITY_DEFAULT)
            .setVisibility(NotificationCompat.VISIBILITY_PUBLIC);

        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);

        // 在Android 8.0(API级别26)及更高版本上需要一个通道,用于通知的管理
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            String channelId = getString(R.string.default_notification_channel_id);
            NotificationChannel channel = new NotificationChannel(channelId,
                    getString(R.string.default_notification_channel_name), NotificationManager.IMPORTANCE_DEFAULT);
            notificationManager.createNotificationChannel(channel);
                    builder.setChannelId(channelId);
        }

        notificationManager.notify(0, builder.build());
    }
}
总结

Firebase云功能是一个强大的云计算服务平台,它使得开发人员可以轻松地构建具备实时、快速、高可用性和可伸缩性的移动和网络应用程序。它提供了各种云功能,不管您是个Android、iOS、Web,还是Node.js等开发者,都可以轻松地选择适合你的编程语言与 Firebase 云功能进行交互。