[proofplan]
We prove both implications directly from the adjunction data. First, if $G$ is fully faithful, we use fullness to lift the unit component $\eta_{Gd}:Gd\to GFGd$ to a morphism $\delta_d:d\to FGd$, and faithfulness then lets us check after applying $G$ that $\delta_d$ is inverse to $\varepsilon_d$. Conversely, if every counit component is an isomorphism, we identify the map on hom-sets induced by $G$ with an explicit composite of adjunction bijections and postcomposition by $\varepsilon_d^{-1}$; this gives bijectivity on every hom-set, hence full faithfulness.
[/proofplan]
[step:Lift the unit through full faithfulness and construct a candidate inverse to the counit]
Assume first that $G$ is fully faithful. Fix an object $d\in \mathcal D$. Since $G$ is full, the map
\begin{align*}
G_{d,FGd}:\operatorname{Hom}_{\mathcal D}(d,FGd) &\to \operatorname{Hom}_{\mathcal C}(Gd,GFGd) \\
\alpha &\mapsto G\alpha
\end{align*}
is surjective. Therefore there exists a morphism $\delta_d:d\to FGd$ in $\mathcal D$ such that
\begin{align*}
G\delta_d=\eta_{Gd}.
\end{align*}
We will prove that $\delta_d$ is a two-sided inverse to $\varepsilon_d$.
[guided]
Assume $G$ is fully faithful, and fix $d\in \mathcal D$. To prove that $\varepsilon_d:FGd\to d$ is an isomorphism, we must construct a morphism going in the opposite direction. The only natural morphism with the right shape after applying $G$ is the unit component
\begin{align*}
\eta_{Gd}:Gd\to GFGd.
\end{align*}
Fullness of $G$ says that every morphism between objects in the image of $G$ comes from a morphism in $\mathcal D$. More precisely, the function
\begin{align*}
G_{d,FGd}:\operatorname{Hom}_{\mathcal D}(d,FGd) &\to \operatorname{Hom}_{\mathcal C}(Gd,GFGd) \\
\alpha &\mapsto G\alpha
\end{align*}
is surjective. Applying this surjectivity to $\eta_{Gd}$ gives a morphism $\delta_d:d\to FGd$ such that
\begin{align*}
G\delta_d=\eta_{Gd}.
\end{align*}
The strategy is now to show that $\delta_d$ is inverse to $\varepsilon_d$. Because $G$ is faithful, it is enough to prove the required equalities after applying $G$.
[/guided]
[/step]
[step:Show the lifted morphism is a right inverse to the counit]
By the triangle identity for the adjunction $F\dashv G$, applied to the object $d\in\mathcal D$, we have
\begin{align*}
G\varepsilon_d\circ \eta_{Gd}=\operatorname{id}_{Gd}.
\end{align*}
Using $G\delta_d=\eta_{Gd}$, this gives
\begin{align*}
G(\varepsilon_d\circ \delta_d)
=G\varepsilon_d\circ G\delta_d
=G\varepsilon_d\circ \eta_{Gd}
=\operatorname{id}_{Gd}
=G(\operatorname{id}_d).
\end{align*}
Since $G$ is faithful, it follows that
\begin{align*}
\varepsilon_d\circ \delta_d=\operatorname{id}_d.
\end{align*}
[guided]
We first prove that $\delta_d$ is a right inverse to $\varepsilon_d$, meaning $\varepsilon_d\circ \delta_d=\operatorname{id}_d$. The second triangle identity for the adjunction $F\dashv G$ states that, for every object $d\in\mathcal D$,
\begin{align*}
G\varepsilon_d\circ \eta_{Gd}=\operatorname{id}_{Gd}.
\end{align*}
Our construction of $\delta_d$ gave $G\delta_d=\eta_{Gd}$. Substituting this into the triangle identity yields
\begin{align*}
G(\varepsilon_d\circ \delta_d)
=G\varepsilon_d\circ G\delta_d
=G\varepsilon_d\circ \eta_{Gd}
=\operatorname{id}_{Gd}
=G(\operatorname{id}_d).
\end{align*}
Faithfulness of $G$ means that the map on each hom-set is injective. Since $\varepsilon_d\circ \delta_d$ and $\operatorname{id}_d$ are morphisms $d\to d$ whose images under $G$ are equal, faithfulness gives
\begin{align*}
\varepsilon_d\circ \delta_d=\operatorname{id}_d.
\end{align*}
[/guided]
[/step]
[step:Show the lifted morphism is a left inverse to the counit]
It remains to prove $\delta_d\circ \varepsilon_d=\operatorname{id}_{FGd}$. Use the adjunction bijection
\begin{align*}
\Phi_{Gd,FGd}:\operatorname{Hom}_{\mathcal D}(FGd,FGd)&\to \operatorname{Hom}_{\mathcal C}(Gd,GFGd) \\
h&\mapsto Gh\circ \eta_{Gd}.
\end{align*}
This map is injective because it is a bijection. For $h=\delta_d\circ\varepsilon_d$, functoriality, the definition of $\delta_d$, and the triangle identity give
\begin{align*}
\Phi_{Gd,FGd}(\delta_d\circ\varepsilon_d)
&=G(\delta_d\circ\varepsilon_d)\circ \eta_{Gd} \\
&=G\delta_d\circ G\varepsilon_d\circ \eta_{Gd} \\
&=\eta_{Gd}\circ G\varepsilon_d\circ \eta_{Gd} \\
&=\eta_{Gd}\circ \operatorname{id}_{Gd} \\
&=\eta_{Gd}.
\end{align*}
For the identity morphism on $FGd$,
\begin{align*}
\Phi_{Gd,FGd}(\operatorname{id}_{FGd})
=G(\operatorname{id}_{FGd})\circ \eta_{Gd}
=\operatorname{id}_{GFGd}\circ \eta_{Gd}
=\eta_{Gd}.
\end{align*}
Injectivity of $\Phi_{Gd,FGd}$ therefore gives
\begin{align*}
\delta_d\circ \varepsilon_d=\operatorname{id}_{FGd}.
\end{align*}
Thus $\varepsilon_d$ is an isomorphism with inverse $\delta_d$.
[guided]
We now prove the other inverse identity, $\delta_d\circ \varepsilon_d=\operatorname{id}_{FGd}$. We must avoid cancelling $\varepsilon_d$ on the left, since the previous step only proved that $\varepsilon_d$ has a right inverse. Instead we use the hom-set bijection supplied by the adjunction.
For the objects $Gd\in\mathcal C$ and $FGd\in\mathcal D$, the adjunction gives a bijection
\begin{align*}
\Phi_{Gd,FGd}:\operatorname{Hom}_{\mathcal D}(FGd,FGd)&\to \operatorname{Hom}_{\mathcal C}(Gd,GFGd) \\
h&\mapsto Gh\circ \eta_{Gd}.
\end{align*}
Because $\Phi_{Gd,FGd}$ is a bijection, it is injective. Therefore it is enough to show that $\delta_d\circ\varepsilon_d$ and $\operatorname{id}_{FGd}$ have the same image under $\Phi_{Gd,FGd}$.
First compute the image of $\delta_d\circ\varepsilon_d$. Functoriality of $G$ gives $G(\delta_d\circ\varepsilon_d)=G\delta_d\circ G\varepsilon_d$, and the construction of $\delta_d$ gives $G\delta_d=\eta_{Gd}$. Hence
\begin{align*}
\Phi_{Gd,FGd}(\delta_d\circ\varepsilon_d)
&=G(\delta_d\circ\varepsilon_d)\circ \eta_{Gd} \\
&=G\delta_d\circ G\varepsilon_d\circ \eta_{Gd} \\
&=\eta_{Gd}\circ G\varepsilon_d\circ \eta_{Gd}.
\end{align*}
The triangle identity for the adjunction at the object $d\in\mathcal D$ states that
\begin{align*}
G\varepsilon_d\circ \eta_{Gd}=\operatorname{id}_{Gd}.
\end{align*}
Substituting this identity into the preceding calculation gives
\begin{align*}
\Phi_{Gd,FGd}(\delta_d\circ\varepsilon_d)
=\eta_{Gd}\circ \operatorname{id}_{Gd}
=\eta_{Gd}.
\end{align*}
Now compute the image of the identity morphism on $FGd$. Since $G$ preserves identity morphisms,
\begin{align*}
\Phi_{Gd,FGd}(\operatorname{id}_{FGd})
=G(\operatorname{id}_{FGd})\circ \eta_{Gd}
=\operatorname{id}_{GFGd}\circ \eta_{Gd}
=\eta_{Gd}.
\end{align*}
Thus
\begin{align*}
\Phi_{Gd,FGd}(\delta_d\circ\varepsilon_d)
=\Phi_{Gd,FGd}(\operatorname{id}_{FGd}).
\end{align*}
Injectivity of the adjunction bijection $\Phi_{Gd,FGd}$ gives
\begin{align*}
\delta_d\circ \varepsilon_d=\operatorname{id}_{FGd}.
\end{align*}
Together with the already proved identity $\varepsilon_d\circ\delta_d=\operatorname{id}_d$, this shows that $\delta_d$ is a two-sided inverse to $\varepsilon_d$. Therefore $\varepsilon_d$ is an isomorphism.
[/guided]
[/step]
[step:Use invertible counits to prove faithfulness of $G$]
Conversely, assume that $\varepsilon_d:FGd\to d$ is an isomorphism for every object $d\in\mathcal D$. Let $d,d'\in\mathcal D$ be objects. Suppose $f,g:d\to d'$ are morphisms in $\mathcal D$ such that $Gf=Gg$. Applying $F$ gives
\begin{align*}
FGf=FGg.
\end{align*}
By naturality of the counit, we have
\begin{align*}
f\circ \varepsilon_d=\varepsilon_{d'}\circ FGf,
\qquad
g\circ \varepsilon_d=\varepsilon_{d'}\circ FGg.
\end{align*}
Hence
\begin{align*}
f\circ \varepsilon_d=g\circ \varepsilon_d.
\end{align*}
Since $\varepsilon_d$ is an isomorphism, it is an epimorphism, so $f=g$. Therefore $G$ is faithful.
[guided]
Assume now that every counit component $\varepsilon_d:FGd\to d$ is an isomorphism. We first prove faithfulness. Fix objects $d,d'\in\mathcal D$, and let $f,g:d\to d'$ be morphisms with
\begin{align*}
Gf=Gg.
\end{align*}
Applying the functor $F$ gives
\begin{align*}
FGf=FGg.
\end{align*}
Naturality of the counit $\varepsilon:FG\Rightarrow \operatorname{id}_{\mathcal D}$ says that for every morphism $h:x\to y$ in $\mathcal D$,
\begin{align*}
h\circ \varepsilon_x=\varepsilon_y\circ FGh.
\end{align*}
Using this with $h=f$ and then with $h=g$, we get
\begin{align*}
f\circ \varepsilon_d=\varepsilon_{d'}\circ FGf,
\qquad
g\circ \varepsilon_d=\varepsilon_{d'}\circ FGg.
\end{align*}
Since $FGf=FGg$, the right-hand sides agree, so
\begin{align*}
f\circ \varepsilon_d=g\circ \varepsilon_d.
\end{align*}
Because $\varepsilon_d$ is an isomorphism, we may compose on the right with its inverse $\varepsilon_d^{-1}:d\to FGd$. This yields
\begin{align*}
f
=f\circ \varepsilon_d\circ \varepsilon_d^{-1}
=g\circ \varepsilon_d\circ \varepsilon_d^{-1}
=g.
\end{align*}
Thus the map induced by $G$ on $\operatorname{Hom}_{\mathcal D}(d,d')$ is injective, and $G$ is faithful.
[/guided]
[/step]
[step:Use invertible counits to prove fullness of $G$]
Let $d,d'\in\mathcal D$ be objects, and let
\begin{align*}
u:Gd\to Gd'
\end{align*}
be a morphism in $\mathcal C$. Define a morphism $\bar u:d\to d'$ in $\mathcal D$ by
\begin{align*}
\bar u:=\varepsilon_{d'}\circ F u\circ \varepsilon_d^{-1}.
\end{align*}
We prove that $G\bar u=u$.
Naturality of $\eta$ applied to $u:Gd\to Gd'$ gives
\begin{align*}
GFu\circ \eta_{Gd}=\eta_{Gd'}\circ u.
\end{align*}
The triangle identity gives
\begin{align*}
G\varepsilon_d\circ \eta_{Gd}=\operatorname{id}_{Gd},
\qquad
G\varepsilon_{d'}\circ \eta_{Gd'}=\operatorname{id}_{Gd'}.
\end{align*}
Since $\varepsilon_d$ is an isomorphism, applying $G$ shows that $G\varepsilon_d$ is an isomorphism with inverse $G(\varepsilon_d^{-1})$. From
\begin{align*}
G\varepsilon_d\circ \eta_{Gd}=\operatorname{id}_{Gd}
\end{align*}
we obtain
\begin{align*}
G(\varepsilon_d^{-1})=\eta_{Gd}.
\end{align*}
Therefore
\begin{align*}
G\bar u
&=G\varepsilon_{d'}\circ GFu\circ G(\varepsilon_d^{-1}) \\
&=G\varepsilon_{d'}\circ GFu\circ \eta_{Gd} \\
&=G\varepsilon_{d'}\circ \eta_{Gd'}\circ u \\
&=\operatorname{id}_{Gd'}\circ u \\
&=u.
\end{align*}
Thus every morphism $u:Gd\to Gd'$ lies in the image of the hom-map induced by $G$, so $G$ is full.
[guided]
We now prove fullness. Fix objects $d,d'\in\mathcal D$, and let
\begin{align*}
u:Gd\to Gd'
\end{align*}
be any morphism in $\mathcal C$. To show fullness, we must find a morphism $\bar u:d\to d'$ in $\mathcal D$ such that $G\bar u=u$.
Because the counit components are isomorphisms, the objects $d$ and $d'$ are isomorphic to $FGd$ and $FGd'$. This suggests transporting $u$ across $F$ and then using the counit isomorphisms. Define
\begin{align*}
\bar u:=\varepsilon_{d'}\circ F u\circ \varepsilon_d^{-1}:d\to d'.
\end{align*}
The types are correct: $\varepsilon_d^{-1}:d\to FGd$, then $Fu:FGd\to FGd'$, and then $\varepsilon_{d'}:FGd'\to d'$.
We compute $G\bar u$. Naturality of the unit $\eta:\operatorname{id}_{\mathcal C}\Rightarrow GF$ applied to $u:Gd\to Gd'$ gives
\begin{align*}
GFu\circ \eta_{Gd}=\eta_{Gd'}\circ u.
\end{align*}
The triangle identity gives
\begin{align*}
G\varepsilon_d\circ \eta_{Gd}=\operatorname{id}_{Gd},
\qquad
G\varepsilon_{d'}\circ \eta_{Gd'}=\operatorname{id}_{Gd'}.
\end{align*}
Since $\varepsilon_d$ is an isomorphism, $G\varepsilon_d$ is an isomorphism with inverse $G(\varepsilon_d^{-1})$. The equality
\begin{align*}
G\varepsilon_d\circ \eta_{Gd}=\operatorname{id}_{Gd}
\end{align*}
therefore identifies $\eta_{Gd}$ as the inverse of $G\varepsilon_d$, so
\begin{align*}
G(\varepsilon_d^{-1})=\eta_{Gd}.
\end{align*}
Now apply $G$ to the definition of $\bar u$ and substitute these identities:
\begin{align*}
G\bar u
&=G\varepsilon_{d'}\circ GFu\circ G(\varepsilon_d^{-1}) \\
&=G\varepsilon_{d'}\circ GFu\circ \eta_{Gd} \\
&=G\varepsilon_{d'}\circ \eta_{Gd'}\circ u \\
&=\operatorname{id}_{Gd'}\circ u \\
&=u.
\end{align*}
Thus every morphism $u:Gd\to Gd'$ is the image under $G$ of some morphism $\bar u:d\to d'$, so the hom-map induced by $G$ is surjective. Hence $G$ is full.
[/guided]
[/step]
[step:Conclude the equivalence]
The first three steps show that full faithfulness of $G$ implies that every counit component $\varepsilon_d$ is an isomorphism. The last two steps show that if every counit component is an isomorphism, then $G$ is both faithful and full. Therefore $G$ is fully faithful if and only if $\varepsilon_d:FGd\to d$ is an isomorphism for every object $d\in\mathcal D$.
[/step]