相关疑难解决方法(0)

Firebase(FCM)如何获取令牌

这是我第一次使用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)

android firebase firebase-cloud-messaging

76
推荐指数
14
解决办法
17万
查看次数

现在使用的是不推荐使用FirebaseInstanceId.getInstance().getToken()

我想知道在不推荐使用getToken()的情况下,获取Firebase令牌以发送推送通知的正确方法是什么.

android push-notification firebase firebase-cloud-messaging

65
推荐指数
2
解决办法
5万
查看次数

FirebaseCloudMessaging:FirebaseInstanceId后台同步失败 - SERVICE_NOT_AVAILABLE

我在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 firebase firebase-cloud-messaging

26
推荐指数
6
解决办法
4万
查看次数

由于后台执行限制,FirebaseMessagingService在Android O上崩溃

由于新的后台执行限制,我们的应用程序在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可以解决此问题.

firebase firebase-cloud-messaging

18
推荐指数
2
解决办法
8475
查看次数

一些Oreo设备没有获得推送通知

三星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

13
推荐指数
3
解决办法
5299
查看次数

FCM:onNewToken vs FirebaseInstanceId

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每次启动.

android firebase firebase-cloud-messaging

9
推荐指数
3
解决办法
2万
查看次数

FCM推送通知问题: - "错误":"未注册"

我正在使用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)

php android push-notification yii2 firebase-cloud-messaging

8
推荐指数
4
解决办法
3万
查看次数

通知服务

我正在尝试使用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)

android firebase firebase-cloud-messaging

7
推荐指数
1
解决办法
434
查看次数

fcm推送通知在一加6移动设备中不起作用

当设备处于后台,前景以及通过从托盘刷卡关闭某个应用程序时,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)

android battery push-notification oneplusx

6
推荐指数
1
解决办法
804
查看次数

onTokenRefresh 弃用意味着什么?

首次尝试设置 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 令牌,因此如果存在某种过期情况,我无法解密。

javascript firebase firebase-cloud-messaging

5
推荐指数
0
解决办法
944
查看次数