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

时间:2017-11-22 10:04:55

标签: firebase go google-api firebase-authentication firebase-cloud-messaging

要使用Go发送Firebase Cloud Messaging,我们需要将访问令牌放在HTTP请求标头中。

在Firebase文档中, 有关如何使用 Node.JS Python Java 检索访问令牌的示例:

https://firebase.google.com/docs/cloud-messaging/auth-server

任何人都可以使用开始来显示获取访问令牌吗?

似乎有许多关于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

3 个答案:

答案 0 :(得分:1)

我正在使用go firebase SDK来添加FCM HTTP v1。

现在它已经差不多完成了,我必须编写测试和集成测试,你可以在这里查看代码:https://github.com/chemidy/firebase-admin-go/tree/fcm/messaging

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

答案 1 :(得分:0)

我通过使用volly放置标题授权

  @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;
            }

但是发送Authorization = Bearer Add ..

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

答案 2 :(得分:0)

FCM httpv1 使用 JSON 文件作为它的凭据。

先下载它,然后将其移动到您的项目中。 download JSON credentials in your firebase

第二,做:

go get "golang.org/x/oauth2/google"

然后用这个方法获取token

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-Send 方法中调用它:

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)

完成。