Firebase FCM HTTP v1:如何使用Go获取访问令牌?
为了使用Go发送Firebase云消息,我们需要将访问令牌放置在HTTP请求头中 关于Firebase文档, 下面是一些关于如何使用Node.JS、Python和Java检索访问令牌的示例: 任何人都可以使用“Go”“Go”“get the access token”来显示访问令牌吗 似乎有很多关于Firebase/Google身份验证的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
- 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
我将在下周完成测试并发送一份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博客上发布的内容相同:但这些定制代币
似乎与云通讯所需的访问代币
有所不同。