0

Xamarin Android 프로젝트에 원격 알림을 구현하려고합니다. 여러 가이드에서 발견 된 단계별 지침을 따라 갔지만 OnTokenRefresh 메서드는 처음에는 호출되지 않습니다. 따라서 내 응용 프로그램이 토큰을받지 못하거나 어떠한 유형의 firebase 등록도하지 않는 것처럼 보입니다.Xamarin Android에서 OnTokenRefresh가 호출되지 않았습니다.

  1. 내 안드로이드 애플 리케이션에 중포 기지를 추가 google-services.json
  2. 내 자 마린 안드로이드 프로젝트에 google-services.json 포함을 다운로드 GoogleServicesJson
  3. 에 빌드 작업을 설정 나는 AndroidManifest.xml

    <receiver 
    android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver" 
    android:exported="false" /> 
    <receiver 
    android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" 
    android:exported="true" 
    android:permission="com.google.android.c2dm.permission.SEND"> 
        <intent-filter> 
         <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
         <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 
         <category android:name="${applicationId}" /> 
        </intent-filter> 
    </receiver> 
    
  4. 이 코드를 삽입 한
  5. 확장 클래스를 만들었습니다. FirebaseInstanceIdService

    [Service] 
    [IntentFilter(new[] { "com.google.firebase.INSTANCE_ID_EVENT" })] 
    class FirebaseRegistrationService : FirebaseInstanceIdService 
    { 
    const string TAG = "FirebaseRegistrationService"; 
    
        public override void OnTokenRefresh() 
        { 
         var refreshedToken = FirebaseInstanceId.Instance.Token; 
         System.Diagnostics.Debug.WriteLine(TAG, "Refreshed token: " + refreshedToken); 
    
         MainActivity.CurrentActivity.RunOnUiThread(() => RegisterDeviceOnServer(refreshedToken)); 
        } 
    
        public void RegisterDeviceOnServer(string refreshedToken) 
        { 
         // Custom implementation 
        } 
    } 
    

이미 말했듯이 OnTokenRefresh은 결코 호출되지 않습니다. 내가 이해할 수없는 것은 : 누가 유효한 토큰을 받기 위해 Firebase 등록을합니까? 누락 된 지시문이 있습니까? 이 등록을하는 방법이 누락 되었습니까? OnTokenRefresh가 호출되지 않는 이유는 무엇입니까? this document에 따르면

+0

'성공하지 못했습니다'또는 '성공'FirebaseApp 초기화 ​​중입니까? https://stackoverflow.com/a/42159446/4984832 – SushiHangover

+0

MainActivity에서 다음을 실행합니다 :'FirebaseApp.InitializeApp (this);'그러나이 Java 예외를 반환합니다 : "Java.Lang.IllegalStateException : 기본 FirebaseApp가이 프로세스에서 초기화되지 않았습니다. . Firebase ...를 호출하십시오. " –

+0

해결책의 정리를 만들면서 문제를 해결했습니다. 놀랄 만한. –

답변

0

(라는 제목의 섹션을 참조하십시오 중포 기지 인스턴스 ID 서비스 구현을) OnTokenRefresh이 몇 상황에서 호출됩니다

앱을 설치하거나 제거
  • .
  • 사용자가 앱 데이터를 삭제할 때.
  • 앱이 인스턴스 ID를 지울 때.
  • 토큰의 보안이 손상된 경우.

OnTokenRefresh를 실행하려면 먼저 기기에서 앱을 제거해야합니다. 그런 다음 앱을 다시 설치하고 처음 열면 OnTokenRefresh가 호출됩니다.

var intent = new Intent(this, typeof(FirebaseRegistrationService)); StartService(intent);

가 또 한 번 솔루션을 청소하고 다시 응용 프로그램을 실행 :

0

이 같이 당신의 활동에 서비스를 시작한다. xamarin에 대한 firebase의 버그가 있습니다.

관련 문제