Skip to content

Commit 76f1506

Browse files
Fix for gma android failing assert (#1385)
1 parent 936ef5e commit 76f1506

File tree

3 files changed

+20
-16
lines changed

3 files changed

+20
-16
lines changed

gma/integration_test/src/integration_test.cc

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -919,18 +919,15 @@ TEST_F(FirebaseGmaTest, TestNativeAdLoad) {
919919
EXPECT_FALSE(result_ptr->response_info().ToString().empty());
920920

921921
// Check image assets.
922-
EXPECT_FALSE(native_ad->icon().image_uri().empty());
923-
EXPECT_GT(native_ad->icon().scale(), 0);
924-
EXPECT_FALSE(native_ad->images().empty());
925-
926922
// Native ads usually contain only one large image asset.
927923
// Check the validity of the first asset from the vector.
924+
EXPECT_FALSE(native_ad->images().empty());
928925
EXPECT_FALSE(native_ad->images().at(0).image_uri().empty());
929926
EXPECT_GT(native_ad->images().at(0).scale(), 0);
930927

931-
// When the NativeAd is loaded, try loading icon image asset.
928+
// Try loading large image asset.
932929
firebase::Future<firebase::gma::ImageResult> load_image_future =
933-
native_ad->icon().LoadImage();
930+
native_ad->images().at(0).LoadImage();
934931
WaitForCompletion(load_image_future, "LoadImage");
935932
const firebase::gma::ImageResult* img_result_ptr =
936933
load_image_future.result();

gma/src/android/gma_android.cc

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -907,20 +907,23 @@ void JNI_NativeAd_completeLoadedAd(JNIEnv* env, jclass clazz, jlong data_ptr,
907907
FIREBASE_ASSERT(env);
908908
FIREBASE_ASSERT(data_ptr);
909909
FIREBASE_ASSERT(native_internal_data_ptr);
910-
FIREBASE_ASSERT(j_icon);
911910
FIREBASE_ASSERT(j_images);
912911
FIREBASE_ASSERT(j_response_info);
913912

914913
internal::NativeAdInternalAndroid* native_ad_internal =
915914
reinterpret_cast<internal::NativeAdInternalAndroid*>(
916915
native_internal_data_ptr);
917916

918-
NativeAdImageInternal icon_internal;
919-
icon_internal.native_ad_image = j_icon;
917+
// getIcon() is nullable and a valid ad can exist without an icon image.
918+
if (j_icon != nullptr) {
919+
NativeAdImageInternal icon_internal;
920+
icon_internal.native_ad_image = j_icon;
920921

921-
// Invoke a friend of NativeAdInternal to update its icon image asset.
922-
GmaInternal::InsertNativeInternalImage(native_ad_internal, icon_internal,
923-
true, true);
922+
// Invoke a friend of NativeAdInternal to update its icon image asset.
923+
GmaInternal::InsertNativeInternalImage(native_ad_internal, icon_internal,
924+
true, true);
925+
env->DeleteLocalRef(j_icon);
926+
}
924927

925928
const size_t len = env->GetArrayLength(j_images);
926929
// Loop through images array.
@@ -936,7 +939,7 @@ void JNI_NativeAd_completeLoadedAd(JNIEnv* env, jclass clazz, jlong data_ptr,
936939
reinterpret_cast<FutureCallbackData<AdResult>*>(data_ptr);
937940
GmaInternal::CompleteLoadAdFutureSuccess(
938941
callback_data, ResponseInfoInternal({j_response_info}));
939-
env->DeleteLocalRef(j_icon);
942+
940943
env->DeleteLocalRef(j_response_info);
941944
}
942945

gma/src/ios/native_ad_internal_ios.mm

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -222,9 +222,13 @@
222222
firebase::MutexLock lock(mutex_);
223223
native_ad_ = ad;
224224

225-
NativeAdImageInternal icon_internal;
226-
icon_internal.native_ad_image = ad.icon;
227-
GmaInternal::InsertNativeInternalImage(this, icon_internal, true, true );
225+
NSObject *gad_icon = ad.icon;
226+
if (gad_icon != nil)
227+
{
228+
NativeAdImageInternal icon_internal;
229+
icon_internal.native_ad_image = gad_icon;
230+
GmaInternal::InsertNativeInternalImage(this, icon_internal, true, true );
231+
}
228232

229233
NSArray *gad_images = ad.images;
230234
for(NSObject *gad_image in gad_images)

0 commit comments

Comments
 (0)