私はしばらくの間この問題に苦労しており、誰かが私を助けてくれたらとても感謝しています.
問題は、エアプッシュ「スマートウォール」の読み込みに成功すると、それ自体が「クリック」し、すぐに広告が表示される場所に移動することです。広告の読み込みが完了する前に、広告の読み込みがグラフィカルに表示されます。
AP サポートに何度か連絡しましたが、何をしても同じ問題が発生します。
問題は、スマートウォールが間違ったスレッドで実行されているようです。私は他のものに UIThread ハンドラーを使用していますが、正常に動作します (リードボルトインタースティシャル、アラートダイアログ、その他のネイティブ Android のもの)。
私が試したこと:
非同期タスク
@Override
public void showAP() {
uiThread.post(new Runnable(){
public void run(){
new Async().execute();
}
});
}
private class Async extends AsyncTask<String, Integer, String[]>{
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String[] doInBackground(String... params) {
if(apSmartWall == null)
apSmartWall = new ApSmartWall(MainActivity.this, adCallbackListener);
apSmartWall.startSmartWallAd();
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(String[] result) {
super.onPostExecute(result);
}
}
ハンドラ
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
apSmartWall = new ApSmartWall(MainActivity.this, adCallbackListener);
// Create the layout
layout = new RelativeLayout(this);
// Do the stuff that initialize() would do for you
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
// Create the libgdx View
gameView = initializeForView(new Game(this), true);
// Add the libgdx view
layout.addView(gameView);
context = this;
uiThread = new Handler();
... (adding another view for mopub here, but removing this doesn´t change anything)
// Hook it all up
setContentView(layout);
}
@Override
public void showAP() {
uiThread.post(new Runnable(){
public void run(){
apSmartWall.startSmartWallAd();
}
});
}
libGDX スレッドのもの: https://code.google.com/p/libgdx/wiki/TheArchitecture#The_Graphics_Module
また、libGDX 組み込みのハンドラー メソッド AndroidApplication.runOnUiThread() を使用してみましたが、どちらも機能しませんでした。ネイティブ Android に関しては、私は決して経験がないので、間違ったことをしている可能性があります。しかし、私が言ったように、UI スレッドで実行される他のものに対しては正常に動作します。たとえば、これは正常に動作します。
@Override
public void resumeAds() {
uiThread.post(new Runnable(){
public void run() {
moPubView = new MoPubView(context);
// non-tablet
if(width >= 728)
moPubView.setAdUnitId(TABLET_SIZE);
else
moPubView.setAdUnitId(PHONE_SIZE);
moPubView.loadAd();
RelativeLayout.LayoutParams adParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
adParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
adParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
layout.addView(moPubView, adParams);
}
});
}
AndroidManifest.xml airpush のもの
<meta-data android:name="com.package.APPID" android:value="appid" />
<meta-data android:name="com.package.APIKEY" android:value="android*key"/>
<activity android:exported="false" android:name="com.package.SmartWallActivity"
android:configChanges="orientation|screenSize"
android:theme="@android:style/Theme.Translucent" />
<activity android:name="com.package.BrowserActivity"
android:configChanges="orientation|screenSize" />