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 메서드를 호출하지 않는 몇 가지 이유가 있습니다.저는 그것을 나열하고 하나씩 언급했습니다.
인터넷 권한을 추가했는지 확인하십시오.
프로젝트의 앱 디렉터리 내부에서 구글 콘솔에서 생성하는 구글-services.json 파일을 추가했는지 확인합니다.
- 모듈 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
'codememo' 카테고리의 다른 글
| Python에서 매우 큰 수를 처리합니다. (0) | 2023.06.17 |
|---|---|
| 단순 대화상자로 Python에서 파일 선택 (0) | 2023.06.17 |
| 상대 경로(리팩터링 메서드)에서 절대 URL 가져오기 (0) | 2023.06.17 |
| 오라클의 'yyy' 날짜 마스크와 'rr' 날짜 마스크의 차이점은 무엇입니까? (0) | 2023.06.17 |
| 종료 호출 후 응용 프로그램이 종료되지 않음 (0) | 2023.06.17 |
