当前位置: 首页 > 知识库问答 >
问题:

如何从其他类获得Firebase令牌?

燕禄
2023-03-14
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;
        }
    }
}
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

共有1个答案

韦鸣
2023-03-14

检索当前令牌FireBaseMessaging.getInstance().getToken();

FirebaseMessaging.getInstance().getToken()
    .addOnCompleteListener(new OnCompleteListener<String>() {
        @Override
        public void onComplete(@NonNull Task<String> task) {
          if (!task.isSuccessful()) {
            Log.w(TAG, "FCM registration token failed", task.getException());
            return;
          }

          // Get new FCM registration token
          String token = task.getResult();

          // Log and toast
          String msg = getString(R.string.msg_token_fmt, token);
          Log.d(TAG, msg);
          Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
        }
    });

处理新令牌(在消息传递类中)

@Override
public void onNewToken(String token) {
    Log.d(TAG, "Refreshed token: " + token);
}

更多信息请查看Firebase文档

 类似资料:
  • 如何从Firebase获取设备令牌(FCM注册令牌)? 我正在使用firebase制作移动应用程序,并使用Node.js制作其服务器。 当用户第一次运行应用程序并注册FCM服务器时,我是否应该将令牌保存到另一个数据库?

  • 我正在开发一个通过FCM使用通知的测试应用程序。我使用Volley将数据从设备发送到服务器(WAMP),但令牌始终是空字符串/我编写的默认值。我在互联网上搜索了一下,但我仍然不知道为什么令牌没有被存储/生成(我是编码新手。)还有一件事:每次我发送令牌时,toast都会向我显示我在那里写的“好的”文本,但它也会给我很多html代码。这是我的文件:MainActivity.kt FcmInstance

  • 我创建了一个名为的类来从firebase数据库中获取所有用户数据。下面是我用来获取firebase数据(用户名)的方法。 而firebase链接也没有问题。它还提供了用户名。 当我用一些虚拟的预定义字符串数据替换username时,这段代码就可以工作了。但是当我添加用户名时,它会给我以下错误。

  • 我有2个插件A和b。我在Require-Bundle部分有插件B。但是当我试图从A类中获取B的资源时 我得到null。如果我把B的资源(文件夹)放在A的根目录上,一切都像一个魅力。我错过了什么吗? 注:我读了拉尔斯·沃格尔的文章 ^这个解决方案在我从eclipse运行插件时有效,但当我将插件打包到jar并尝试从本地更新站点安装时 附言:我也读过几个关于堆栈溢出的相关问题,但无法找到答案: Java

  • 这是我第一次使用FCM。 我从Firebase/QuickStart-Android下载了一个示例,并安装了FCM QuickStart。但我无法从日志中获得任何令牌,甚至在应用程序中点击日志令牌按钮。 然后我尝试用Firebase控制台发送消息,并设置为目标我的应用程序包名称。我收到短信了。 完成以上操作后,您将在logcat中获得令牌。但最后,我找到了一个方便的方法来获取它,只需使用debug

  • sembako.java这个主类 RootSceneController.java @fxml private void loginAction(ActionEvent事件)抛出IOException{ } 如何关闭RootSceneController.java中的窗口Sembako场景 对不起,我的英语不好