HelperSDK
关于HelperSDK
HelperSDK
是一个帮你封装好了Google登录,GooglePay和AppsFlyer的一个辅助SDK,封装了琐碎的API调用和aidl文件等;
接入(集成HelperSDK)
假设您使用的是AndroidStudio
开发环境,拿到的是HelperSDKV1.0
的jar包;
AndroidStudio
的libs配置;- 在app模块的
build.gradle
文件中,添加libs文件夹配置,如图: - 点击
Sync Now
后可以看到左侧Android视图下多出了jniLibs
文件夹,如图: - 将
HelperSDKV1.0
的jar包复制到jniLibs
文件夹下;
- 在app模块的
- 集成
HelperSDK
所依赖的AppsFlyer
包和谷歌服务;- 在project的
build.gradle
文件中,添加mavenCentral
配置,如图: - 在app模块的
build.gradle
文件中,添加AppsFlyer
和谷歌服务,所需配置文本为: ```java implementation ‘com.appsflyer:af-android-sdk:4.8.6@aar’ implementation ‘com.android.installreferrer:installreferrer:1.0’ implementation ‘com.google.android.gms:play-services-auth:15.0.1’
- 在project的
如图:
![image](http://bmob-cdn-20286.b0.upaiyun.com/2018/08/15/d2f7f64e4023c3f780618743e9f0517d.png)
注:如果您的``AndroidStudio``版本是在V3.0以下,只需要把``implementation``替换为``compile``即可。
3. ``AndroidManifest.xml``文件配置:
* 权限相关
```java
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!--使用GooglePay用到-->
<uses-permission android:name="com.android.vending.BILLING" />
- 配置
AppsFlyer
所需要的receiver ```java
## 初始化
在您的项目中的``Application``的``onCreate()``方法中调用``HelperSDK``的``init()``方法,依次传入Application对象和AppFlyers平台申请的开发者Key,用法如下:
```java
public class MyApplication extends Application {
final String AF_DEV_KEY = "MzXomgBiV4boBSPhZvauZk";
@Override
public void onCreate() {
super.onCreate();
HelperSDK.init(this,AF_DEV_KEY);
}
}
上传用户事件
上传用户行为事件如支付事件,登录事件等,事件数据用一个Map<String,Object>
封装,调用HelperSDK
的reportEvent
方法,依次传入事件类型和代表事件数据的map对象,用法如下:
Map<String,Object> eventMap = new HashMap<>();
eventMap.put("userName","nothing");
eventMap.put("address","guangzhou");
HelperSDK.reportEvent(AFInAppEventType.LOGIN,eventMap);
上传后您可以在AppsFlyers控制台上看到事件统计,如下:
Google登录
-
首先你需要参考这里的
Configure a Google API Console project
步骤,依次创建好应用,上传您应用的包名和对应的shua1签名即可,创建成功如图: -
SDK中帮您封装了比较零碎的API调用,也省去了看Google官网文档的时间,用法如下:
- 在需要Google登录的时机如登录按钮的事件监听函数中,调用
HelperSDK
的googleSign
方法,传入Activity对象,代码如下:HelperSDK.googleSign(this);
- 因为您的应用中需要调起Google服务并在您的
Activity
中接收回调,所以下一步需要在onActivityResult()
方法中处理,调用HeplerSDK
的handleData()
方法,传入onActivityResult()
方法中的intent数据,您就能获取到一个代表Google账号数据的GoogleSignInAccount
对象,具体代码如下:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == HelperSDK.GOOGLE_SIGN_IN) {
try {
GoogleSignInAccount account = HelperSDK.handleData(data);
toast("ok");
StringBuilder sb = new StringBuilder();
sb.append("DisplayName: " + account.getDisplayName())
.append("Account: " + account.getAccount() + "\n")
.append("Email:" + account.getEmail() + "\n")
.append("FamilyName: " + account.getFamilyName() + "\n")
.append("GivenName: " + account.getGivenName() + "\n")
.append("Id: " + account.getId() + "\n")
.append("IdToken: " + account.getIdToken() + "\n");
tv_account_info.setText(sb.toString());
} catch (ApiException e) {
e.printStackTrace();
Log.e(TAG, "signInResult:failed code=" + e.getStatusCode());
toast("failed");
}
}
}
注:
- 关于获取应用的SHA1签名,在
AndroidStudio
中有比较快捷的操作而不用在命令行中繁琐操作,选择右侧的Gradle
栏并展开App的tasks,如图:
选中signingReport
点中后即可看到对应的SHA1值,如图:
- 第一种方式仅为生成debug的,如果指定自己的keystore,可以在AndroidStudio的Terminal中用命令:
keytool -v -list -keystore ks0821
ks0821为keystore的文件名;
- 关于签名的坑,当开发者用自己的签名上传应用到Google play时,Google play会去掉开发者的签名并加Google的签名,这会导致谷歌登录失败,具体情况可以参考这篇文章的部分,上传后把Google签名的Sha1在提交到Google即可解决登录的问题;
GooglePay
- 初始化
GooglePay利用了IPC去绑定Service,而
HelperSDK
封装了这些细节,在初始化操作中,SDK会绑定Service,你只需要调用HelperSDK
的initGoogleBuy()
方法即可,传入当前的Activity对象,建议在onCreate()
方法中调用,用法如下:HelperSDK.initGoogleBuy(this);
- 调起购买
调用
HelperSDK
的googleBuy()
方法,依次传入当前Activity对象和商品id,用法如下:HelperSDK.googleBuy(this,"101");
- 接收回调
和登录类似,结果也会回调到当前的Activity,同样需要在
onActivityResult()
方法中调用SDK处理,具体代码如下: ```java @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == HelperSDK.GOOGLE_BUY) { // 这里和Google登录很类似,调用SDK的处理回调数据的方法 String purchaseData = HelperSDK.handleGoogleBuyData(data); // 对purchaseData做空判断 if (resultCode == RESULT_OK) { try { JSONObject jo = new JSONObject(purchaseData); String sku = jo.getString(“productId”); // token作为消耗商品必传的参数 String token = jo.getString(“purchaseToken”); toast(“You have bought the “ + sku + “. Excellent choice,adventurer!”);} catch (JSONException e) { toast("Failed to parse purchase data."); e.printStackTrace(); } } } } ```
- 释放资源
为了避免内存泄露等问题,一般我们都会在
Activity
的onDestroy()
方法中做释放资源和解绑Service的操作,这里你只需要调用HelperSDK
的releaseGoogleBuy()
方法,传入当前的Activity对象即可,SDK帮你做了解绑Service的操作,用法如下:HelperSDK.releaseGoogleBuy(this);