1接入登录SDK AndroidManifest.xml 添加代码 权限
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.READ_LOGS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />gradle 添加VK Facebook 导入sdk
compile 'com.facebook.android:facebook-android-sdk:4.+' compile 'com.vk:androidsdk:1.6.8' compile(name: 'foreignJLSDK', ext: 'aar')声明
<!-- 第三方界面注册 --> <activity android:name="com.foreign.jlsdk.ThirdpartyLoginActivity" android:configChanges="orientation|screenSize" android:launchMode="singleTask" android:theme="@style/fun" > </activity> <!-- 论坛web --> <activity android:name="com.foreign.jlsdk.view.JLWebView" android:configChanges="orientation|screenSize" android:launchMode="singleTask" android:theme="@style/fun"/> <!-- 通用界面 --> <activity android:name="com.foreign.jlsdk.DetailedFragment" android:configChanges="orientation|screenSize" android:theme="@style/fun" android:launchMode="singleTask" > </activity> <!-- 悬浮窗服务--> <service android:name="com.foreign.jlsdk.FxService" android:configChanges="orientation|screenSize" > </service> <!-- paysstion --> <activity android:name="com.payssion.android.sdk.PayssionActivity" android:label="@string/app_name" android:theme="@style/Theme.PayssionTrans" /> <activity android:name="com.payssion.android.sdk.PaymentWebActivity" android:label="@string/app_name" android:theme="@style/Theme.AppCompat.Light.NoActionBar" /> <!-- facebook --> <activity android:name="com.foreign.jlsdk.MQVKFacebook.MyFacebook" android:theme="@style/fun" /> <meta-data android:name="com.facebook.sdk.ApplicationId" tools:replace="android:value" android:value="@string/app_id" /> <provider android:authorities="com.facebook.app.FacebookContentProvider241511576234954" android:name="com.facebook.FacebookContentProvider" android:exported="true"/> - <!-- VK --> <!-- VK --> <activity android:name="com.foreign.jlsdk.MQVKFacebook.MyVK" android:theme="@style/fun" /> <activity android:name="com.vk.sdk.VKServiceActivity" android:configChanges="orientation|screenSize" android:label="ServiceActivity" android:theme="@style/VK.Transparent" /> <activity android:name="com.foreign.jlsdk.MQVKFacebook.VKInviteActivity" android:configChanges="orientation|screenSize" android:launchMode="singleTask" />Strings 添加 facebook VK APPID
<string name="app_id">355198514515820</string> <integer name="com_vk_sdk_AppId">5197543</integer>在Application里 添加
Constant.getinit(getApplicationContext());初始化 调起登录 替换自己的Appid Key
JLAppInfo appInfo = new JLAppInfo(); appInfo.setAppId("08afc1ee45874935a78ee6c4bc2074a1"); appInfo.setAppKey("3bc5fccb140247eab83cee443390e8a8"); final SDKManager sdkManager = SDKManager.getInstance(); sdkManager.Init(this, appInfo); //如果要设置自己的悬浮窗 sdkManager.setLogoImage(R.drawable.jl_logo); //设置悬浮窗图片 sdkManager.setCommunityImage(R.drawable.jl_logo); //设置社区图片 sdkManager.setPersonalImage(R.drawable.jl_logo); //设置个人中心图片 sdkManager.setFAQImage(R.drawable.jl_logo); //设置常见问题解答 sdkManager.setGoneImage(R.drawable.jl_logo); //设置隐藏按钮图片 sdkManager.setVKInviteImage(R.drawable.jl_logo); //设置VK邀请按钮 sdkManager.setVKInvite(true); //显示VK邀请按钮 主要在VK登陆才会显示 //设置社区web地址 如果没有 自动隐藏布局 sdkManager.setCommunityUrl("http://blog.csdn.net/?ref=toolbar_logo"); //设置常见问题解答 web地址 如果没有 自动隐藏布局 sdkManager.setFAQUrl("https://www.facebook.com/"); /*** * 调起登陆界面 * Constant.STYLE1 有第三方登录 * Constant.STYLE2 没有第三方登陆 * * CHINESE_SERVER 国内服务器 * OVERSEAS_SERVER 海外服务器 */ sdkManager.Login(MainActivity.this, Constant.STYLE1,Constant.CHINESE_SERVER,new SDKManager.OnLoginProcessListener() { @Override public void finishLoginProcess(int code, JLAccountInfo arg1) { if (code == -1) { Toast.makeText(MainActivity.this, "用户注销", Toast.LENGTH_SHORT).show(); } else { System.out.println("!!!!!!!!!" + code); System.out.println("!!!!!!!!!getUid" + arg1.getUid()); System.out.println("!!!!!!!!!getToken" + arg1.getToken()); System.out.println("!!!!!!!!!getPartnerId" + arg1.getPartnerId()); System.out.println("!!!!!!!!!getIsBind" + arg1.getIsBind()); System.out.println("!!!!!!!!!getIsUpdate" + arg1.getIsUpdate()); System.out.println("!!!!!!!!!getIsSecure" + arg1.getIsSecure()); System.out.println("!!!!!!!!!getimage" + arg1.getImageUrl()); if (arg1.getIsBind().equals("1")) { Toast.makeText(MainActivity.this, "用户已经绑定账号", Toast.LENGTH_SHORT).show(); } if (arg1.getIsSecure().equals("1")) { Toast.makeText(MainActivity.this, "用户已经绑定密保邮箱", Toast.LENGTH_SHORT).show(); } } } }); /*** * 注册VK邀请监听 */ SDKManager.getInstance().VKInvite(MainActivity.this, new SDKManager.OnVkInviteListener() { @Override public void process(String json) { // Toast.makeText(MainActivity.this, "VK邀请回调执行"+json, Toast.LENGTH_SHORT).show(); S.out("VK邀请回调执行" + json); } });悬浮窗控制
@Override protected void onResume() { super.onResume(); //获得焦点隐藏悬浮窗 FxService.initFxService().mFloatView(MainActivity.this, true); } @Override protected void onPause() { super.onPause(); //失去焦点隐藏悬浮窗 FxService.initFxService().mFloatView(MainActivity.this, false); }注销
SDKManager.getInstance().LogOff(MainActivity.this);二 接入AppsFlyer 1 AndroidManifest.xml 中添加
<receiver android:name="com.appsflyer.MultipleInstallBroadcastReceiver" android:exported="true"> <intent-filter> <action android:name="com.android.vending.INSTALL_REFERRER" /> </intent-filter> </receiver> <receiver android:name="com.appsflyer.SingleInstallBroadcastReceiver" android:exported="true"> <intent-filter> <action android:name="com.android.vending.INSTALL_REFERRER" /> </intent-filter> </receiver> <!-- 渠道打包 appsflyer Appid Verizon 默认值 --> <meta-data android:name="Jei2Sx8SrBkmiwqfQfN5w3" android:value="verizon" />2 SDK的初始化,需要将以下项目添加至onCreate函数中, 替换成您AppsFlyer账户的实际Dev_Key
JLappsFlyer.startTracking(MainActivity.this,imei,"Jei2Sx8SrBkmiwqfQfN5w3");3设置Customer User ID (用户账户ID) 有些应用会给每个独立用户指定一个的ID(玩家ID或者登陆邮箱等)作为标识其身份唯 一性的标志。可将此ID上报给AppsFlyer, 由此账户ID便可以和其他设备ID建立映射关系。
JLappsFlyer.setCustomerUserId("MyId");4 * Deeplinking为re-targeting活动追踪的很重要的部分,如果有re-targeting活动,AppsFlyer强烈建议您使用Deeplinking。 * 如果您需要通过AppsFlyer, 追踪通过深度链接打开应用的Re-targeting活动投放数据,那么请确保每个相关的activity对应OnCreate()方法中都添加了以下的代码:
JLappsFlyer.sendDeepLinkData(this); <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="your unique scheme" /> </intent-filter>5支付事件 金额 货币 产品类型 产品ID
JLappsFlyer.EventsPay(MainActivity.this,100,"USD","产品类型","产品ID");6 自定义事件 事件名称,事件值
Map<String, Object> eventValue = new HashMap<String, Object>(); eventValue.put("UID", "MQ"); JLappsFlyer.EventsObj(this,"登陆事件",eventValue);三 接入GoogleAnalytics 统计
1 将下面的依赖关系添加到您的项目一级 build.gradle 中:
classpath 'com.google.gms:google-services:3.0.0'将此插件添加到应用级 build.gradle 的底部:
apply plugin: 'com.google.gms.google-services'现在,您需要为 Google Play 服务添加一个依赖关系。为此,请在您应用的 build.gradle 中添加以下内容:
compile 'com.google.android.gms:play-services-analytics:9.0.0'在dependencies 上面 加入
repositories { mavenCentral() }点击下面的按钮即可获取配置文件以将其添加到您的项目中。 该配置文件提供了您的应用的服务专用信息。要获取该文件,您必须为您的应用选择一个现有项目或新建一个项目。此外,您还需要为应用提供一个文件包名称。
GET A CONFIGURATION FILE
将配置文件添加到项目中 将您刚刚下载的 google-services.json 文件复制到您 Android Studio 项目的 app/ 或 mobile/ 目录中。
2您应该将 Application 纳入子类并提供一个可返回应用跟踪器的辅助方法
package com.google.samples.quickstart.analytics; import android.app.Application; import com.google.android.gms.analytics.GoogleAnalytics; import com.google.android.gms.analytics.Tracker; /** * This is a subclass of {@link Application} used to provide shared objects for this app, such as * the {@link Tracker}. */ public class AnalyticsApplication extends Application { private Tracker mTracker; /** * Gets the default {@link Tracker} for this {@link Application}. * @return tracker */ synchronized public Tracker getDefaultTracker() { if (mTracker == null) { GoogleAnalytics analytics = GoogleAnalytics.getInstance(this); // To enable debug logging use: adb shell setprop log.tag.GAv4 DEBUG mTracker = analytics.newTracker(R.xml.global_tracker); } return mTracker; } }Activity 或 Fragment
打开您要跟踪的 Activity。您也可以跟踪 Fragment,但请确保其准确代表屏幕浏览。
替换您要跟踪的 Activity 或 Fragment 的 onCreate 方法来获取共享的 Tracker 实例
AnalyticsApplication application = (AnalyticsApplication) getApplication(); mTracker = application.getDefaultTracker(); mTracker.setScreenName("Image~" + name); mTracker.send(new HitBuilders.ScreenViewBuilder().build());向代表屏幕的每个 Activity 或 Fragment 添加跟踪代码。如果您想在 Google Analytics(分析)中区分您应用的不同屏幕浏览数据,请务必在每个 Activity 或 Fragment 内设置一个名称。记录在共享跟踪器上的所有活动会发送最新的屏幕名称,直到这些名称被替换或清除(设置为 null)。
3发送事件 要发送事件,请在跟踪器上设置屏幕字段值,然后发送匹配。下面的示例使用 HitBuilders.EventBuilder 来发送 Event:
mTracker.send(new HitBuilders.EventBuilder() .setCategory("Action") .setAction("Share") .build());四 Paysstion支付
/*** * 调起Paysstion支付 * @param activity * @param APIKey * @param SecretKey * @param amount 金额 * @param order 订单号 * @param currency 货币 * @param Email 邮箱 * @param Name 名字 * @param Description 订单描述 */ Paysstion.initPaysstion().open(MainActivity.this, "APIKey", "APIKey", 1, "123456", "RUB", "", "", "商品名称");支付结果返回
订单支付结果以Payssion服务器通知为准,当订单支付状态发生变化时Payssion服务器会自动通知到notify_url (应用设置时需要填写)。
重写MainActivity的onActivityResult方法:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Log.v(this.getClass().getSimpleName(), "onActivityResult"); switch (resultCode) { case PayssionActivity.RESULT_OK: if (null != data) { PayResponse response = (PayResponse)data.getSerializableExtra(PayssionActivity.RESULT_DATA); if (null != response) { //去服务端查询该笔订单状态,注意订单状态以服务端为准 } else { //should never go here } } break; case PayssionActivity.RESULT_CANCELED: //用户取消支付 break; case PayssionActivity.RESULT_ERROR: //支付发生错误 if (null != data) { //获取错误信息描述 String des = data.getStringExtra(PayssionActivity.RESULT_DESCRIPTION); Log.v(this.getClass().getSimpleName(), "RESULT_ERROR" + des); } break; } super.onActivityResult(requestCode, resultCode, data); }五 facebook 登录,分享 事件
页面统计
// Add to each long-lived activity @Override protected void onResume() { super.onResume(); AppEventsLogger.activateApp(this); } // for Android, you should also log app deactivation @Override protected void onPause() { super.onPause(); AppEventsLogger.deactivateApp(this); }添加自定义事件
AppEventsLogger logger = AppEventsLogger.newLogger(this); // Add to a button click handler logger.logEvent();facebook登录
initSDK.SDKManager().setFacebook(MainActivity.this, new initSDK.onMQFacebookListener() { @Override public void Process(Profile profile, String s) { String Token = s; String id = profile.getId(); String name = profile.getName(); Toast.makeText(MainActivity.this, "名字是" + name, Toast.LENGTH_SHORT).show(); } });facebook 分享
initSDK.SDKManager().setFacebookShare(MainActivity.this, "标题", "描述", "www.taobao.com", new initSDK.onMqFacebookShareLinstener() { @Override public void Process(int i) { //未翻墙的情况 返回 会走成功 switch (i) { case initSDK.SUCCESS: Toast.makeText(MainActivity.this, "分享成功", Toast.LENGTH_SHORT).show(); break; case initSDK.CANCEL: "分享取消", Toast.LENGTH_SHORT).show(); break; case initSDK.ERROR: Toast.makeText(MainActivity.this, "分享错误", Toast.LENGTH_SHORT).show(); break; } } });六 VK登录 分享 邀请 VK登录
initSDK.SDKManager().setVKlogin(MainActivity.this, new initSDK.onMQVKLoginListener() { @Override public void process(VKAccessToken res, VKResponse response) { final String userId = res.userId.toString(); final String token = res.accessToken.toString(); System.out.println("用户数据是" + response.json); } });VK分享
final Bitmap b = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher); initSDK.SDKManager().setVKShare(MainActivity.this, "标题", "内容", b, "www.hao123.com", new initSDK.onMQVKShareLinstener() { @Override public void process(int code) { switch (code) { case initSDK.SUCCESS: Toast.makeText(MainActivity.this, "分享成功", Toast.LENGTH_SHORT).show(); break; case initSDK.CANCEL: Toast.makeText(MainActivity.this, "分享取消", Toast.LENGTH_SHORT).show(); break; case initSDK.ERROR: Toast.makeText(MainActivity.this, "分享错误", Toast.LENGTH_SHORT).show(); break; } } });vk邀请 获取邀请列表
initSDK.SDKManager().setVKInviteList(MainActivity.this, new initSDK.onMQVKInviteListLinstener() { @Override public void InviteProcess(final List<VKInviteBase> vkInviteBasesListBase) { if (vkInviteBasesListBase == null) { finish(); return; } } });发送邀请 参数为 被邀请人VKID
initSDK.SDKManager().setVKInvite(MainActivity.this, "344667959", new initSDK.onMQVKInviteLinstener() { @Override public void InviteProcess(int code, String s) { switch (code) { case initSDK.SUCCESS: break; case initSDK.ERROR: break; } } });