Not able to show native ads of Mopub in android ap

2019-06-09 00:34发布

问题:

I have integarted with Mopub for displaying ads in my android application. I am able to display bannner and interstitial ads but not native ads,

layout file code,

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical"  >
  <TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/note_title_label"
    style="?android:listSeparatorTextViewStyle"
    />
  <EditText android:id="@+id/note_title"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/note_title_hint"
    />
    <TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/note_details_label"
    style="?android:listSeparatorTextViewStyle"
    />
    <EditText android:id="@+id/note_details"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/note_details_hint"
    />
    <Button android:id="@+id/note_date"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="16dp"
    android:layout_marginRight="16dp"
    />
    <CheckBox android:id="@+id/note_solved"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="16dp"
    android:layout_marginRight="16dp"
    android:text="@string/note_solved_label"
    />

    <RelativeLayout  android:id="@+id/native_ad_layout"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="50dp">
    >    
    <ImageView android:id="@+id/native_ad_main_image"
                    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
        />  
    <ImageView android:id="@+id/native_ad_icon_image"
                    android:layout_width="fill_parent"
    android:layout_height="wrap_content"  
         />  
    <TextView android:id="@+id/native_ad_title" 
            android:layout_width="fill_parent"
    android:layout_height="wrap_content"
        />  
    <TextView android:id="@+id/native_ad_text" 
       android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />
</RelativeLayout>

</LinearLayout>

Logic in fragment.java(associated with above layout) file for displaying native ads,

    @TargetApi(11)
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent,
    Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_note, parent, false);



    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        if (NavUtils.getParentActivityName(getActivity()) != null) {
        getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
        }
    }
    mTitleField = (EditText)v.findViewById(R.id.note_title);
    mTitleField.setText(mNote.getTitle());
    mTitleField.addTextChangedListener(new TextWatcher() {
    public void onTextChanged(CharSequence c, int start, int before, int count) 
    { 

    String title=Character.toUpperCase(c.toString().charAt(0)) + c.toString().substring(1);
    mNote.setTitle(title);
    }
    public void beforeTextChanged(
    CharSequence c, int start, int count, int after) 
    {// This space intentionally left blank
    }
    public void afterTextChanged(Editable c) {
    // This one too
    }
    });
    mDetailsField = (EditText)v.findViewById(R.id.note_details);
    mDetailsField.setText(mNote.getDetails());
    mDetailsField.addTextChangedListener(new TextWatcher() {
    public void onTextChanged(
    CharSequence c, int start, int before, int count) 
    { 
    mNote.setDetails(c.toString());
    }
    public void beforeTextChanged(
    CharSequence c, int start, int count, int after) 
    {// This space intentionally left blank
    }
    public void afterTextChanged(Editable c) {
    // This one too
    }
    });


    mDateButton = (Button)v.findViewById(R.id.note_date);
    mDateButton.setText(mNote.getDate().toString());
    //mDateButton.setEnabled(false);
    mDateButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
        FragmentManager fm = getActivity()
        .getSupportFragmentManager();
        //DatePickerFragment dialog = new DatePickerFragment();
        DatePickerFragment dialog = DatePickerFragment
                .newInstance(mNote.getDate());
        dialog.setTargetFragment(NoteFragment.this, REQUEST_DATE);
        dialog.show(fm, DIALOG_DATE);
        }
        });

    mSolvedCheckBox = (CheckBox)v.findViewById(R.id.note_solved);
    mSolvedCheckBox.setChecked(mNote.isSolved());
    mSolvedCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            // set the note's solved property
            mNote.setSolved(isChecked);
        }
    });  
/*    Button reportButton = (Button)v.findViewById(R.id.note_reportButton);
    reportButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
    Intent i = new Intent(Intent.ACTION_SEND);
    i.setType("vnd.android-dir/mms-sms");
    i.putExtra(Intent.EXTRA_TEXT, getNoteReport());
    i.putExtra(Intent.EXTRA_SUBJECT,
            mNote.getTitle());

    Intent sendIntent = new Intent(Intent.ACTION_VIEW);         
    sendIntent.setData(Uri.parse("sms:"));
    sendIntent.putExtra("sms_body", "test man text");
    startActivity(sendIntent);
    }
    });*/

    //advertising start
    MoPubNative.MoPubNativeListener moPubNativeListener = new MoPubNative.MoPubNativeListener() {
        @Override
        public void onNativeLoad(NativeResponse nativeResponse) {
            // ...
        }

        @Override
        public void onNativeFail(NativeErrorCode errorCode) {
            // ...
        }

        @Override
        public void onNativeImpression(View view) {
            // ...
        }

        @Override
        public void onNativeClick(View view) {
            // ...
        };
    };

    MoPubNative moPubNative = new MoPubNative(this.getActivity().getApplicationContext(), "248504aaf06d4a759a59d0615a5bdb54", moPubNativeListener);

    Location exampleLocation = new Location("com.genedevelopers.android.yournote");
    exampleLocation.setLatitude(23.1);
    exampleLocation.setLongitude(42.1);
    exampleLocation.setAccuracy(100);

    RequestParameters requestParameters = new RequestParameters.Builder()
            .keywords("gender:m,age:27")
            .location(exampleLocation)
            .build();
    moPubNative.makeRequest(requestParameters);

    ViewBinder viewBinder = new ViewBinder.Builder(R.layout.list_item_note)
    .mainImageId(R.id.native_ad_main_image)
    .iconImageId(R.id.native_ad_icon_image)
    .titleId(R.id.native_ad_title)
    .textId(R.id.native_ad_text)
    .build();
//advertising end
    return v;
    }

so please someone tell me what is wrong in the code, or if anybody having the sample code on how to integrate mopub native ads to android application please share it....

回答1:

Here the code that i used to display the native ads

  public class NativeAdActivity extends Activity {

    private MoPubAdAdapter mAdAdapter;
    private static final String MY_AD_UNIT_ID_PHONE = "xxxxxx";
    private static final String MY_AD_UNIT_ID_TAB = "xxxxxx";
    String screenSize;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.native_ad_display);

        // Set location awareness and precision globally 
        MoPub.setLocationAwareness(MoPub.LocationAwareness.TRUNCATED);
        MoPub.setLocationPrecision(4);

        // variable to grab the screenSize form resources 
        screenSize = getResources().getString(R.string.screen_type);


        final ListView listView = (ListView) findViewById(R.id.native_list_view);


        final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1);
        for (int i = 0; i < 100; ++i) {
            adapter.add("Item " + i);
        }

        // Create an ad adapter with ads in positions 0, 4, and every 10 places thereafter.
        // This adapter will be used in place of the original adapter for the ListView.
        mAdAdapter = new MoPubAdAdapter(this, adapter, MoPubNativeAdPositioning.clientPositioning()
                .addFixedPosition(0)
                .addFixedPosition(4)
                .enableRepeatingPositions(10));

        // Set up an renderer that knows how to put ad data in an ad view.
        final MoPubNativeAdRenderer adRenderer = new MoPubNativeAdRenderer(
                new ViewBinder.Builder(R.layout.native_ad_layout)
                .titleId(R.id.native_ad_title)
                .textId(R.id.native_ad_text)
                .mainImageId(R.id.native_ad_main_image)
                .iconImageId(R.id.native_ad_icon_image)
                .build());

        // Register the renderer with the MoPubAdAdapter and then set the adapter on the ListView.
        mAdAdapter.registerAdRenderer(adRenderer);
        listView.setAdapter(mAdAdapter);

    }
    @Override
    public void onResume() {
        // MoPub recommends loading knew ads when the user returns to your activity.
        if(screenSize.equalsIgnoreCase("phone"))
        {
            mAdAdapter.loadAds(MY_AD_UNIT_ID_PHONE);
        }else if(screenSize.equalsIgnoreCase("7-inch-tablet"))
        {
            mAdAdapter.loadAds(MY_AD_UNIT_ID_TAB);

        }else if(screenSize.equalsIgnoreCase("10-inch-tablet") )
        {   
            mAdAdapter.loadAds(MY_AD_UNIT_ID_TAB);
        }
        else //deafault case for phone
        {
            mAdAdapter.loadAds(MY_AD_UNIT_ID_PHONE);
        }
        super.onResume();
    }


 }