Compare commits

..

5 Commits
oppo ... master

Author SHA1 Message Date
zhl
32096e8d74 修正热更无法正常运行的bug 2020-12-23 19:52:33 +08:00
zhl
b2e58d4462 更新文档 2020-11-23 17:27:59 +08:00
zhl
c0e90edc9e 增加一些注释 2020-11-19 19:21:48 +08:00
zhl
e29648f328 增加登陆和支付回调的示例代码 2020-11-19 19:09:03 +08:00
zhl
36e83cdd26 修改退出流程 2020-11-19 17:52:25 +08:00
16 changed files with 71 additions and 209 deletions

View File

@ -7,5 +7,8 @@ key store pass: 7654321Kingsome_
key alias: release key alias: release
key pass: 7654321Kingsome_ key pass: 7654321Kingsome_
oppo使用alias: oppo vivo key alias: vivo
oppo key alias: oppo
xiaomi key alias: release
``` ```

View File

@ -3,11 +3,11 @@ apply plugin: 'com.android.application'
android { android {
compileSdkVersion 28 compileSdkVersion 28
defaultConfig { defaultConfig {
applicationId 'com.hnjc.wjtx.nearme.gamecenter' applicationId "com.hnjc.wjtx.mi"
minSdkVersion 19 minSdkVersion 18
targetSdkVersion 28 targetSdkVersion 28
versionCode 9 versionCode 1
versionName "1.0.9" versionName "1.0.0"
ndk { ndk {
abiFilters 'armeabi-v7a' abiFilters 'armeabi-v7a'
} }

Binary file not shown.

Binary file not shown.

View File

@ -83,11 +83,9 @@
-dontwarn android.support.** -dontwarn android.support.**
-keep class **.R$styleable{*;} -keep class **.R$styleable{*;}
-keep class com.hnjc.wjtx.** { *; } -keep class com.hnjc.wjtx.mi.** { *; }
-dontwarn com.hnjc.wjtx.** -dontwarn com.hnjc.wjtx.mi.**
-keep class org.egret.** { *; } -keep class org.egret.** { *; }
-dontwarn org.egret.** -dontwarn org.egret.**
-keep class com.nearme.** { *; }

View File

@ -5,13 +5,14 @@
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.VIBRATE" />
<application <application
android:allowBackup="false" android:allowBackup="false"
android:icon="@drawable/icon" android:icon="@mipmap/ic_launcher"
android:name=".JCApplication" android:name=".JCApplication"
android:label="@string/app_name" android:label="@string/app_name"
android:usesCleartextTraffic="true" android:usesCleartextTraffic="true"
@ -37,12 +38,19 @@
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"> android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
</activity> </activity>
<!-- nearme game sdk config goes here -->
<uses-library android:name="org.apache.http.legacy" android:required="false" /> <!-- <activity android:name=".MainActivity"-->
<!-- <meta-data android:name="app_type" android:value="1" /> &lt;!&ndash;app_type:1 表示应用应用必须设为1&ndash;&gt;--> <!-- android:launchMode="singleTask"-->
<meta-data android:name="debug_mode" android:value="false" /> <!-- 日志开关发布时候设置为false --> <!-- android:screenOrientation="portrait"-->
<meta-data android:name="is_offline_game" android:value="false" /> <!-- true:单机游戏 false:网游 。应用设置true--> <!-- android:windowSoftInputMode="adjustPan|stateAlwaysVisible"-->
<meta-data android:name="app_key" android:value="c8d0bd98ecda441993df181cdf23663a" /> <!-- appKey --> <!-- android:configChanges="orientation|keyboardHidden|screenSize|screenLayout"-->
<!-- android:theme="@android:style/Theme.NoTitleBar.Fullscreen">-->
<!-- <intent-filter>-->
<!-- <action android:name="android.intent.action.MAIN" />-->
<!-- <category android:name="android.intent.category.LAUNCHER" />-->
<!-- </intent-filter>-->
<!-- </activity>-->
</application> </application>

View File

@ -3,14 +3,10 @@ package com.hnjc.wjtx;
import android.app.Application; import android.app.Application;
import android.util.Log; import android.util.Log;
import com.nearme.game.sdk.GameCenterSDK;
public class JCApplication extends Application { public class JCApplication extends Application {
@Override @Override
public void onCreate() { public void onCreate() {
super.onCreate(); super.onCreate();
Log.i("JCApplication", "JCApplication onCreate"); Log.i("JCApplication", "JCApplication onCreate");
String appSecret = "4225d8b8b9fa49ed8686c9e325a05d7b";
GameCenterSDK.init(appSecret, this);
} }
} }

View File

@ -93,7 +93,6 @@ public class LaunchActivity extends Activity {
int check = checkSelfPermission(permissions[0]); int check = checkSelfPermission(permissions[0]);
if (check != PackageManager.PERMISSION_GRANTED) { if (check != PackageManager.PERMISSION_GRANTED) {
requestPermissions(permissions, 111); requestPermissions(permissions, 111);
return;
} }
} }
compareVersions(); compareVersions();
@ -279,14 +278,4 @@ public class LaunchActivity extends Activity {
overridePendingTransition(0, 0); overridePendingTransition(0, 0);
} }
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions,
int[] grantResults) {
switch (requestCode) {
case 111:
compareVersions();
break;
}
}
} }

View File

@ -12,24 +12,14 @@ import android.os.VibrationEffect;
import android.os.Vibrator; import android.os.Vibrator;
import android.util.Log; import android.util.Log;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.Window;
import android.view.WindowManager;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.Toast; import android.widget.Toast;
import com.hnjc.wjtx.util.AssetsUtil; import com.hnjc.wjtx.util.AssetsUtil;
import com.hnjc.wjtx.util.IdUtil;
import com.hnjc.wjtx.util.StorageUtil; import com.hnjc.wjtx.util.StorageUtil;
import com.hnjc.wjtx.util.StringUtil; import com.hnjc.wjtx.util.StringUtil;
import com.nearme.game.sdk.GameCenterSDK;
import com.nearme.game.sdk.callback.ApiCallback;
import com.nearme.game.sdk.callback.GameExitCallback;
import com.nearme.game.sdk.callback.SinglePayCallback;
import com.nearme.game.sdk.common.model.biz.PayInfo;
import com.nearme.game.sdk.common.util.AppUtil;
import com.nearme.platform.opensdk.pay.PayResponse;
import org.egret.egretnativeandroid.EgretNativeAndroid; import org.egret.egretnativeandroid.EgretNativeAndroid;
import org.json.JSONException; import org.json.JSONException;
@ -43,15 +33,11 @@ public class MainActivity extends Activity {
private ImageView launchScreenImageView = null; private ImageView launchScreenImageView = null;
private FrameLayout rootLayout = null; private FrameLayout rootLayout = null;
private Vibrator vibrator; private Vibrator vibrator;
private boolean alterShowed;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
String preloadPath = AssetsUtil.getDiskFileDir(this, this.getString(R.string.preload_path)); String preloadPath = AssetsUtil.getDiskFileDir(this, this.getString(R.string.preload_path));
String gameUrl = this.getString(R.string.game_url); String gameUrl = this.getString(R.string.game_url);
@ -73,7 +59,7 @@ public class MainActivity extends Activity {
nativeAndroid.config.preloadPath = preloadPath; nativeAndroid.config.preloadPath = preloadPath;
setExternalInterfaces(); setExternalInterfaces();
if (!nativeAndroid.initialize(gameUrl)) { if (!nativeAndroid.initialize(gameUrl)) {
Toast.makeText(this, "Initialize native failed.", Toast.makeText(this, "Initialize native failed.",
Toast.LENGTH_LONG).show(); Toast.LENGTH_LONG).show();
@ -101,25 +87,18 @@ public class MainActivity extends Activity {
public boolean onKeyDown(final int keyCode, final KeyEvent keyEvent) { public boolean onKeyDown(final int keyCode, final KeyEvent keyEvent) {
if (keyCode == KeyEvent.KEYCODE_BACK) { if (keyCode == KeyEvent.KEYCODE_BACK) {
//声明并初始化弹出对象 //声明并初始化弹出对象
// AlertDialog.Builder builder = new AlertDialog.Builder(this); AlertDialog.Builder builder=new AlertDialog.Builder(this);
// builder.setTitle("提示:"); builder.setTitle("提示:");
// builder.setMessage("是否退出"); builder.setMessage("是否退出");
// //设置确认按钮 //设置确认按钮
// builder.setNegativeButton("确定", (dialog, which) -> { builder.setNegativeButton("确定", (dialog, which) -> {
// nativeAndroid.exitGame(); nativeAndroid.exitGame();
// finish();//退出程序 finish();//退出程序
// });
// //设置取消按钮
// builder.setPositiveButton("取消", null);
// //显示弹框
// builder.show();
GameCenterSDK.getInstance().onExit(this, new GameExitCallback() {
public void exitGame() {
AppUtil.exitGameProcess(MainActivity.this);
nativeAndroid.exitGame();
finish();
}
}); });
//设置取消按钮
builder.setPositiveButton("取消",null);
//显示弹框
builder.show();
return true; return true;
} else { } else {
return super.onKeyDown(keyCode, keyEvent); return super.onKeyDown(keyCode, keyEvent);
@ -138,13 +117,14 @@ public class MainActivity extends Activity {
}); });
nativeAndroid.setExternalInterface("setLocalStorage", message -> { nativeAndroid.setExternalInterface("setLocalStorage", message -> {
Log.d(TAG, "setLocalStorage: " + message); Log.d(TAG, "setLocalStorage: " + message);
try { try{
JSONObject jsonObject = new JSONObject(message); JSONObject jsonObject = new JSONObject(message);
String key = jsonObject.getString("key"); String key = jsonObject.getString("key");
String val = jsonObject.getString("val"); String val = jsonObject.getString("val");
SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE); SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE);
StorageUtil.writeString(sharedPref, key, val); StorageUtil.writeString(sharedPref, key, val);
} catch (JSONException e) { }
catch (JSONException e) {
Log.e(TAG, " onState message failed to analyze"); Log.e(TAG, " onState message failed to analyze");
} }
@ -182,34 +162,29 @@ public class MainActivity extends Activity {
Log.d(TAG, "showToast: " + message); Log.d(TAG, "showToast: " + message);
Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show(); Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show();
}); });
nativeAndroid.setExternalInterface("showPrivacy", message -> {
Log.d(TAG, "showPrivacy: " + message);
runOnUiThread(this::showPrivacy);
});
nativeAndroid.setExternalInterface("showAgreement", message -> {
Log.d(TAG, "showAgreement: " + message);
runOnUiThread(this::showAgreement);
});
nativeAndroid.setExternalInterface("getUid", message -> { nativeAndroid.setExternalInterface("getUid", message -> {
GameCenterSDK.getInstance().doLogin(this, new ApiCallback() { //TODO: 平台的登陆
@Override JSONObject obj = new JSONObject();
public void onSuccess(String arg0) { try {
doGetTokenAndSsoid(); obj.put("openid", IdUtil.getUid(this));
} obj.put("token", "");
// 如果其他登陆过程中的错误, 则传入一个大于0的errorcode
obj.put("errorcode", 1);
nativeAndroid.callExternalInterface("sendUidToJS", obj.toString());
} catch (JSONException e) {
e.printStackTrace();
nativeAndroid.callExternalInterface("loginCancel", "");
}
@Override
public void onFailure(String arg0, int arg1) {
nativeAndroid.callExternalInterface("loginCancel", "");
}
});
}); });
nativeAndroid.setExternalInterface("@onState", message -> { nativeAndroid.setExternalInterface("@onState", message -> {
Log.e(TAG, "Get @onState: " + message); Log.e(TAG, "Get @onState: " + message);
try { try{
JSONObject jsonObject = new JSONObject(message); JSONObject jsonObject = new JSONObject(message);
String state = jsonObject.getString("state"); String state = jsonObject.getString("state");
handleStateEvent(state); handleStateEvent(state);
} catch (JSONException e) { }
catch (JSONException e) {
Log.e(TAG, " onState message failed to analyze"); Log.e(TAG, " onState message failed to analyze");
} }
@ -220,64 +195,21 @@ public class MainActivity extends Activity {
try { try {
JSONObject jsonObject = new JSONObject(message); JSONObject jsonObject = new JSONObject(message);
String cpOrderId = jsonObject.getString("order"); String cpOrderId = jsonObject.getString("orderId");
String attach = jsonObject.getString("attach"); String productCode = jsonObject.getString("productCode");
int money = jsonObject.getInt("amount"); // 未传 int count = jsonObject.getInt("count");
String notifyUrl = jsonObject.getString("notifyUrl"); // 未传 //TODO: 平台的支付
String productName = jsonObject.getString("productName"); // 未传
String productDesc = jsonObject.getString("productDesc"); //未传
// String sign = jsonObject.getString("sign"); // 未传
PayInfo payInfo = new PayInfo(cpOrderId, attach, money );
payInfo.setProductDesc(productDesc);
payInfo.setProductName(productName);
payInfo.setAmount(money);
// payInfo.setType(PayInfo.TYPE_AUTO_ORDER_WXPAY);
payInfo.setUseCachedChannel(false);
// 支付结果服务器回调地址不通过服务端回调发货的应用可以不用填写~
payInfo.setCallbackUrl(notifyUrl);
JSONObject obj = new JSONObject(); JSONObject obj = new JSONObject();
try {
GameCenterSDK.getInstance().doPay(this, payInfo, obj.put("errcode", 0);
new SinglePayCallback() { obj.put("errmsg", "");
nativeAndroid.callExternalInterface("payResult", obj.toString());
@Override } catch (JSONException e) {
public void onSuccess(String resultMsg) { e.printStackTrace();
// add OPPO 支付成功处理逻辑~ }
try {
obj.put("errcode", 0);
obj.put("errmsg", "");
nativeAndroid.callExternalInterface("payResult", obj.toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(String resultMsg, int resultCode) {
// add OPPO 支付失败处理逻辑~
try {
if (PayResponse.CODE_CANCEL != resultCode) {
obj.put("errmsg", "支付失败");
} else {
// 取消支付处理
obj.put("errmsg", "支付取消");
}
obj.put("errcode", resultCode);
nativeAndroid.callExternalInterface("payResult", obj.toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onCallCarrierPay(PayInfo payInfo, boolean bySelectSMSPay) {
// Toast.makeText(this, "运营商支付", Toast.LENGTH_SHORT).show();
Log.i(TAG, "运营商支付");
}
});
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
} catch (Exception e) { } catch ( Exception e ) {
e.printStackTrace(); e.printStackTrace();
} }
}); });
@ -301,31 +233,6 @@ public class MainActivity extends Activity {
}); });
} }
public void doGetTokenAndSsoid() {
GameCenterSDK.getInstance().doGetTokenAndSsoid(new ApiCallback() {
@Override
public void onSuccess(String resultMsg) {
try {
JSONObject json = new JSONObject(resultMsg);
String token = json.getString("token");
String ssoid = json.getString("ssoid");
JSONObject obj = new JSONObject();
obj.put("openid", ssoid);
obj.put("token", token);
nativeAndroid.callExternalInterface("sendUidToJS", obj.toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(String content, int resultCode) {
nativeAndroid.callExternalInterface("loginCancel", "");
}
});
}
@Override @Override
protected void onDestroy() { protected void onDestroy() {
super.onDestroy(); super.onDestroy();
@ -342,7 +249,6 @@ public class MainActivity extends Activity {
FrameLayout.LayoutParams.MATCH_PARENT); FrameLayout.LayoutParams.MATCH_PARENT);
rootLayout.addView(launchScreenImageView, params); rootLayout.addView(launchScreenImageView, params);
} }
private void handleStateEvent(String state) { private void handleStateEvent(String state) {
switch (state) { switch (state) {
case "running": case "running":
@ -352,7 +258,6 @@ public class MainActivity extends Activity {
Log.i(TAG, state); Log.i(TAG, state);
} }
} }
private void hideLoadingView() { private void hideLoadingView() {
rootLayout.removeView(launchScreenImageView); rootLayout.removeView(launchScreenImageView);
Drawable drawable = launchScreenImageView.getDrawable(); Drawable drawable = launchScreenImageView.getDrawable();
@ -360,41 +265,5 @@ public class MainActivity extends Activity {
drawable.setCallback(null); drawable.setCallback(null);
launchScreenImageView = null; launchScreenImageView = null;
} }
private void showPrivacy() {
String url = "https://privacy3.kingsome.cn/";
alertWebview(url);
}
private void showAgreement() {
String url = "https://privacy2.kingsome.cn/user_agreement.html";
alertWebview(url);
}
private void alertWebview(String url) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
WebView mwebView = new WebView(this);
this.alterShowed = false;
mwebView.loadUrl(url);
mwebView.setWebViewClient( new WebViewClient() {
//设置结束加载函数
@Override
public void onPageFinished(WebView view, String url) {
if (!alterShowed) {
alterShowed = true;
builder.show();
}
}
}
);
builder.setPositiveButton( "取消", null );
builder.setView( mwebView );
builder.setPositiveButton("确定", (dialog, which) -> {
dialog.dismiss();
});
// builder.setNegativeButton("拒绝", (dialog, which) -> {
// //用户不同意隐私协议不通过Demo在此处退出游戏接入方可按自己要求处理但不能调用MiCommplatform.getInstance().onUserAgreed(this);
// dialog.dismiss();
// android.os.Process.killProcess(android.os.Process.myPid());
// });
}
} }

View File

@ -14,7 +14,7 @@ public class WebApi {
public void getVersionInfo(BaseInterface iFace) { public void getVersionInfo(BaseInterface iFace) {
this.mInterface = iFace; this.mInterface = iFace;
// String versionUrl = "https://test.kingsome.cn/wjtx/config/version_native.json"; // String versionUrl = "http://10.0.1.3:7021/game/zip/version.json";
String versionUrl = "https://h5games-al.kingsome.cn/wjtx/config/version_native.json"; String versionUrl = "https://h5games-al.kingsome.cn/wjtx/config/version_native.json";
AppRequestUtil.getInstance().getRequest(context, versionUrl, new RequestListener() { AppRequestUtil.getInstance().getRequest(context, versionUrl, new RequestListener() {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 195 KiB

After

Width:  |  Height:  |  Size: 145 KiB

View File

@ -3,11 +3,10 @@
<string name="load_game">下载游戏资源</string> <string name="load_game">下载游戏资源</string>
<string name="start_game">进入游戏</string> <string name="start_game">进入游戏</string>
<string name="preload_path">preload</string> <string name="preload_path">preload</string>
<string name="game_url">http://local/index.html?channel=7105</string> <string name="game_url">http://local/index.html?channel=7103</string>
<string name="local_version">1.0.0</string> <string name="local_version">1.0.0</string>
<string name="load_back">load_back</string> <string name="load_back">load_back</string>
<string name="launch_version">获取游戏版本</string> <string name="launch_version">获取游戏版本</string>
<string name="launch_download">正在更新游戏资源</string> <string name="launch_download">正在更新游戏资源</string>
<string name="launch_unzip">正在解压游戏资源</string> <string name="launch_unzip">正在解压游戏资源</string>
<string name="app_id">30414659</string>
</resources> </resources>

Binary file not shown.

Binary file not shown.

Binary file not shown.