Do `Provide` need to be called after pinning IPLD from core API?

Hi,

I created an IPLD plugin that can create a dag-cbor (0x71) IPLD object.

And I pin it using CoreAPI interface as follow:

import (
    "context"

    custom "<plugin location>"
    "github.com/ipfs/go-ipfs/core/coreapi"
    icore "github.com/ipfs/interface-go-ipfs-core"
)

func PinCustomIPLD(ctx context.Context, ipfs icore.CoreAPI, content string) {
    ipld, _ := custom.NewCustomIPLD(content)
    ipfs.Dag().Pinning().Add(ctx, ipld)

    coreAPI, _ = ipfs.(*coreapi.CoreAPI)
    providerAPI = (*coreapi.ProviderAPI)(coreAPI)
    providerAPI.Provide(ipld.Cid())
}

Do the Provide function need to be called?

When I first-time tried to pin the IPLD object, the public gateway (such as ipfs.io) can only discover it after a few hours
Then I tried to add the Provide function, it seems also need to wait an hour to discover

Do I missing something so that the public gateway need to use a very long time to discover the content?