如何设置 Android 应用程序以使用 FCM?
Posted
技术标签:
【中文标题】如何设置 Android 应用程序以使用 FCM?【英文标题】:How to setup Android application to use FCM? 【发布时间】:2017-04-20 07:35:06 【问题描述】:我已经按照教程一步一步完成了,获取json,
添加dependecies (classpath 'com.google.gms:google-services:3.0.0')
,apply plugin (apply plugin: 'com.google.gms.google-services')
,修改manifest文件。 (不要忘记将这些放入应用程序中,而不是在应用程序之外!)
<service android:name=".MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
<service android:name=".FirebaseIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
创建 firebaseMessagingService 类 (MyFirebaseMessagingService.java)
public class MyFirebaseMessagingService extends FirebaseMessagingService
private static final String TAG = "FCM Service";
@Override
public void onMessageReceived(RemoteMessage remoteMessage)
// TODO: Handle FCM messages here.
// If the application is in the foreground handle both data and notification messages here.
// Also if you intend on generating your own notifications as a result of a received FCM
// message, here is where that should be initiated.
Log.d(TAG, "From: " + remoteMessage.getFrom());
Log.d(TAG, "Notification Message Body: " + remoteMessage.getNotification().getBody());
创建扩展 FirebaseInstanceIdService 的 FirebaseIDService.java
public class FirebaseIDService extends FirebaseInstanceIdService
private static final String TAG = "FirebaseIDService";
@Override
public void onTokenRefresh()
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
// TODO: Implement this method to send any registration to your app's servers.
sendRegistrationToServer(refreshedToken);
/**
* Persist token to third-party servers.
*
* Modify this method to associate the user's FCM InstanceID token with any server-side account
* maintained by your application.
*
* @param token The new token.
*/
private void sendRegistrationToServer()
// Add custom implementation, as needed.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
这里是我的主要活动类 sn-p:
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
//FCM
FirebaseIDService firebaseIDService = new FirebaseIDService();
MyFirebaseMessagingService myFirebaseMessagingService = new MyFirebaseMessagingService();
然后我从控制台发送推送通知,但没有任何反应。缺少什么部分?或者什么东西不工作?我没有从我创建的两个类中获得任何 logcat 信息
更新: 这是我为解决 Firebase 未链接问题所做的工作: 我需要手动调用该类并获取令牌及其工作
FirebaseIDService firebaseIDService = new FirebaseIDService();
firebaseIDService.getId();
但是不知何故,推送通知仍然没有到来,我使用的 FCM 类没有给出任何 logcat,有什么想法吗?
更新: 到目前为止,我在收到消息时还没有找到解决方案。扩展 FirebaseMessagingService 的类仍然无法工作,在 logcat 中没有显示任何内容,但它确实显示了如下内容: D/FA: Logging event (FE): _nf, Bundle[_o=fcm, _ndt=0, _nmn=Bayu testing PN,_nmt=1492745322,_nmid=2820998932030178856]
【问题讨论】:
你在 logcat 中得到 refreshToken 了吗? @Bayu Wibawa 不,它不会显示在 logcat 中,我的 mainactivity 类是正确的,不是吗?我只需要在 mainactivity 上创建类来运行 onTokenRefresh 函数,对吧? 从 mainActivity 中删除你的FirebaseIDService firebaseIDService = new FirebaseIDService(); MyFirebaseMessagingService myFirebaseMessagingService = new MyFirebaseMessagingService();
行,因为它会自动调用..
我删除了它,不知何故我在 logcat 上找到了这个:D/FirebaseApp: com.google.firebase.auth.FirebaseAuth 未链接。跳过初始化。这是为什么?这是导致错误的原因吗?
代码看起来没问题。您确定将消息发送到正确的注册令牌?
【参考方案1】:
我现在可以工作了,问题是因为我将服务放在应用程序之外,所以服务必须在应用程序内部,所以 onReceivedMessage 将工作
【讨论】:
请考虑用错误清单的部分更新问题,并在答案中解释错误是什么。所以未来的读者可以从这个问题中学习。【参考方案2】:你可能跳过了这一步,因为我没有看到你提到它: 在你的模块 Gradle 文件(通常是 app/build.gradle)中,在文件底部添加 apply plugin 行以启用 Gradle 插件:
apply plugin: 'com.android.application'
android
// ...
dependencies
// ...
compile 'com.google.firebase:firebase-core:10.2.1'
// Getting a "Could not find" error? Make sure you have
// the latest Google Repository in the Android SDK manager
// ADD THIS AT THE BOTTOM
apply plugin: 'com.google.gms.google-services'
请注意: compile 'com.google.firebase:firebase-core:10.2.1'
【讨论】:
我忘了提,我添加了这两行: compile 'com.google.firebase:firebase-core:9.2.0' compile 'com.google.firebase:firebase-messaging:9.2. 0',但是当我尝试更改为 10.2.1 时出现错误 将版本号更改为您需要的任何版本,如果出现错误,请在此处发布错误以上是关于如何设置 Android 应用程序以使用 FCM?的主要内容,如果未能解决你的问题,请参考以下文章
如何构造 FCM 推送通知以在 Flutter(Android 和 iOS)的默认系统 Web 浏览器应用中打开指定的 URL
如何在 android 中使用 FCM 发送推送通知? [复制]