Как сгенерировать токен с помощью firebase (FCM) и поделиться им - PullRequest
1 голос
/ 23 января 2020

Я пытаюсь создать приложение, но у меня возникает проблема, когда я хочу сгенерировать токен с помощью Firebase, потому что в прошлом я использовал старый метод, предоставленный Google, но с новым методом я не могу сгенерировать токен и поделиться.

Предыдущий метод, который работал для меня, заключался в отправке токена, который устарел:

import android.util.Log;
import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.iid.FirebaseInstanceIdService;

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {

    private static final String TAG = "MyFirebaseIIDService";

    @Override
    public void onTokenRefresh() {
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();
        Log.d(TAG, "Refreshed token: " + refreshedToken);
        storeToken(refreshedToken);
    }

    private void storeToken(String token) {
        //saving the token on shared preferences
        SharedPreference.getInstance(getApplicationContext()).saveDeviceToken(token);
    }
}

И это новый метод, но он не работает. Мой токен не сгенерирован и не может быть передан:

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

public class MyFirebaseInstanceIDService extends FirebaseMessagingService {

    private static final String TAG = "MyFirebaseIIDService";

    @Override
    public void onNewToken(String token) {
        super.onNewToken(token);
        Log.d("NEW_TOKEN",token );
        storeToken(token);
    }

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);

    }

    private void storeToken(String token) {
        //saving the token on shared preferences
        SharedPreference.getInstance(getApplicationContext()).saveDeviceToken(token);
    }
}

Мой файл AndroidManifest:

<application
        android:usesCleartextTraffic = "true"
        android:name=".app.AppController"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:fullBackupContent="@xml/backup_descriptor">
        <activity android:name=".ge_inicio"
            android:screenOrientation="portrait">

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <service android:name=".MyFirebaseInstanceIDService">
            <intent-filter>
                <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
            </intent-filter>
        </service>
        <service android:name=".MyFirebaseMessagingService">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>

Спасибо за помощь

Ответы [ 3 ]

2 голосов
/ 23 января 2020

Используйте только этот код внутри AndroidManifest

    <service
        android:name=".MyFirebaseMessagingService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>

и удалите нижеуказанный метод

<service android:name=".MyFirebaseInstanceIDService">
    <intent-filter>
        <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
    </intent-filter>
</service>
  1. И очистите данные своего приложения или переустановите приложение, чтобы получить новый токен

  2. Если вы хотите получить идентификатор в других действиях, прочитайте этот ответ

0 голосов
/ 23 января 2020

Firebase Id создается один раз, когда приложение заново устанавливается, или создает идентификатор, когда кэш-память приложения очищается. Вам необходимо удалить и переустановить его перед отладкой.

0 голосов
/ 23 января 2020

Почему бы вам не попробовать этот способ генерации токена, просто поместите ниже код в вашей MainActivity.

FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(this, 
instanceIdResult -> {
String newToken = instanceIdResult.getToken();
SharedPreference.getInstance(getApplicationContext()).saveDeviceToken(token)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...