Firebase FCM HTTP v1:如何使用Go获取访问令牌?

Firebase FCM HTTP v1:如何使用Go获取访问令牌?,firebase,go,google-api,firebase-authentication,firebase-cloud-messaging,Firebase,Go,Google Api,Firebase Authentication,Firebase Cloud Messaging,为了使用Go发送Firebase云消息,我们需要将访问令牌放置在HTTP请求头中 关于Firebase文档, 下面是一些关于如何使用Node.JS、Python和Java检索访问令牌的示例: 任何人都可以使用“Go”“Go”“get the access token”来显示访问令牌吗 似乎有很多关于Firebase/Google身份验证的Go软件包。很难理解应该使用哪一种: firebase.google.com/go firebase.google.com/go/auth github.c

为了使用Go发送Firebase云消息,我们需要将访问令牌放置在HTTP请求头中

关于Firebase文档, 下面是一些关于如何使用Node.JS、Python和Java检索访问令牌的示例:

任何人都可以使用“Go”“Go”“get the access token”来显示访问令牌吗

似乎有很多关于Firebase/Google身份验证的Go软件包。很难理解应该使用哪一种:

  • firebase.google.com/go
  • firebase.google.com/go/auth
  • github.com/firebase/firebase-admin-go
  • google.golang.org/api/option
  • golang.org/x/oauth2
  • golang.org/x/oauth2/google
  • github.com/google/google-api-go-client

我正在开发go firebase SDK,以添加FCM HTTP v1

现在它几乎完成了,我必须编写测试和集成测试,您可以在这里检查代码:


我将在下周完成测试并发送一份PR(在ios+android+web上测试有点棘手)

我被大量使用了头授权

  @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                Map<String, String> headerMap = new HashMap<String, String>();
                headerMap.put("Content-Type", "application/json");
                headerMap.put("Authorization", "Bearer " + key);
                Log.v(TAG,"getHeaders "+headerMap);

                return headerMap;
            }
@覆盖
公共映射getHeaders()引发AuthFailureError{
Map headerMap=newhashmap();
headerMap.put(“内容类型”、“应用程序/json”);
标题映射put(“授权”、“持有人”+密钥);
Log.v(标签“getHeaders”+headerMap);
返回头映射;
}
但是发送授权=承载添加

如何更改为当前版本
授权:承载者

FCM httpv1使用JSON文件作为it凭证

首先下载它,然后将其移动到您的项目中。

第二,做:

go get "golang.org/x/oauth2/google"
然后使用此方法获取令牌

const firebaseScope = "https://www.googleapis.com/auth/firebase.messaging"

type tokenProvider struct {
    tokenSource oauth2.TokenSource
}

// newTokenProvider function to get token for fcm-send
func newTokenProvider(credentialsLocation string) (*tokenProvider, error) {
    jsonKey, err := ioutil.ReadFile(credentialsLocation)
    if err != nil {
        return nil, errors.New("fcm: failed to read credentials file at: " + credentialsLocation)
    }
    cfg, err := google.JWTConfigFromJSON(jsonKey, firebaseScope)
    if err != nil {
        return nil, errors.New("fcm: failed to get JWT config for the firebase.messaging scope")
    }
    ts := cfg.TokenSource(context.Background())
    return &tokenProvider{
        tokenSource: ts,
    }, nil
}

func (src *tokenProvider) token() (string, error) {
    token, err := src.tokenSource.Token()
    if err != nil {
        return "", errors.New("fcm: failed to generate Bearer token")
    }
    return token.AccessToken, nil
}
然后在FCM发送方法中调用它:

tp, err := newTokenProvider("yourJSONFileLocation")
if err != nil {
    return nil, err
}
token, err := tp.token()
if err != nil {
    return nil, err
}
最后,将其添加到标题:

r.Header.Add("Authorization", "Bearer "+token)

完成。

嗨。对不起,您能给我指一下文档吗?文档中说您需要一个访问令牌从Go发送FCM消息?好的,您应该只需要服务器密钥和有效目标来发送FCM消息。在较新的协议FCM v1 HTTP API上,您需要一个访问令牌,如下所述:好的。我快速通读了一遍。我没有从服务帐户使用FCM的经验,也没有使用Go lang的经验。但是从链接来看,您最需要的包是
golang.org/x/oauth2
。实例化谷歌的凭证是我无法理解的。对不起,我帮不了你。嘿@DanieleB。Firebase最近上传了一段关于的视频。我不知道这是否有用,当我看到你的帖子时,我想到了它。祝你好运。@AL。谢谢。这与8月份在firebase博客上发布的内容相同:但这些
定制代币
似乎与云通讯所需的
访问代币
有所不同。