Android:Google三方库之Firebase集成详细步骤(三)

Cloud Messaging

  1、清单文件配置

        a、(可选)一项扩展 FirebaseMessagingService 的服务。除了接收通知外,如果您还希望在后台应用中进行消息处理,则必须添加此服务。例如,您需要在前台应用中接收通知、接收数据载荷以及发送上行消息等,就必须扩展此服务

<service
    android:name=".java.MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

        b、(可选)应用组件中用于设置默认通知图标和颜色的元数据元素。如果传入的消息未明确设置图标和颜色,Android 就会使用这些值。

<meta-data
    android:name="com.google.firebase.messaging.default_notification_icon"
    android:resource="@drawable/ic_stat_ic_notification" />
<meta-data
    android:name="com.google.firebase.messaging.default_notification_color"
    android:resource="@color/colorAccent" />

         c、(可选)从 Android 8.0(API 级别 26)和更高版本开始,我们支持并推荐使用通知渠道。FCM 提供具有基本设置的默认通知渠道。如果您希望创建和使用自己的默认渠道,请将 default_notification_channel_id 设置为您的通知渠道对象的 ID(如下所示);只要传入的消息未明确设置通知渠道,FCM 就会使用此值。如需了解详情,请参阅管理通知渠道

<meta-data
    android:name="com.google.firebase.messaging.default_notification_channel_id"
    android:value="@string/default_notification_channel_id" />

以上三点都不配置的情况下:也能收到消息。如果需要在收到通知后,点击消息做特殊处理,就需要实现第一点。

2、获取设备注册令牌

初次启动您的应用时,FCM SDK 会为客户端应用实例生成一个注册令牌 (registration token)。如果您希望指定单一目标设备或者创建设备组,需要扩展 FirebaseMessagingService 并重写 onNewToken 来获取此令牌。

因为令牌可能会在初始启动后轮替,所以我们强烈建议您检索最近更新的注册令牌。

注册令牌可能会在发生下列情况时更改:

  • 应用在新设备上恢复
  • 用户卸载/重新安装应用
  • 用户清除应用数据

如果需要检索当前令牌,请调用 FirebaseMessaging.getInstance().getToken()

FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
    if (!task.isSuccessful) {
        Log.w(TAG, "Fetching FCM registration token failed", task.exception)
        return@OnCompleteListener
    }

    // Get new FCM registration token
    val token = task.result
    //把当前获取的注册token传给自己服务器
})

监控令牌的生成

每当生成新令牌时,都会触发 onNewToken 回调函数。

/**
 * 需要继承:FirebaseMessagingService,重新onNewToken方法
 */
override fun onNewToken(token: String) {
    Log.d(TAG, "Refreshed token: $token")

    //把当前token传给自己服务器
    sendRegistrationToServer(token)
}

上面的令牌需要调用后端接口传给自己服务器,如果只是需要记录安装时一次,可以只需要使用检索一次就好,不需要实时监听令牌的变化。

在所有的依赖Google服务的功能,都应该调用 GoogleApiAvailability.makeGooglePlayServicesAvailable()​​​​​​​​​​​​​​检查,如果没有就需要引导用户下载

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是使用 Firebase 实现 Android Studio 中在线交流功能的详细代码: 1. 首先,需要在 Firebase 控制台中创建一个项目,并添加 Firebase 实时数据Firebase 认证。 2. 在 Android Studio 中,添加 Firebase 依赖项。在 build.gradle 中添加以下代码: ``` dependencies { implementation 'com.google.firebase:firebase-auth:19.3.2' implementation 'com.google.firebase:firebase-database:19.3.1' implementation 'com.google.firebase:firebase-storage:19.1.1' } ``` 3. 创建一个 ChatMessage 类,用于存储聊天消息的信息。它应包含消息的文本、发送者 ID 和时间戳等属性。 ``` public class ChatMessage { private String messageText; private String messageUser; private long messageTime; public ChatMessage(String messageText, String messageUser) { this.messageText = messageText; this.messageUser = messageUser; messageTime = new Date().getTime(); } public ChatMessage() {} public String getMessageText() { return messageText; } public void setMessageText(String messageText) { this.messageText = messageText; } public String getMessageUser() { return messageUser; } public void setMessageUser(String messageUser) { this.messageUser = messageUser; } public long getMessageTime() { return messageTime; } public void setMessageTime(long messageTime) { this.messageTime = messageTime; } } ``` 4. 创建一个 ChatActivity 类,用于显示聊天消息和允许用户发送新消息。在此类中,我们将使用 Firebase 实时数据来获取和保存聊天消息。 ``` public class ChatActivity extends AppCompatActivity { private DatabaseReference mDatabase; private FirebaseUser mUser; private EditText mMessageEditText; private Button mSendButton; private RecyclerView mMessageRecyclerView; private LinearLayoutManager mLayoutManager; private List<ChatMessage> mMessagesList; private ChatAdapter mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_chat); // 获取当前用户 mUser = FirebaseAuth.getInstance().getCurrentUser(); // 获取 Firebase 实时数据的引用 mDatabase = FirebaseDatabase.getInstance().getReference().child("messages"); // 绑定视图 mMessageEditText = findViewById(R.id.messageEditText); mSendButton = findViewById(R.id.sendButton); mMessageRecyclerView = findViewById(R.id.messageRecyclerView); // 设置 RecyclerView mLayoutManager = new LinearLayoutManager(this); mLayoutManager.setStackFromEnd(true); mMessageRecyclerView.setLayoutManager(mLayoutManager); // 初始化消息列表 mMessagesList = new ArrayList<>(); // 设置适配器 mAdapter = new ChatAdapter(mMessagesList); mMessageRecyclerView.setAdapter(mAdapter); // 添加点击事件监听器来发送新消息 mSendButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String messageText = mMessageEditText.getText().toString(); if (!TextUtils.isEmpty(messageText)) { ChatMessage message = new ChatMessage(messageText, mUser.getDisplayName()); mDatabase.push().setValue(message); mMessageEditText.setText(""); } } }); // 添加值事件监听器来获取新的消息 mDatabase.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { mMessagesList.clear(); for (DataSnapshot snapshot : dataSnapshot.getChildren()) { ChatMessage message = snapshot.getValue(ChatMessage.class); mMessagesList.add(message); } mAdapter.notifyDataSetChanged(); } @Override public void onCancelled(@NonNull DatabaseError databaseError) { Log.d("ChatActivity", "onCancelled: " + databaseError.getMessage()); } }); } } ``` 5. 创建一个 ChatAdapter 类,用于将聊天消息显示为 RecyclerView 中的项。 ``` public class ChatAdapter extends RecyclerView.Adapter<ChatAdapter.MessageViewHolder> { private List<ChatMessage> mMessagesList; public ChatAdapter(List<ChatMessage> messagesList) { mMessagesList = messagesList; } @NonNull @Override public MessageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_message, parent, false); return new MessageViewHolder(view); } @Override public void onBindViewHolder(@NonNull MessageViewHolder holder, int position) { ChatMessage message = mMessagesList.get(position); holder.messageTextView.setText(message.getMessageText()); holder.nameTextView.setText(message.getMessageUser()); holder.timeTextView.setText(DateFormat.format("dd-MM-yyyy (HH:mm:ss)", message.getMessageTime())); } @Override public int getItemCount() { return mMessagesList.size(); } public static class MessageViewHolder extends RecyclerView.ViewHolder { public TextView messageTextView; public TextView nameTextView; public TextView timeTextView; public MessageViewHolder(View itemView) { super(itemView); messageTextView = itemView.findViewById(R.id.messageTextView); nameTextView = itemView.findViewById(R.id.nameTextView); timeTextView = itemView.findViewById(R.id.timeTextView); } } } ``` 6. 创建一个 item_message.xml 布局文件,用于定义 RecyclerView 中的聊天消息项。 ``` <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="16dp"> <TextView android:id="@+id/nameTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textStyle="bold" /> <TextView android:id="@+id/timeTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" /> <TextView android:id="@+id/messageTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/nameTextView" android:layout_marginTop="8dp" /> </RelativeLayout> ``` 7. 最后,在 AndroidManifest.xml 文件中添加以下权限: ``` <uses-permission android:name="android.permission.INTERNET" /> ``` 现在,您已经可以使用 Firebase 实现 Android Studio 中的在线交流功能了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨Army

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值