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.youkuaiyun.com/?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()
}
点击下面的按钮即可获取配置文件以将其添加到您的项目中。
该配置文件提供了您的应用的服务专用信息。要获取该文件,您必须为您的应用选择一个现有项目或新建一个项目。此外,您还需要为应用提供一个文件包名称。
将配置文件添加到项目中
将您刚刚下载的 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;
}
}
});