|
/

集成新浪微博第三方登录Block没有收到回调

X潇abc
发布于 5 年前
92771
社会化分享 U-Share
移动统计 U-App
SDK集成与升级

调用新浪微博

[[UMSocialManager defaultManager] getUserInfoWithPlatform:UMSocialPlatformType_Sina currentViewController:nil completion:^(id result, NSError *error) {

if (error) {

} else {

UMSocialUserInfoResponse *resp = result;

// 授权信息

NSLog(@"Sina____________uid: %@", resp.uid);

NSLog(@"Sina____________accessToken: %@", resp.accessToken);

NSLog(@"Sina____________refreshToken: %@", resp.refreshToken);

NSLog(@"Sina____________expiration: %@", resp.expiration);

NSLog(@"Sina____________unionid: %@", resp.unionId);

// 用户信息

NSLog(@"Sina____________name: %@", resp.name);

NSLog(@"Sina____________iconurl: %@", resp.iconurl);

NSLog(@"Sina____________gender: %@", resp.unionGender);

// 第三方平台SDK源数据

NSLog(@"Sina____________originalResponse: %@", resp.originalResponse);

[weakSelf thirdLoginWithThirdKey:resp.unionId ForLoginType:Login_Sina data:resp];

}

}];

回调结果

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options {

}

明明配置了universalLink,但是也不会正常走

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {

}

验证过程,

在safari浏览器输入配置的“https://***********/app/sina/”,可以正常打开APP。

但是配置了,结果调用新浪微博还是不会走Block,导致无法获取信息。

9个回答
 
5 年前

问题已找到,为了实现在分享面板复制链接功能,写了UMSocialHandler的子类,在.m重写了+ (void)load导致的问题。

 
5 年前

新浪微博

授权并获取用户信息

获取uid、access token及用户名等


// 在需要进行获取用户信息的UIViewController中加入如下代码

#import <UMShare/UMShare.h>

- (void)getAuthWithUserInfoFromSina
{
[[UMSocialManager defaultManager] getUserInfoWithPlatform:UMSocialPlatformType_Sina currentViewController:nil completion:^(id result, NSError *error) {
if (error) {

} else {
UMSocialUserInfoResponse *resp = result;

// 授权信息
NSLog(@"Sina uid: %@", resp.uid);
NSLog(@"Sina accessToken: %@", resp.accessToken);
NSLog(@"Sina refreshToken: %@", resp.refreshToken);
NSLog(@"Sina expiration: %@", resp.expiration);

// 用户信息
NSLog(@"Sina name: %@", resp.name);
NSLog(@"Sina iconurl: %@", resp.iconurl);
NSLog(@"Sina gender: %@", resp.unionGender);

// 第三方平台SDK源数据
NSLog(@"Sina originalResponse: %@", resp.originalResponse);
}
}];
}

新浪微博(完整版)登录回调方法要求

未安装新浪微博客户端时会弹出Webview进行登录和分享,之后会回调至以下函数:


- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation


说明 如果用户没有重载此函数的话,会导致微博(完整版)SDK通过Webview的回调而崩溃。开发者需重载此方法接受系统回调。

配置ATS以支持访问HTTP请求

由于新浪微博SDK还未更新ATS的支持,故目前需要对其进行配置,可根据所选平台裁剪以下代码:右键info.plist用source code打开


<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<!-- 集成新浪微博对应的HTTP白名单-->
<key>sina.com.cn</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<key>sinaimg.cn</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<key>sinajs.cn</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<key>sina.cn</key>
<dict>
<!-- 适配iOS10 -->
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<key>weibo.cn</key>
<dict>
<!-- 适配iOS10 -->
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<key>weibo.com</key>
<dict>
<!-- 适配iOS10 -->
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<!-- 新浪微博-->
</dict>
</dict>

ADSupport及IDFA的说明

如果开发者希望集成ADSupport.framework,在进行ipa提交store时候勾选用于跟踪用户广告效果的选项即可。如果开发者希望不集成ADSupport.framework,即获取IDFA,可直接删去ADSupport.framework。不集成ADSupport.framework不会影响微博的登录和分享功能。

 
5 年前

看到楼主的思路,感觉很厉害,佩服

 
5 年前

应该是在.m重写了+ (void)load导致的问题

 
5 年前

目前新浪SDK的所有回调都是指定调用:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
  • 如果用户不写重写此API就会崩溃。
  • 目前此API已经废弃但是API功能可用,编译会有警告可以用宏来屏蔽编译警告
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
//
这部分使用到的过期api
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{

}
#pragma clang diagnostic pop

Loading ...
登录社区,分享你的经验