相关疑难解决方法(0)

Firebase FCM强制onTokenRefresh()被调用

我正在将我的应用程序从GCM迁移到FCM.

当新用户安装我的应用程序时,onTokenRefresh()会自动调用该应用程序.问题是用户尚未登录(无用户ID).

如何onTokenRefresh()在用户登录后触发?

android firebase-cloud-messaging

107
推荐指数
2
解决办法
12万
查看次数

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万
查看次数

不调用onNewToken()

在过去的几天里,我试图使FCM在我的应用程序中正常工作,并且我发现一般不赞成onTokenRefreshed()函数和FirebaseInstanceIdService。因此,我在网上关注了一些Firebase文档和教程,但似乎没有一个对我有用。我的MyFirebaseMessagingService类是:

package com.example.android.aln4.Classes;

import android.util.Log;
import com.google.firebase.messaging.FirebaseMessagingService;

public class MyFirebaseMessagingService extends FirebaseMessagingService {

    private static final String TAG = "MyFirebaseMessaging";

    @Override
    public void onNewToken(String token) {
        super.onNewToken(token);
        Log.d(TAG,"Refreshed token: "+token);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的清单包含以下代码:

<service android:name=".Classes.MyFirebaseMessagingService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)

另外,我与Firebae有关的所有实现都是最新的,如下所示:

  //Firebase
    implementation 'com.google.firebase:firebase-crash:16.2.1'
    implementation 'com.firebase:firebase-client-android:2.5.2'
    implementation 'com.google.firebase:firebase-core:16.0.6'
    implementation 'com.google.firebase:firebase-database:16.0.6'
    implementation 'com.firebase:firebase-client-android:2.5.2'
    implementation 'com.firebaseui:firebase-ui-database:2.1.1'
    implementation 'com.google.firebase:firebase-storage:16.0.5'
    implementation 'com.google.firebase:firebase-firestore:18.0.0'
    implementation 'com.google.firebase:firebase-messaging:17.3.4'
Run Code Online (Sandbox Code Playgroud)

我的问题通常是,无论何时运行应用程序,无论是在卸载和安装之后还是正常运行时,都不会调用onNewToken()函数,或者至少在Logcat中看不到它。任何形式的帮助都可以申请:)

android push-notification firebase

8
推荐指数
2
解决办法
5234
查看次数

如何在FirebaseMessagingService中获取上下文?

我有一个应用程序,它使用FCM发送和接收消息。我已经按照文档中的建议实施了所有操作。

现在,要生成令牌,我想将其保存到共享首选项中。但这给了错误。

考虑类的名字像

public class MyFirebaseMsgAndTokenService extends FirebaseMessagingService {

private static final String TAG = "C_MyFirebaseIIDService";

@Override
public void onNewToken(String newToken) {
    super.onNewToken(newToken);
    Log.d(TAG, "Refreshed token: " + newToken);
    CustomSharedPreferences customSharedPreferences = new CustomSharedPreferences(this); // giving error on this
    String oldToken = customSharedPreferences.getStringData(FCM_GENERATED_TOKEN);
    sendRegistrationToServer(newToken,oldToken);
}

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

    try {

    } catch (Exception e) {

    }
}}
Run Code Online (Sandbox Code Playgroud)

我真的很想在此服务中将令牌保存到我的应用程序中。请告诉我为什么我无法获得参考/上下文?

更新:我的CustomSharedPrefernces是一个将数据保存到sharedPrefernces中的类

public class CustomSharedPreferences {

public static final String FCM_GENERATED_TOKEN = "FCM_GENERATED_TOKEN";


private …
Run Code Online (Sandbox Code Playgroud)

android android-activity

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