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

如何获得Firebase令牌?[重复]

颜镜
2023-03-14

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

import android.content.Context
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.Button
import android.widget.Toast
import com.android.volley.AuthFailureError
import com.android.volley.Request
import com.android.volley.Response
import com.android.volley.toolbox.StringRequest

class MainActivity : AppCompatActivity() {
    var url: String = "......"
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        var button: Button = findViewById(R.id.save_token)
        button.setOnClickListener(object : View.OnClickListener{
            override fun onClick(v: View?) {
                val sharedPreferences =
                    applicationContext.getSharedPreferences(getString(R.string.FCM_PREF), Context.MODE_PRIVATE)
                var token: String = sharedPreferences.getString(getString(R.string.FCM_TOKEN),"noToken")
//                var token: String = "sss";
                val request = object : StringRequest(Request.Method.POST, url,
                    Response.Listener { response ->
                        Toast.makeText(this@MainActivity, "Good one $response", Toast.LENGTH_SHORT).show()
                        Log.i("My success", "" + response)
                    }, Response.ErrorListener { error ->
                        Toast.makeText(this@MainActivity, "my error :$error", Toast.LENGTH_LONG).show()
                        Log.i("My error", "" + error)
//                        println("Error $error")
                    }) {
                    @Throws(AuthFailureError::class)
                    override fun getParams(): Map<String, String> {

                        val params = HashMap<String, String>()
                        params.put("fcm_token", token)

                        return params
                    }
                }
                MySingleton.getmInstance(this@MainActivity).addToRequestQueue(request)
            }
        })

    }
}

FcmInstanceIdService.java

public class FcmInstanceIdService extends FirebaseMessagingService{
    @Override
    public void onNewToken(String s) {

        String  recent_token = s;
        SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(getString(R.string.FCM_PREF),Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString(getString(R.string.FCM_TOKEN), recent_token);
        editor.commit();
    }
}

这是我从成功吐司中获得的日志:

2019-06-11 08:48:45.135 5684-5684/com.example.rares.firebaselast D/My success: connection success<br />
    <font size='1'><table class='xdebug-error xe-notice' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
    <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Notice: Undefined variable: mysqli_close in C:\wamp64\www\firebase\fcm_insert.php on line <i>7</i></th></tr>
    <tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
    <tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
    <tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0023</td><td bgcolor='#eeeeec' align='right'>402152</td><td bgcolor='#eeeeec'>{main}(  )</td><td title='C:\wamp64\www\firebase\fcm_insert.php' bgcolor='#eeeeec'>...\fcm_insert.php<b>:</b>0</td></tr>
    </table></font>
    <br />
    <font size='1'><table class='xdebug-error xe-uncaught-exception' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
    <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Fatal error: Uncaught Error: Function name must be a string in C:\wamp64\www\firebase\fcm_insert.php on line <i>7</i></th></tr>
    <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Error: Function name must be a string in C:\wamp64\www\firebase\fcm_insert.php on line <i>7</i></th></tr>
    <tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
    <tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
    <tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0023</td><td bgcolor='#eeeeec' align='right'>402152</td><td bgcolor='#eeeeec'>{main}(  )</td><td title='C:\wamp64\www\firebase\fcm_insert.php' bgcolor='#eeeeec'>...\fcm_insert.php<b>:</b>0</td></tr>
    </table></font>

共有3个答案

戚承业
2023-03-14

为应用程序创建应用程序类:

class MyApplication : Application() {


override fun onCreate() {
    super.onCreate()
    initFCM()
}


private fun initFCM(){
    FirebaseInstanceId.getInstance().instanceId
            .addOnCompleteListener(OnCompleteListener { task ->
                if (!task.isSuccessful) {
                    return@OnCompleteListener
                }
                // Get new Instance ID token
                val token = task.result?.token
            })
}}

在 Androidmanifest.xml 文件中,在 android:name 标签中添加您的自定义应用程序类名称,如下所示。

<application
    android:name=".MyApplication "
    android:allowBackup="true" 
关正雅
2023-03-14

尝试使用FirebaseInstanceId

Firebase实例ID为每个应用程序实例提供了唯一的标识符,并提供了验证和授权操作的机制

科特林

        FirebaseInstanceId.getInstance().instanceId
                .addOnSuccessListener(object : OnSuccessListener<InstanceIdResult> {
                    override fun onSuccess(instanceIdResult: InstanceIdResult) {
                        val token = instanceIdResult.token //Token

                }
              })
段干长恨
2023-03-14
//Get Firebase FCM token
        FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(activity, new OnSuccessListener<InstanceIdResult>() {
            @Override
            public void onSuccess(InstanceIdResult instanceIdResult) {
                String token = instanceIdResult.getToken();

            }
        });

将此代码放在您第一次活动的on创建方法中以获取FCM令牌。您可以将其保存在全局变量中

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

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

  • 下面的代码使用Google oauth2机制登录用户。我们需要在用户离线时处理用户日历的更新,所以我们最终需要“刷新令牌”。grantOfflineAccess()的结果是否返回刷新令牌(在下面,我可以看到response.code包含一个可能是刷新令牌的值)? 我如何获得一个刷新令牌,可以用来(服务器端)创建新的访问键,以便离线访问用户的谷歌日历?

  • 我已经看了几天Spotify api和示例源代码,但我仍然不知道如何获得访问令牌来访问用户的播放列表数据。我已经到了打开登录窗口,用户登录,然后我收到授权码的地步。此时,我尝试做如下事情: 和 但是不管怎样,我得到的结果是: 而不是代币。我肯定这很简单,但我不擅长JS。请帮忙!谢谢! (编辑)我忘了提: api认证指南链接:https://developer.spotify.com/web-api

  • 我如何从第一次授权代码中获得刷新令牌和访问令牌?并且,我如何重用这个刷新令牌来获得一个新的访问令牌,以便使用Java API上传到Google Drive?这不是一个web应用程序。它在Java Swing代码中。