最近项目SnapChat第三方登录的需求,于是就阅读了开发文档接入了。在这过程中也遇到了一些小问题,索性就记录下来,希望可以能帮到一些人
1.SnapChat开发者管理后台创建App
https://kit.snapchat.com/portal/apps,管理后台可以填写开发和生产的一些应用配置信息
这里需要注意的是Redirect URLs一栏,最开始以为是服务器配置的回调地址,但是没有给出后端应该怎么校验和使用,最后发现是本地的URL Scheme信息可以登录授权成功,拿到我们需要的用户唯一标识 externalId
2.配置开发项目
info.plist 中加入SnapChat配置
<key>SCSDKClientId</key>
<string>d8c60733-f2fb-499b-b073-dc3e1c3600c6</string>
<key>SCSDKRedirectUrl</key>
<string>tassel://snapLogin</string>
<key>SCSDKScopes</key>
<array>
<string>https://auth.snapchat.com/oauth2/api/user.display_name</string>
<string>https://auth.snapchat.com/oauth2/api/user.external_id</string>
<string>https://auth.snapchat.com/oauth2/api/user.bitmoji.avatar</string>
</array>
3.开始接入SDK
注意:根据SnapChat官方文档中描述的SnapChat SDK支持是最低设备版本iOS 10,所以如果你的App低于这个版本的话,考虑到兼容稳定性,可以尝试在低版本系统中进行一些隐藏处理
这里是以Pod方式引入的
pod 'SnapSDK', :subspecs => ['SCSDKLoginKit']
关键代码
- (void)snapChatLogin {
[SCSDKLoginClient loginFromViewController:self completion:^(BOOL success, NSError * _Nullable error) {
if (success) {
[self fetchUserData];
}
}];
}
- (void)fetchUserData {
//这里是GraphQL 获取需要的用户信息,可以根据需要获取
NSString *queryString = @"{me{externalId, displayName, bitmoji{avatar}}}";
[SCSDKLoginClient fetchUserDataWithQuery:queryString variables:nil success:^(NSDictionary * _Nullable resources) {
NSLog(@"=========> user data %@",resources);
} failure:^(NSError * _Nullable error, BOOL isUserLoggedOut) {
}];
}
SnapChat SDK支持原生app跳转登录以及网页登录,这里测试方便使用的是模拟器
成功拿到用户信息
在阅读SnapChat开发文档中并未找到后端校验externalId真实性的方法,为了安全起见可以考虑对此项字段进行处理
最后放上 Demo 如果你在接入过程中遇到或者有别的想法欢迎沟通交流