豹趣小遊戲SDK 是協助APP商業變現的第三方SDK,目前已經有400多家媒體接入,top100媒體已經有20家媒體接入。
商業模式上,類似新聞sdk,小說sdk,視訊sdk等,通過廣告變現,然後進行分成。
和其他不同的是:流水走接入方。
詳細的技術接入文件如下,開發+測試時長1天:## **1 SDK接入準備**
* 開發者提供APP的包名,用於申請GameSdkID和域名,確保遊戲的安全性。
* 開發者提供APP DAU的量級,通過量級,判斷所需伺服器的資源,比如:**百萬級,千萬級**;
* APP方自行接入穿山甲SDK,並在穿山甲後臺申請如下廣告id:
**以下廣告除“激勵視訊廣告”為必要廣告,其餘為可選廣告;如為提高產品體驗,不需要某類廣告,程式碼裡不設定廣告id即可不顯示廣告。
詳細廣告說明可閱讀《測試必讀和廣告說明.docx》**
```
1. 遊戲內--開屏廣告:原生模板渲染,尺寸比例:1:1;
2. 遊戲內--激勵視訊廣告:豎屏,無需獎勵;
3. 遊戲內--關卡類遊戲插屏場景:全屏視訊廣告:豎屏;
4. 遊戲內--關卡類遊戲插屏場景:插屏廣告:原生模板渲染,尺寸比例:2:3;
5. 遊戲內--遊戲底部:Banner廣告(暫時停用):原生,模板渲染,尺寸:600*150;
8. 遊戲列表--插屏廣告:原生,模板渲染,尺寸比例:1:1,遊戲中心以tab方式存在的不能使用,只展示1次。
```
## **2 使用**
1、 初始化
2、 遊戲遊客賬號
3、 介面顯示
### **2.1 初始化**
以上為初始化需要使用的程式碼,可以直接在 Demo 裡找到並複製使用。
這個方法建議在 Application@onCreate() 時呼叫,對於存在多個程序的應用,為避免資料異常,請務必保證這個方法只執行在其中一個程序(通常是主程序)。
```
/*
** app :Application例項
** cmGameAdInfo : 廣告id資訊
** IImageLoader: 自定義ImageLoader(實現程式碼,可以參考Demo)
** isDebug : 是否debug模式
*/
initCmGameSdk(app: Application, cmGameAdInfo: CmGameAdInfo, imageLoader: IImageLoader,isDebug: Boolean)
```
核心程式碼示例:
```
// 下面的GameSdkID和Host必須替換成小遊戲官方分配的
CmGameAppInfo cmGameAppInfo = new CmGameAppInfo();
cmGameAppInfo.setAppId("demo"); // 申請的GameSdkID
cmGameAppInfo.setAppHost("https://xyx-sdk-svc.cmcm.com"); // 申請的遊戲host地址
// 設定遊戲的廣告id
CmGameAppInfo.TTInfo ttInfo = new CmGameAppInfo.TTInfo();
ttInfo.setGameListFeedId("901121737"); // 遊戲列表,資訊流廣告,自渲染
ttInfo.setGameListExpressFeedId("901121253"); // 遊戲列表,資訊流廣告,模板渲染
ttInfo.setRewardVideoId("901121365"); // 激勵視訊
ttInfo.setFullVideoId("901121375"); // 全屏視訊,插屏場景下展示
ttInfo.setExpressInteractionId("901121133"); // 插屏廣告,模板渲染,插屏場景下展示
ttInfo.setExpressBannerId("901121159"); // Banner廣告,模板渲染,尺寸:600*150
ttInfo.setGameEndFeedAdId("901121737"); // 遊戲推薦彈框底部廣告,資訊流廣告,自渲染
ttInfo.setGameEndExpressFeedAdId("901121253"); // 遊戲推薦彈框底部廣告,資訊流廣告,模板渲染
// 遊戲列表展示時顯示,插屏廣告,模板渲染1:1
// 遊戲以tab形式的入口不要使用
ttInfo.setGamelistExpressInteractionId("901121536");
// 遊戲載入時展示,下面廣告2選1
// 插屏廣告-原生-自渲染-大圖
// 在2019-7-17後,穿山甲只針對部分媒體開放申請,如後臺無法申請到這個廣告位,則無需呼叫程式碼
ttInfo.setLoadingNativeId("901121435");
// 此廣告申請,所有媒體都可申請,遊戲載入時展示,插屏廣告1:1,模板渲染
ttInfo.setGameLoad_EXADId("901121536");
cmGameAppInfo.setTtInfo(ttInfo);
CmGameSdk.INSTANCE.initCmGameSdk(this,
cmGameAppInfo,
new com.cmcm.gamemoney_sdk.CmGameImageLoader(),
BuildConfig.DEBUG);
```
遊戲列表載入實現
```
// CmGameImageLoader 用於遊戲介面的圖片載入,可由合作方自己實現
// 下面的版本是由Glide實現的,load和into為必須實現方法,其他方法因為版本原因可靈活變通
public class CmGameImageLoader implements IImageLoader {
@Override
public void loadImage(Context context, String imageUrl, ImageView imageView, int defRsid) {
Glide.with(context)
.load(imageUrl)
.placeholder(defRsid)
.error(defRsid)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(new GlideDrawableImageViewTarget(imageView));
// 建議加上placeHolder方法,否則新安裝啟動會出現閃現的情況,新版本沒有placeHolder的可以這麼寫
// RequestOptions requestOptions = new RequestOptions();
// requestOptions.placeholder(defRsid);
// Glide.with(context).load(imageUrl).apply(requestOptions).into(imageView);
}
```
setGameListFeedId 遊戲列表資訊流廣告,設定後所有廣告預設展示,如想自定義可以參考如下設定:
```
CmGameAppInfo.GameListAdInfo gameListAdInfo = new CmGameAppInfo.GameListAdInfo();
// 設定熱門推薦:預設為true,true:展示;false:不展示
gameListAdInfo.setHotGameListAdShow(true);
// 設定最新上新:預設為true,true:展示;false:不展示
gameListAdInfo.setNewGameListAdShow(true);
// 設定更多好玩:預設為true,true:展示;false:不展示
gameListAdInfo.setMoreGameListAdShow(true);
// 設定更多好玩廣告展示間隔行數:預設為間隔4行展示一個廣告
gameListAdInfo.setMoreGameListAdInternal(4);
cmGameAppInfo.setGameListAdInfo(gameListAdInfo);
```
### **2.2 遊戲遊客賬號**
如下方法,用於獲取最新遊戲資訊和生成遊戲遊客賬號,生成遊客賬號後,才能成功進入遊戲。
呼叫時機:自定義遊戲介面或者呼叫單獨遊戲,需要進入遊戲前,呼叫此方法。
使用sdk提供的預設遊戲列表,是不需要呼叫此方法,內部已經封裝呼叫。
此方法多次呼叫,不影響,但不能在後臺程序呼叫。
```
CmGameSdk.initCmGameAccount()
```
### **2.3 介面展現**
遊戲列表頁邊距,文字大小和顏色等,均可通過下面的佈局來調整。
**注意事項:
1. GameView內部含有recyclerview,外部需要巢狀<font color=#FF0000>LinearLayout</font>(高度wrap_content),同時為了巢狀滑動需要再外嵌<font color=#FF0000>NestedScrollView</font>**
```
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="#cccccc"
android:orientation="vertical"
tools:context=".Main2Activity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:descendantFocusability="blocksDescendants"
android:orientation="vertical">
<com.cmcm.cmgame.GameView
android:id="@+id/gameView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingTop="5dp"
android:layout_marginLeft="6dp"
android:layout_marginTop="5dp"
android:layout_marginRight="6dp"
android:layout_marginBottom="15dp"
app:cmgame_category_title_text_color="#FF222222"
app:cmgame_category_title_text_size="15sp"
app:cmgame_view_background="@drawable/bg_game_classify_view" />
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
```
2. 在遊戲列表的頁面中需要例項化GameView,並呼叫GameView.inflate填充遊戲資料,具體程式碼如下:
```
// 把預設遊戲中心view新增進媒體指定介面
GameView gameTabsClassifyView = (GameView) findViewById(R.id.gameView);
gameTabsClassifyView.inflate(this);
```
執行結果: