Как получить контекст внутри FirebaseMessagingService? - PullRequest
0 голосов
/ 10 октября 2018

У меня есть приложение, и оно использует 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) {

    }
}}

Я действительно хочу сохранить токен в своем приложении здесь, в этом сервисе.Скажите, пожалуйста, почему я не могу получить ссылку / контекст?

обновление: My CustomSharedPrefernces - это класс, который сохраняет данные в sharedPrefernces

public class CustomSharedPreferences {

public static final String FCM_GENERATED_TOKEN = "FCM_GENERATED_TOKEN";


private static CustomSharedPreferences mCustomSharedPreferences;
private final SharedPreferences sharedPreferences;

public static CustomSharedPreferences getInstance(Context context) {
    if (mCustomSharedPreferences == null) {
        mCustomSharedPreferences = new CustomSharedPreferences(context);
    }
    return mCustomSharedPreferences;
}


public CustomSharedPreferences(Context context) {
    sharedPreferences = context.getSharedPreferences("myApp", Context.MODE_PRIVATE);
}}

Обновление:

ошибка: "android.content.context в CustomSharedPreferences нельзя применить к com.myprojectname.MyFireBaseMsgAndTokenService"

Ответы [ 3 ]

0 голосов
/ 10 октября 2018

Добавьте следующий код, вот ваш класс CustomSharedPreferences.

public class SharedHelper
 {
    public static SharedPreferences sharedPreferences;
    public static SharedPreferences.Editor editor;
    public static void putKey(Context context, String Key, String Value) {
        sharedPreferences = context.getSharedPreferences(BuildConfig.APPLICATION_ID, Context.MODE_PRIVATE);
        editor = sharedPreferences.edit();
        editor.putString(Key, Value);
        editor.apply();

    }

    public static String getKey(Context context, String Key) {
        sharedPreferences = context.getSharedPreferences(BuildConfig.APPLICATION_ID, Context.MODE_PRIVATE);
        return sharedPreferences.getString(Key, "");
    }
}

после этого добавьте следующий код, добавьте в FirebaseMessagingService.class

    @Override
public void onNewToken(String s) {
    super.onNewToken(s);

    @SuppressLint("HardwareIds")
    String deviceId = Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID);

    Log.d("DEVICE_ID: " , deviceId);
    Log.d("FCM_TOKEN",s);

    SharedHelper.putKey(this, "device_token", s);
    SharedHelper.putKey(this, "device_id", deviceId);
}

не инициализируйте ваши CustomSharedPreferences внутри класса FirebaseMessagingService, это может вам помочь.

0 голосов
/ 16 июля 2019
FirebaseMessagingService extends Service 

и

Service extends ContextWrapper

и

ContextWrapper extends Context

, так что это также Context, поэтому используйте MyFirebaseMessagingService.this или просто this.

0 голосов
/ 10 октября 2018

Вы можете увидеть мою обработку уведомлений Firebase здесь:

enter image description here

public UserPreferences(Context context) {
        this.context = context;
        preferences = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
    }

Вы можете использовать просто this или getApplicationContext(), чтобы получитьконтекст

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...