我已经与Mopub合作在我的Android应用程序中显示广告。 我可以显示bannner和插页式广告,但不能显示原生广告
布局文件代码,
<?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>
fragment.java中的逻辑(与上面的布局相关联)用于显示原生广告的文件,
@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;
}
所以请有人告诉我代码中有什么问题,或者如果有人如何将mopub原生广告与Android应用程序集成的示例代码请分享....
答案 0 :(得分:6)
这里是我用来显示原生广告的代码
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();
}
}