Zalo登录
注册前的准备工作
由于国内网络无法直接打开Zalo页面,因此需要一个较稳定的VPN。
创建开发者账号
登录Zalo开发者后台
可以在网页最底部把网页设置为英文
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210430100552486.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5MzAwMzA3,size_16,color_FFFFFF,t_70)
创建自己的应用
1.点击右上角【创建应用】
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210430100455853.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5MzAwMzA3,size_16,color_FFFFFF,t_70)
2.创建好应用后记录Application ID和Application secret key 并点击Log in
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210430100859665.png)
3.点击Android,填写Package name(unity包名)、Hash key。
如何获取Hashkey,他这里是需要SHA1,我们可以通过:
1、win+R 打开cmd命令窗口
2、输入命令:keytool -list -v -keystore jks路径地址
3、输入密钥口令
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210430102603398.png)
4.得到以下信息
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210430102703660.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5MzAwMzA3,size_16,color_FFFFFF,t_70)
AndroidStudio添加ZaloSDK
1.添加ZaloSDK库以构建gradle
build.gradle文件中添加以下依赖项:
implementation “com.zing.zalo.zalosdk:core:2.6.0329@aar”
implementation “com.zing.zalo.zalosdk:auth:2.6.0329@aar” implementation"com.zing.zalo.zalosdk:openapi:2.6.0329@aar"
注:添加@aar是因为AndroidX和Android support有冲突
报错为:
Duplicate class android.support.v4.os.ResultReceiver$MyRunnable found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:28.0.0)
Duplicate class androidx.core.graphics.drawable.IconCompatParcelizer found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:28.0.0)
Duplicate class androidx.core.internal.package-info found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:28.0.0)
Duplicate class androidx.versionedparcelable.CustomVersionedParcelable found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.NonParcelField found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.ParcelField found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.ParcelImpl found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.ParcelImpl$1 found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.ParcelUtils found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.VersionedParcel found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.VersionedParcel$1 found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.VersionedParcel$ParcelException found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.VersionedParcelParcel found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.VersionedParcelStream found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.VersionedParcelStream$FieldBuffer found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.VersionedParcelStream$InputBuffer found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.VersionedParcelable found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.VersionedParcelize found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
2.AndroidManifest.xml中添加appID
首先先创建一个string.xml
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210430103955309.png)
在string.xml里面添加
<string name="appID"> appID(之前获取的Application ID)</string>
然后在AndroidManifest.xml中添加
<!-- Required zalo app id -->
<meta-data
android:name="com.zing.zalo.zalosdk.appID"
android:value="@string/appID" />
注:需要根据上述说明添加AppID的strings.xml,不能直接在metaData标签中分配appID字符串将导致ZaloSDK无法识别appID错误。
3.在AndroidManifest文件中,添加“应用程序名称”属性
<application android:name="com.zing.zalo.zalosdk.oauth.ZaloSDKApplication" />
如果应用程序具有其自己的Application类,则应用程序的onCreate方法必须调用
public class DemoApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
ZaloSDKApplication.wrap(this);
}
}
4.在AndroidManifest文件中,添加activity
<activity
android:name="com.zing.zalo.zalosdk.oauth.BrowserLoginActivity">
<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="zalo-appID(之前获取的Application ID)" />
</intent-filter>
</activity>
5.为zaloSDK添加proguard
-keep class com.zing.zalo.**{ *; }
-keep enum com.zing.zalo.**{ *; }
-keep interface com.zing.zalo.**{ *; }
注:上述步骤都做完后,可能会有报错,如
Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91
is also present at [androidx.core:core:1.0.0] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).
Suggestion: add ‘tools:replace=“android:appComponentFactory”’ to element at AndroidManifest.xml:6:5-26:19 to override.
解决方法:
在AndroidManifest.xml里添加
tools:replace="android:appComponentFactory"
android:appComponentFactory=""
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210430111925542.png)
Zalo登录
1.Zalo授权API
ZaloSDK.Instance.authenticate(Activity, OAuthCompleteListener) //default: LoginVia.APP
ZaloSDK.Instance.authenticate(Activity, LoginVia, OAuthCompleteListener)
LoginVia 有三种登录选项:
LoginVia.APP---------------ZaloApp登录
LoginVia.WEB--------------Zalo网页登录
LoginVia.APP_OR_WEB---------------优先App登录,如果设备没安装App则使用Web登录
OauthCompleteListener获取登录结果:
OAuthCompleteListener listener = new OAuthCompleteListener() {
@Override
public void onAuthenError(int errorCode, String message) {
//授权失败
}
@Override
public void onGetOAuthComplete(OauthResponse response) {
String code = response.getOauthCode()
//授权成功
}
};
2.重写onActivityResult
protected void onActivityResult(int reqCode, int resCode, Intent d) {
super.onActivityResult(requestCode, resultCode, data);
ZaloSDK.Instance.onActivityResult(this, reqCode, resCode, d);
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210430114538732.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5MzAwMzA3,size_16,color_FFFFFF,t_70)
如需获取用户信息,获取用户信息