【发布时间】:2021-05-24 08:45:07
【问题描述】:
在制作 Android 应用程序时,我想在同一个包中的不同类(例如 DataManager.java)中使用新的 Firebase 令牌。 但是当我运行 DataManager.java 时,它总是无法获取令牌字符串。
除了将字符串存储到服务器数据库或 SharedPreference 之外,还有其他方法可以获取字符串吗? 任何建议将不胜感激。
DataManager.java
public class DataManager {
public static GCMBroadcastReceiver _fcm = null;
public static String registerGoogleServiceInBackground( final OnDataManagerRegisterGooglePlayServiceListener listener )
{
boolean isEnabledPlayService = true;
int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable( getContext() );
{
if( GooglePlayServicesUtil.isUserRecoverableError( resultCode ) )
{
GooglePlayServicesUtil.getErrorDialog( resultCode, (Activity) getContext(), PLAY_SERVICES_RESOLUTION_REQUEST ).show();
} else {
Log.i( "MainActivity.java|checkPlayService", "|This device is not supported.|" );
}
isEnabledPlayService = false;
}
if( isEnabledPlayService )
{
if( TextUtils.isEmpty( registrationId ) )
{
new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground( Void... params )
{
String msg;
try {
if( _fcm == null ){
_fcm = new GCMBroadcastReceiver();
Log.d("TEST_FCM", _fcm.getRegId());
}
_fcm.onNewToken(GCMBroadcastReceiver.token);
registrationId = _fcm.getRegId();
msg = "Device registered, registration ID=" + registrationId;
Log.d("Device registered", "|" + registrationId);
} catch( Exception ex ) {
msg = "Error :" + ex.getMessage();
}
return msg;
}
@Override
protected void onPostExecute( String msg ){
if( listener != null ) listener.onFinish( true, registrationId );
Log.i( "MainActivity.java | onPostExecute", "|" + msg + "|" );
}
}.execute( null, null, null );
return "";
}
} else {
if( listener != null ) listener.onFinish( true, registrationId );
return registrationId;
}
} else {
Log.i( "MainActivity.java | onCreate", "|No valid Google Play Services APK found.|" );
if( listener != null ) listener.onFinish( true, registrationId );
return null;
}
}
}
GCMBroadcastReceiver.java
public class GCMBroadcastReceiver extends FirebaseMessagingService
{
public static String token = null;
private static String registrationId = "123";
@Override
public void onNewToken(String token)
{
super.onNewToken(token);
Log.d("FCM_token", token);
registrationId = token;
}
public String getRegId() {
return registrationId;
}
}
日志(已编辑)
2021-05-24 16:54:38.013 1767-1866/com.counsring D/TEST_FCM: 123
2021-05-24 16:54:38.652 1767-1767/com.counsring I/MainActivity.java | onPostExecute: |Error :println needs a message|
2021-05-24 16:54:39.869 1767-1923/com.counsring D/FCM_token: foyci6cQA-M:APA91bHafND9btbiSyI9M6UhptfQxe1T9NZM72fKc4ZMhHFPS2bDjdlsWjA99vYkwt3zr3TJZYY4pF1rrfkmpl7hHmZgDn1oKnxC9fJodfwYbXdq2Z3I5XDzwpByjw6F
2021-05-24 16:54:39.869 1767-1923/com.counsring D/RegIdTest: foyci6cQA-M:APA91bHafND9btbiSyI9M6UhptfQxe1T9NZM72fKc4ZMhHFPS2bDjdlsWjA99vYkwt3zr3TJZYY4pF1rrfkmpl7hHmZgDn1oKnxC9fJodfwYbXdq2Z3I5XDzwpByjw6F
【问题讨论】:
-
你可以在任何你想要的地方获取令牌。在您的班级中使用此代码stackoverflow.com/a/64750801/7436566
-
@OhhhThatVarun 我想获得新的令牌,而不是当前的。
-
是的,我知道!这将返回新的令牌。
-
我使用了您在 DataManager 类中建议的代码,而不是 Messaging 类。但我得到一个错误:找不到符号方法 getToken()。我导入了 FirebaseMessaging 和 FirebaseMessagingService。我错过了什么?
-
很奇怪。我在一个新项目上尝试过,它对我有用。
标签: java android firebase firebase-cloud-messaging