这是我第一次使用FCM.
我从firebase/quickstart-android下载了一个示例,我安装了FCM Quickstart.But我甚至无法从日志中获取任何令牌,甚至点击应用程序中的LOG TOKEN按钮.
然后我尝试使用Firebase控制台发送消息并设置为我的应用程序包名称.我收到任何传入消息.
我想知道可以使用FCM吗?GCM一切正常.
解:
因为我不是Android开发人员,只是一个后端开发人员.所以我需要一些时间来解决它.在我看来,示例应用程序中存在一些错误.
码:
RegistrationIntentService.java
public class RegistrationIntentService extends IntentService {
private static final String TAG = "RegIntentService";
public RegistrationIntentService() {
super(TAG);
}
@Override
protected void onHandleIntent(Intent intent) {
String token = FirebaseInstanceId.getInstance().getToken();
Log.i(TAG, "FCM Registration Token: " + token);
}
}
Run Code Online (Sandbox Code Playgroud)
MyFirebaseInstanceIDService.java
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
private static final String TAG = "MyFirebaseIIDService";
/**
* Called if InstanceID token is updated. This may occur if the security of …Run Code Online (Sandbox Code Playgroud) 我想知道在不推荐使用getToken()的情况下,获取Firebase令牌以发送推送通知的正确方法是什么.
我在Android中使用Firebase云消息传递(FCM)API进行推送通知.当我实施那个时间完美的工作,但现在它找不到谷歌播放的服务.
错误是:
FirebaseInstanceId:后台同步失败:SERVICE_NOT_AVAILABLE,
请帮我解决一下.我在gradle文件中使用了以下依赖项.
dependencies {
compile files('libs/ksoap2-android-assembly-3.4.0-jar.jar')
compile 'com.android.support:appcompat-v7:23.0.0'
compile files('libs/gson-2.2.4.jar')
compile files('libs/activation.jar')
compile files('libs/mail.jar')
compile files('libs/additionnal.jar')
compile 'com.android.support:multidex:1.0.1'
compile 'com.facebook.android:facebook-android-sdk:4.14.0'
compile 'com.google.firebase:firebase-messaging:9.0.2'
compile('com.google.android.gms:play-services:9.0.2') {
exclude group: "play-services-wallet"
exclude module: "play-services-wallet"
exclude group: "play-services-ads"
exclude module: "play-services-ads"
}
}
Run Code Online (Sandbox Code Playgroud)
感谢您抽时间阅读.
由于新的后台执行限制,我们的应用程序在Android O上崩溃.我们使用的是Firebase版本10.2.1,它是添加了Android O支持的版本.
好像是Firebase的一个问题?或者是否需要进行一些改变才能支持这一点?
java.lang.IllegalStateException: Not allowed to start service Intent { act=com.google.firebase.INSTANCE_ID_EVENT pkg=my.package.name cmp=my.package.name/my.package.name.MyFcmIdService (has extras) }: app is in background uid UidRecord{30558fa u0a327 RCVR idle procs:1 seq(0,0,0)}
at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1505)
at android.app.ContextImpl.startService(ContextImpl.java:1461)
at android.content.ContextWrapper.startService(ContextWrapper.java:644)
at android.support.v4.content.WakefulBroadcastReceiver.startWakefulService(WakefulBroadcastReceiver.java:99)
at com.google.firebase.iid.zzg.b(zzg.java:9)
at com.google.firebase.iid.zzg.a(zzg.java:72)
at com.google.firebase.iid.zzg.a(zzg.java:2)
at com.google.firebase.iid.FirebaseInstanceIdService.a(FirebaseInstanceIdService.java:23)
at com.google.firebase.iid.FirebaseInstanceIdService.a(FirebaseInstanceIdService.java:34)
at com.google.firebase.iid.FirebaseInstanceId.<init>(FirebaseInstanceId.java:31)
at com.google.firebase.iid.FirebaseInstanceId.getInstance(FirebaseInstanceId.java:47)
at com.google.firebase.iid.FirebaseInstanceId.a(FirebaseInstanceId.java:4)
at com.google.firebase.iid.FirebaseInstanceIdService.a(FirebaseInstanceIdService.java:19)
at com.google.firebase.iid.FirebaseInstanceIdService.b(FirebaseInstanceIdService.java:35)
at com.google.firebase.iid.zzb$zza$1.run(zzb.java:24)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
Run Code Online (Sandbox Code Playgroud)
更新升级到11.4.2可以解决此问题.
三星S8/S5/J2/Note3正在Firebase Push Notification成功应用程序被杀死,在后台或前台,
但Infinix Note 5 (Android One- Oreo)和Oppo F9(Oreo)如果应用程序被杀害没有得到推送通知,他们的工作很好,如果应用程序在背景或前景.
我经历了很多文章,这个和这个,提到中国手机有这个问题,并且用户方面有一些工作来使这些通知在他们的手机上工作.
但我想知道从开发方面是否有可能在每个Android设备上进行通知工作.
我的目标是API 27,这是我的代码
public class FirebaseMessagingService extends com.google.firebase.messaging.FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
String from = remoteMessage.getFrom();
Map data = remoteMessage.getData();
JSONObject jsonObject = new JSONObject();
Set<String> keys = remoteMessage.getData().keySet();
for (String key : keys) {
try {
jsonObject.put(key, remoteMessage.getData().get(key));
} catch (JSONException e) {
e.printStackTrace();
}
}
message= jsonObject.getString("message");
sendNotification(message, urlToOpen);
private void …Run Code Online (Sandbox Code Playgroud) performance android firebase firebase-cloud-messaging android-push-notification
Firebase已弃用此com.google.firebase:firebase-messaging:17.1.0版本中的一些消息传递调用.这篇文章很好地解决了这些变化.
问题:有人可以告诉我,如果不实施这是不好的做法onNewToken,而只是在每个应用程序启动时调用下面的块这对于Android人来说可能看起来过分,但从iOS的角度来看感觉就像家一样.
FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener(this) { instanceIdResult ->
// Just use this call
val newToken = instanceIdResult.token
Log.i("newToken", newToken)
}
@Override
public void onNewToken(String s) {
super.onNewToken(s);
// Leave this unimplemented
}
Run Code Online (Sandbox Code Playgroud)
我更熟悉iOS,它onNewToken在每个应用程序发布时调用它.因此,对于iOS,我在那里放置逻辑以确定我的后端是否需要更新.
getInstanceId()文档说This generates an Instance ID if it does not exist yet, which starts periodically sending information to the Firebase backend.这让我想我可以调用FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener每次启动.
我正在使用FCM向Android发送推送通知这一奇怪的问题.
目标: - 发送推送通知时出错
下面是我有功能向Android发送推送通知的场景
public static function SendMultipleNotificationAndroid($groups)
{
//your api key SERVER API KEY
$apiKey = Yii::$app->params['android_api_key'];
$url = 'https://fcm.googleapis.com/fcm/send';
$headers = array(
'Authorization:key=' . $apiKey,
'Content-Type: application/json'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
foreach($groups as $resG){
$users = $resG['users'];
$msg = $resG['message'];
$type = $resG['notification_type'];
$notification_data = $resG['notification_data'];
$deviceTokens = [];
foreach($users as $resUser){
$deviceTokens[] = $resUser['device_token'];
//Add Friend badge count +1
Common::AddRemoveBadgeCount($resUser['user_id']);
}
if(!empty($deviceTokens)){
$fields = …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用firebase接收Android通知.我已经定义了以下服务.但该服务MyFirebaseInstanceIDService是第一次运行应用程序时运行.我当时甚至没有为用户提供数据库.我想为用户存储firebase令牌,但首先我想在第一个活动上为用户创建一个条目,然后在第二个活动上启动服务.所以我可以存储用户的令牌.
Android Manifest文件
<service
android:name="in.anamika.anamika.notifications.MyFirebaseMessagingService"
android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
</intent-filter>
</service>
<service android:name="in.anamika.anamika.notifications.MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud) 当设备处于后台,前景以及通过从托盘刷卡关闭某个应用程序时,FCM推送通知在以下设备中均能正常工作。品牌名称(android-Version)Micromax(5.1)摩托罗拉(7.1.1)诺基亚(8.1.0)三星(8.0.0)Nexus(8.1.0)小米(7.1.2)
但是在oneplus的情况下,当通过从托盘中刷卡关闭应用程序时,fcm通知不起作用,但是当应用程序处于前景和背景中时,fcm通知将正常工作。 设备版本OnePlus 8.1.0
但是,当我手动关闭应用程序的电池优化选项时,在所有情况下,fcm推送通知在Oneplus设备中均可正常工作
我的androidManifest.xml是
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.demo.Notification"
android:installLocation="auto">
<uses-permission android:name="android.permission.VIBRATE" />
<application
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<!-- [START fcm_default_icon] -->
<!-- Set custom default icon. This is used when no icon is set for incoming notification messages. -->
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@mipmap/ic_launcher" />
<!-- [END fcm_default_icon] -->
<!-- [START fcm_default_channel] -->
<meta-data
android:name="com.google.firebase.messaging.default_notification_channel_id"
android:value="@string/default_notification_channel_id"/>
<!-- [END fcm_default_channel] -->
<service
android:name=".MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
<activity
android:name="com.demo.Notification.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity> …Run Code Online (Sandbox Code Playgroud) 首次尝试设置 Firebase Cloud Messaging。在 Web 应用程序指南中,有一个关于使用 监视注册令牌刷新的部分onTokenRefresh。
https://firebase.google.com/docs/cloud-messaging/js/client?authuser=0#access_the_registration_token
但是,在查看参考文档时,我发现此方法已被弃用。
https://firebase.google.com/docs/reference/js/firebase.messaging.Messaging?authuser=0#ontokenrefresh
不需要处理令牌轮换是什么意思?令牌是getToken永久获得的吗?它不是标准的 JWT 令牌,因此如果存在某种过期情况,我无法解密。