codememo

TokenRefresh()의 Firebase가 호출되지 않았습니다.

tipmemo 2023. 6. 17. 09:25
반응형

TokenRefresh()의 Firebase가 호출되지 않았습니다.

내 안에서MainActivity에서 나는 내로에서, 나토을볼수있다니습을 사용하여 을 볼 수 .FirebaseInstanceId.getInstance().getToken()생성된 토큰이 표시됩니다.하지만 내 안에 있는 것처럼 보입니다.MyFirebaseInstanceIDService서 그것은 미범이치위는는으로 됩니다.FirebaseInstanceIdService,onTokenRefresh()는 호출되지 않습니다. 이 함수에서는 토큰이 처음에 여기서 생성된다고 했습니다.전화를 해야 했습니다.sendRegistrationToServer()그것이 내가 왜 그것이 미래에 들어가지 않는지 알고 싶은 이유입니다.onTokenRefresh().

여기 제 코드가 있습니다.

public class MyFirebaseInstanceIDService  extends FirebaseInstanceIdService {


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

        sendRegistrationToServer(refreshedToken);
    }
}

Firebase의 토큰 새로 고침에서.InstanceIdService는 새 토큰이 생성된 경우에만 호출됩니다.앱이 이전에 설치되어 토큰을 생성한 경우 onTokenRefresh가 호출되지 않습니다.앱을 제거하고 다시 설치하여 새 토큰을 생성해 보십시오. 그러면 onTokenRefresh가 호출됩니다.

또한 Firebase가 설치되어 있는지 확인합니다.InstanceIdService가 AndroidManifest.xml에 올바르게 정의되어 있습니다.

매니페스트 파일에 있습니다.

 <service
        android:name="com.bnt.etailers.fcm.MyFireBaseInstanceIDService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
        </intent-filter>
    </service>

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

파이어베이스InstanceIdService 클래스

public class MyFireBaseInstanceIDService extends FirebaseInstanceIdService {


private static final String TAG = MyFireBaseInstanceIDService.class.getSimpleName();

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

    if (refreshedToken!=null) {
        SettingPreferences.setStringValueInPref(this, SettingPreferences.REG_ID, refreshedToken);
    }
    // TODO: Implement this method to send any registration to your app's servers.
    sendRegistrationToServer(refreshedToken);
}
// [END refresh_token]

/**
 * Persist token to third-party servers.
 *
 * Modify this method to associate the user's FCM InstanceID token with any server-side account
 * maintained by your application.
 *
 * @param token The new token.
 */
private void sendRegistrationToServer(String token) {
    // Add custom implementation, as needed.
}}

Firebase Messaging Service 클래스입니다.

public class GCMNotificationIntentService extends FirebaseMessagingService {
// Sets an ID for the notification, so it can be updated


public GCMNotificationIntentService() {
    super();
}


@Override
public void onMessageReceived(RemoteMessage message) {

}}

저도 당신과 같은 문제가 있었습니다..나는 나의 것을 놓았습니다.<service>부태그 <application>Android Manifest.xml 파일입니다.

이제 내 것은 다음과 같습니다.

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

    <service
        android:name=".MyFirebaseMessagingService">
        <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>
</application>

그리고 문제없이 작동합니다.

예, 가끔 이런 일이 있을 수 있습니다.

당신이 fcm id를 얻고 싶은 곳이라면 어디든 다음 방법으로 전화하세요.

    try {
            String refreshedToken = FirebaseInstanceId.getInstance().getToken();
            Log.d("Firbase id login", "Refreshed token: " + refreshedToken);
        } catch (Exception e) {
            e.printStackTrace();
        }

장치나 에뮬레이터에서 먼저 제거하여 앱을 다시 설치해 보십시오.그러면 새 토큰이 생성되므로 TokenRefresh()에서 다시 호출됩니다.

저의 경우 매니페스트에 인터넷 허가를 추가하는 것을 잊었습니다.

<uses-permission android:name="android.permission.INTERNET" />

대부분의 사람들이 이런 실수를 하지 않기를 바랍니다.

try {
    FirebaseInstanceId.getInstance().deleteInstanceId();
} catch (IOException e) {
    e.printStackTrace();
}

onCreate토큰을 삭제하는 방법입니다.

다시 설치하는 것이 저에게 도움이 되었습니다.

추가했는지 확인합니다.

플러그인 적용: 'com.google.gms.google-services'

이것을 app.gradle 파일의 맨 아래로

저 같은 경우에는 다 해봤지만,onTokenRefresh호출되지 않았습니다.그런 다음 WiFi를 변경하고 다른 네트워크에 연결합니다. 이제 작동했습니다!!이전 와이파이는 인터넷 연결이 잘 되어 있는데, 왜 그런 일이 일어났는지 모르겠습니다.누군가에게 도움이 될 수도 있습니다.

나는 나의 파이어베이스를 경험했습니다.사례인터넷에 연결할 수 없는 장치에서 응용 프로그램을 실행하는 경우 ID 서비스가 호출되지 않습니다.이런 방식으로 TokenRefresh()는 호출되지 않습니다.따라서 업데이트된 Firebase를 사용하기 위해 응용 프로그램을 실행하는 동안 장치에 인터넷이 연결되어 있어야 합니다.상품권.

또한 이전 앱을 제거한 후 업데이트된 토큰을 가져오기 위해 다시 설치합니다.다음과 같은 경우 등록 토큰이 변경됩니다.

앱이 인스턴스 ID를 삭제합니다.

앱이 새 장치에 복원됩니다.

사용자가 앱을 제거/재설치합니다.

사용자가 앱 데이터를 지웁니다.

한 시간 넘게 고민하다가 다음 코드를 바꿨더니 갑자기 작동했습니다.

상쾌한 기분을 처리합니다.토큰(예:

String refreshedToken;
    try {
        refreshedToken = FirebaseInstanceId.getInstance().getToken();
        Log.d(TAG, "Refreshed token: " + refreshedToken);
        Localytics.setPushRegistrationId(refreshedToken);
    } catch (Exception e) {
        Log.d(TAG, "Refreshed token, catch: " + e.toString());
        e.printStackTrace();
    }

MyFirebase Messaging Service와 MyFirebase 모두에 Android:"true">사례매니페스트의 ID 서비스는 다음과 같습니다.

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

    <service
        android:name="com.localytics.android.sample.fcm.MyFirebaseInstanceIDService"
        android:exported="true">
        <intent-filter>
            <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
        </intent-filter>
    </service>

앱을 제거하고 다시 설치하면 작동합니다.실제 장치에서 테스트됨.

Android:prodid="true"는 기본 옵션이므로 이 옵션을 완전히 제거할 수도 있습니다. 그러면 true로 설정됩니다.

또한 TokenRefresh를 더 명시적으로 호출하려면 코드의 아무 곳에서나 호출하면 됩니다.

String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Localytics.setPushRegistrationId(refreshedToken);

당신은 더 이상 방송이 수신되는 것에 의존할 필요가 없습니다.

onTokenRefresh 메서드를 호출하지 않는 몇 가지 이유가 있습니다.저는 그것을 나열하고 하나씩 언급했습니다.

  1. 인터넷 권한을 추가했는지 확인하십시오.

  2. 프로젝트의 앱 디렉터리 내부에서 구글 콘솔에서 생성하는 구글-services.json 파일을 추가했는지 확인합니다.

enter image description here

  1. 모듈 Gradle 파일(일반적으로 app/build.gradle)에서 파일 하단에 플러그인 적용 행을 추가하여 Gradle 플러그인을 사용하도록 설정합니다.
apply plugin: 'com.android.application'

android {
  // ...
}

dependencies {
  // ...
  implementation 'com.google.firebase:firebase-core:16.0.4'

  // Getting a "Could not find" error? Make sure you have
  // added the Google maven respository to your root build.gradle
}

// ADD THIS AT THE BOTTOM
apply plugin: 'com.google.gms.google-services'

프로젝트 수준 build.gridle 파일에 play 서비스 클래스 경로 추가

buildscript {
    // ...
    dependencies {
        // ...
        classpath 'com.google.gms:google-services:4.1.0' // google-services plugin
    }
}

allprojects {
    // ...
    repositories {
        // ...
        google() // Google's Maven repository
    }
}

애플리케이션 태그 내부의 AndroidManifes 파일에 해당 서비스를 추가했는지 확인합니다.

<service
    android:name=".MyFirebaseMessagingService">
    <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> </application>

onToken refresh는 토큰을 새로 고칠 때와 앱을 처음 설치할 때 호출되므로 앱을 수동으로 삭제했는지 확인하거나 데이터를 지웁니다.

서비스 클래스에 Firebase Messaging Service를 확장했는지 확인합니다.

[참고: 안드로이드 키트캣 버전과 같은 특정 버전에서만 작동하지 않는 경우 fcm 버전을 변경해 보십시오.]

저도 같은 문제가 있었습니다. »(kitkat 4.4.2)onTokenRefresh()웬일인지 그래.제 인터넷 연결은 완벽했고, 구글 플레이 서비스는 최신 상태였고, 소방서가 작동하는 데 필요한 모든 조건이 충족되었습니다.했습니다.5.0.0그 이상.이 문제를 해결하기 위해 장치를 공장 설정으로 재설정해야 했고 애플리케이션이 작동하기 시작했습니다.그것이 어려운 조치라는 것을 알지만 아마도 누군가에게 도움이 될 것입니다.문제가 있거나 다른 응용 프로그램과 충돌하여 문제가 발생했습니다.onTokenRefresh()불리지 않는행운을 빕니다.

언급URL : https://stackoverflow.com/questions/37451395/firebase-ontokenrefresh-is-not-called

반응형