乐趣区

关于游戏开发:游戏优化系列一海外谷歌应用适配相关

背景

游戏上架谷歌申请举荐时,谷歌会给予一些优化倡议。这些倡议实际上都是比拟不错的游戏体验优化方向。以下依据 app 上架谷歌利用商店的规范,列举须要适配的中央并提供了批改样例。

1. 谷歌利用图标
游戏 icon:
5 个不同尺寸的 icon,4848, 7272, 9696, 144144, 192*192
别离放在 mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi 上面。

推送 icon(只能由红色 + 通明组成):(白底通明字)
5 个不同尺寸的 icon,2424, 3636, 4848, 7272, 96*96
别离放在 mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi 上面。

示例:

2. 状态栏音讯推送
在游戏利用中进行版本迭代时,如果游戏自身有音讯推送,且 SDK 中也有推送的状况下,发送音讯的 notify 办法中,id 有可能不同,此时会呈现两条音讯(游戏的和 SDK 的),有可能会被 Google 利用商店回绝举荐。

NotificationManager.notify(int id, Notification notification)

呈现两条音讯:

须要做到的成果 – 同一个利用的音讯重叠:

开展后:

批改示例:

private void mergeNotifications(){
    int mergeId = 0;
    String groupKey = "com.android.example.WORK_EMAIL";
    String channelId = "1";
    Notification notification1 = new NotificationCompat.Builder(MainActivity.this, channelId)
        .setSmallIcon(R.drawable.ic_launcher_background)
        .setContentTitle("推送须要重叠")
        .setContentText("这是一条 SDK 的告诉")
        .setGroup(groupKey)
        .build();

    Notification notification2 = new NotificationCompat.Builder(MainActivity.this, channelId)
        .setSmallIcon(R.drawable.ic_launcher_background)
        .setContentTitle("推送须要重叠")
        .setContentText("这是一条游戏的告诉")
        .setSmallIcon(R.drawable.ic_stat_name)
        .setGroup(groupKey)
        .build();

    Notification mergeNotification = new NotificationCompat.Builder(MainActivity.this, channelId)
        .setContentTitle("推送须要重叠")
        .setContentText("2 条未读信息")
        .setSmallIcon(R.drawable.ic_stat_name)
        .setStyle(new NotificationCompat.InboxStyle()
            .addLine("这是一条游戏的告诉")
            .addLine("这是一条 SDK 的告诉")
            .setBigContentTitle("2 条未读信息")
            .setSummaryText("推送测试"))
        .setGroup(groupKey)
        .setGroupSummary(true)
        .build();

    NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
    notificationManager.notify(1, notification1);
    notificationManager.notify(2, notification2);
    notificationManager.notify(mergeId, mergeNotification);
}

3. 零碎主题格调

在利用外面弹出的 Dialog、Loading 框,须要适配零碎格调!

例如在 5.0 以上的零碎,呈现这种格调是不行的:

这种格调才是符合要求的:

如果这些 Dialog、Loading 框不是应用零碎格调,而是自行设计,则能够持续应用,不用进行额定解决;例如:

具体实现办法有两种:

第一种,在 Androidmanifest 的 application 和 activity 标签下,不要设定 android:theme,即可适配零碎格调。

批改示例 1:

<manifest 
    xmlns:android="http://schemas.android.com/apk/res/android"    
    package="com.game37.themeapplication">    
<application
       android:allowBackup="true"
       android:icon="@mipmap/ic_launcher" 
       android:label="@string/app_name" 
       android:roundIcon="@mipmap/ic_launcher_round" 
       android:supportsRtl="true">
       <activity
         android:name=".MainActivity"
         android:screenOrientation="sensorLandscape">
         <intent-filter> 
               <action android:name="android.intent.action.MAIN" /> 
               <category android:name="android.intent.category.LAUNCHER" /> 
          </intent-filter>
        </activity>
</application></manifest>

示例成果 1:

第二种,可保留 android:theme,但须要援用 Google 库工程 appcompat_v7,应用零碎自带主题或者自定义主题。其中,在自定义的 style 外面,继承 Theme.AppCompat(还有很多子格调能够抉择,如 Theme.AppCompat.Light 和 Theme.AppCompat.NoActionBar 等)。

批改示例 2:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.game37.themeapplication">
    <application
        ...
        android:theme="@style/Theme.AppCompat">
        <activity
            android:name=".MainActivity"
            android:screenOrientation="sensorLandscape"
            // 应用自定义主题
            android:theme="@style/testStyle">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            // 应用零碎自带主题
            android:name=".MainActivity2"
            android:theme="@style/Theme.AppCompat.NoActionBar" />
    </application>
</manifest>

其中,自定义主题款式如下:(设置全屏、背景色等)

<style  name="testStyle" parent="Theme.AppCompat">
    <item name="android:actionBarStyle">@style/FullscreenActionBarStyle</item>
    <item name="android:windowActionBarOverlay">true</item>
    <item name="android:windowBackground">@null</item>
</style>

<style name="FullscreenActionBarStyle" parent="Widget.AppCompat.ActionBar">
    <item name="android:background">@color/colorAccent</item>
</style>

示例成果 2:

在 Androidmanifest 的相干 android:theme 设置上述继承 Theme.AppCompat 格调的主题即可。

【常见问题】

游戏工程接入 SDK 的过程中,如果主 Activity 继承的是 androidx.appcompat.app.AppCompatActivity,须要应用 Theme.AppCompat 类主题,因而倡议游戏工程的主题设置不留空,即采纳第二种形式设定相干主题!
图片起源:http://www.lyouxi.com/ 游戏盒子

退出移动版