Skip to content

Commit 5dd4879

Browse files
Mobile Ads Developer Relationscopybara-github
authored andcommitted
Add PlacementId to RewardedAd.
PiperOrigin-RevId: 802381820
1 parent 2f48f36 commit 5dd4879

File tree

12 files changed

+169
-3
lines changed

12 files changed

+169
-3
lines changed

source/plugin/Assets/GoogleMobileAds/Api/RewardedAd.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,26 @@ public class RewardedAd
5757
/// </summary>
5858
public event Action<AdError> OnAdFullScreenContentFailed;
5959

60+
/// <summary>
61+
/// A long integer provided by the AdMob UI for the configured placement.
62+
/// To ensure this placement ID is included in reporting, set a value before showing the ad.
63+
/// </summary>
64+
public long PlacementId
65+
{
66+
get
67+
{
68+
return _client != null ? _client.PlacementId : 0;
69+
}
70+
71+
set
72+
{
73+
if (_client != null)
74+
{
75+
_client.PlacementId = value;
76+
}
77+
}
78+
}
79+
6080
private IRewardedAdClient _client;
6181
private bool _canShowAd;
6282
private Action<Reward> _userRewardEarnedCallback;

source/plugin/Assets/GoogleMobileAds/Common/IRewardedAdClient.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,23 +22,34 @@ public interface IRewardedAdClient
2222
{
2323
// Ad event fired when the rewarded ad has been received.
2424
event EventHandler<EventArgs> OnAdLoaded;
25+
2526
// Ad event fired when the rewarded ad has failed to load.
2627
event EventHandler<LoadAdErrorClientEventArgs> OnAdFailedToLoad;
28+
2729
// Ad event fired when the rewarded ad is estimated to have earned money.
2830
event Action<AdValue> OnPaidEvent;
31+
2932
// Ad event fired when the rewarded ad has rewarded the user.
3033
event EventHandler<Reward> OnUserEarnedReward;
34+
3135
// Ad event fired when the full screen content has failed to be presented.
3236
event EventHandler<AdErrorClientEventArgs> OnAdFailedToPresentFullScreenContent;
37+
3338
// Ad event fired when the full screen content has been presented.
3439
event EventHandler<EventArgs> OnAdDidPresentFullScreenContent;
40+
3541
// Ad event fired when the full screen content has been dismissed.
3642
event EventHandler<EventArgs> OnAdDidDismissFullScreenContent;
43+
3744
// Ad event fired when an ad impression has been recorded.
3845
event EventHandler<EventArgs> OnAdDidRecordImpression;
46+
3947
// Ad event fired when an ad has been clicked.
4048
event Action OnAdClicked;
4149

50+
// A long integer provided by the AdMob UI for the configured placement.
51+
long PlacementId { get; set; }
52+
4253
// Creates a rewarded ad.
4354
void CreateRewardedAd();
4455

source/plugin/Assets/GoogleMobileAds/Platforms/Android/RewardedAdClient.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,17 @@ public RewardedAdClient() : base(Utils.UnityRewardedAdCallbackClassName)
5252

5353
public event Action OnAdClicked;
5454

55+
public long PlacementId {
56+
get
57+
{
58+
return androidRewardedAd.Call<long>("getPlacementId");
59+
}
60+
set
61+
{
62+
androidRewardedAd.Call("setPlacementId", value);
63+
}
64+
}
65+
5566
public void CreateRewardedAd()
5667
{
5768
// No op.

source/plugin/Assets/GoogleMobileAds/Platforms/Unity/RewardingAdBaseClient.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ public class RewardingAdBaseClient : BaseAdClient
4545
// Ad event fired when an ad impression has been clicked.
4646
public event Action OnAdClicked;
4747

48+
// The placement ID for the ad.
49+
public long PlacementId { get; set; }
50+
4851
internal static readonly Dictionary<AdSize, string> prefabAds = new Dictionary<AdSize, string>()
4952
{
5053
{new AdSize (768,1024), "PlaceholderAds/Rewarded/768x1024" },

source/plugin/Assets/GoogleMobileAds/Platforms/iOS/Externs.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -715,6 +715,12 @@ internal static extern IntPtr GADULoadRewardedAd(IntPtr interstitialAd, string a
715715
[DllImport("__Internal")]
716716
internal static extern string GADUGetRewardedAdUnitID(IntPtr rewardedAd);
717717

718+
[DllImport("__Internal")]
719+
internal static extern long GADUGetRewardedAdPlacementID(IntPtr rewardedAd);
720+
721+
[DllImport("__Internal")]
722+
internal static extern void GADUSetRewardedAdPlacementID(IntPtr rewardedAd, long placementId);
723+
718724
[DllImport("__Internal")]
719725
internal static extern void GADUSetRewardedAdCallbacks(
720726
IntPtr rewardedAd, RewardedAdClient.GADURewardedAdLoadedCallback adLoadedCallback,

source/plugin/Assets/GoogleMobileAds/Platforms/iOS/RewardedAdClient.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,27 @@ internal delegate void GADURewardedAdPaidEventCallback(
7474

7575
public event Action OnAdClicked;
7676

77+
public long PlacementId {
78+
get
79+
{
80+
if (this.RewardedAdPtr == IntPtr.Zero)
81+
{
82+
return 0;
83+
}
84+
return Externs.GADUGetRewardedAdPlacementID(this.RewardedAdPtr);
85+
}
86+
87+
set
88+
{
89+
if (this.RewardedAdPtr == IntPtr.Zero)
90+
{
91+
Debug.LogError("PlacementId can be set once the Rewarded ad is loaded.");
92+
return;
93+
}
94+
Externs.GADUSetRewardedAdPlacementID(this.RewardedAdPtr, value);
95+
}
96+
}
97+
7798
// This property should be used when setting the rewardedAdPtr.
7899
private IntPtr RewardedAdPtr
79100
{

source/plugin/Assets/Plugins/Android/GoogleMobileAdsPlugin.androidlib/src/main/java/com/google/unity/ads/UnityRewardedAd.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,29 @@ public String getAdUnitId() {
271271
return rewardedAd.getAdUnitId();
272272
}
273273

274+
/** Gets the placement ID for the {@link RewardedAd}. */
275+
public long getPlacementId() {
276+
if (rewardedAd == null) {
277+
return 0;
278+
}
279+
return rewardedAd.getPlacementId();
280+
}
281+
282+
/**
283+
* Sets a placement ID for the {@link RewardedAd}.
284+
*
285+
* <p>To ensure this placement ID is included in reporting, call this method before showing the
286+
* ad.
287+
*
288+
* @param placementId A long integer provided by the AdMob UI for the configured placement.
289+
*/
290+
public void setPlacementId(long placementId) {
291+
if (rewardedAd == null) {
292+
return;
293+
}
294+
rewardedAd.setPlacementId(placementId);
295+
}
296+
274297
/** Returns the request response info. */
275298
@Nullable
276299
public ResponseInfo getResponseInfo() {

source/plugin/Assets/Plugins/Android/GoogleMobileAdsPlugin.androidlib/src/test/java/com/google/unity/ads/UnityRewardedAdTest.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,54 @@ public void showAd_shouldEnableImmersiveMode_whenLoaded() throws Exception {
161161
verify(mockRewardedAd).setImmersiveMode(eq(true));
162162
}
163163

164+
@Test
165+
public void getPlacementId_returnsZero_whenAdIsNull() throws Exception {
166+
assertThat(unityRewardedAd.getPlacementId()).isEqualTo(0);
167+
}
168+
169+
@Test
170+
public void getPlacementId_returnsPlacementIdFromTheAd() throws Exception {
171+
loadRewardedAd();
172+
long placementId = 12345L;
173+
when(mockRewardedAd.getPlacementId()).thenReturn(placementId);
174+
175+
long result = unityRewardedAd.getPlacementId();
176+
177+
assertThat(result).isEqualTo(placementId);
178+
}
179+
180+
@Test
181+
public void getPlacementId_returnsPreviouslySetPlacementId() throws Exception {
182+
loadRewardedAd();
183+
long placementId = 23456L;
184+
when(mockRewardedAd.getPlacementId()).thenReturn(placementId);
185+
186+
unityRewardedAd.setPlacementId(placementId);
187+
long result = unityRewardedAd.getPlacementId();
188+
189+
verify(mockRewardedAd).setPlacementId(placementId);
190+
assertThat(result).isEqualTo(placementId);
191+
}
192+
193+
@Test
194+
public void setPlacementId_doesNothing_whenAdIsNull() throws Exception {
195+
long placementId = 54321L;
196+
197+
unityRewardedAd.setPlacementId(placementId);
198+
199+
assertThat(unityRewardedAd.getPlacementId()).isEqualTo(0);
200+
}
201+
202+
@Test
203+
public void setPlacementId_setsPlacementIdOnTheAd() throws Exception {
204+
loadRewardedAd();
205+
long placementId = 54321L;
206+
207+
unityRewardedAd.setPlacementId(placementId);
208+
209+
verify(mockRewardedAd).setPlacementId(placementId);
210+
}
211+
164212
private void loadRewardedAd() throws Exception {
165213
doAnswer(
166214
invocation -> {

source/plugin/Assets/Plugins/iOS/GADUAppOpenAd.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,10 @@
4848
/// The ad click callback into Unity.
4949
@property(nonatomic, assign, nullable) GADUAppOpenAdDidRecordClickCallback adDidRecordClickCallback;
5050

51-
// The app open ad response info.
51+
/// The app open ad response info.
5252
@property(nonatomic, readonly, copy, nullable) GADResponseInfo *responseInfo;
5353

54-
// A long integer provided by the AdMob UI for the configured placement.
54+
/// A long integer provided by the AdMob UI for the configured placement.
5555
@property(atomic, readwrite) int64_t placementID;
5656

5757
#if GMA_PREVIEW_FEATURES

source/plugin/Assets/Plugins/iOS/GADUInterface.m

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1303,6 +1303,18 @@ void GADUShowRewardedAd(GADUTypeRewardedAdRef rewardedAd) {
13031303
return cStringCopy(internalRewardedAd.rewardedAd.adUnitID.UTF8String);
13041304
}
13051305

1306+
/// Get the Rewarded ad placement ID.
1307+
int64_t GADUGetRewardedAdPlacementID(GADUTypeRewardedAdRef rewardedAd) {
1308+
GADURewardedAd *internalRewardedAd = (__bridge GADURewardedAd *)rewardedAd;
1309+
return internalRewardedAd.rewardedAd.placementID;
1310+
}
1311+
1312+
/// Set the Rewarded ad placement ID.
1313+
void GADUSetRewardedAdPlacementID(GADUTypeRewardedAdRef rewardedAd, int64_t placementID) {
1314+
GADURewardedAd *internalRewardedAd = (__bridge GADURewardedAd *)rewardedAd;
1315+
[internalRewardedAd setPlacementID:placementID];
1316+
}
1317+
13061318
/// Returns the type of the reward.
13071319
const char *GADURewardedAdGetRewardType(GADUTypeRewardedAdRef rewardedAd) {
13081320
GADURewardedAd *internalRewardedAd = (__bridge GADURewardedAd *)rewardedAd;

0 commit comments

Comments
 (0)