MRMailSDK 1.4.3

MRMailSDK 1.4.3

Evgeniy Yurtaev 维护。



MRMailSDK 1.4.3

  • 作者:
  • Aleksandr Karimov

Mail.Ru iOS SDK

SDK 允许第三方 iOS 应用程序的用户通过 Mail.Ru 账户进行身份验证。之后,可以使用身份验证代码获取用户信息,如 OAuth 2.0 身份验证指南中所述。

项目页面和源代码:https://github.com/mailru/mail-auth-sdk-ios

支持 iOS 9.0 及以上版本。

准备使用

在开始使用 Mail.Ru SDK 之前,您需要在 此处创建应用程序。保存您的 应用程序 ID 并填写必填字段。

Пример настроек приложения

在 iOS 应用程序中设置 URL 方案

为了通过 Mail.Ru SDK 进行身份验证,您需要设置您应用程序的 URL 方案。为此,请将以下代码添加到项目文件的 Info.plist 中的 URL Types → URL Schemes 部分中

  • 用于从 Mail.Ru 应用程序返回结果的身份验证方案的方案。在初始化 SDK 时,需要在 returnScheme 属性中指定此方案。
  • 如果您选择通过 SafariViewController 进行身份验证,那么也需要在应用程序设置中的 redirect_uri 字段添加此方案。

这些方案可以相同,此时只需在 Info.plist 中添加一个条目即可。

mr-mail-oauth2 方案添加到 Info.plist 文件的 LSApplicationQueriesSchemes 部分。这使得 SDK 能够判断 Mail.Ru 应用程序是否已安装在设备上,并通过它进行身份验证。

有关这些设置的更多信息,您可以在 Apple 手册中找到,请参阅 iOS 应用程序编程指南信息属性列表键参考

将 SDK 连接到应用

您可以使用 Cocoapods、Carthage 或不使用依赖关系管理器来集成库。您可以在 samples 文件夹中找到集成和使用示例。

使用 CocoaPods

CocoaPods 是一个用于 Objective-C 和 Swift 项目中的依赖关系管理器,简化了使用第三方库,如 Mail.Ru SDK 的过程。有关更多信息,请参阅《入门》指南。

将以下行添加到您的 Podfile 中:

pod 'MRMailSDK'

然后执行以下命令:

pod install

使用 Carthage

将以下行添加到您的 Cartfile 中:

github "mailru/mail-auth-sdk-ios"

然后执行以下命令:

carthage update

按照说明将构建好的框架连接到项目。

不使用依赖关系管理器

将项目 mr-mail-sdk.xcodeproj 作为子项目添加到您的项目中。然后找到您的项目属性的设置 General → Embedded Binaries,并添加 mr-mail-sdk.framework

使用 SDK

初始化

将此代码放入 Application Delegate 类中,用您应用的配置项替换其中的行

#import <MRMailSDK/MRMailSDK.h>

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    MRMailSDK *mailSDK = [MRMailSDK sharedInstance];
    [mailSDK initializeWithClientID:@"bddc421472584782aacd6d7549cbc31b"
                        redirectURI:@"sample-auth-callback://"];
    mailSDK.returnScheme = @"sample-auth-callback";
    return YES;
}

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {
    return [[MRMailSDK sharedInstance] handleURL:url
                               sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
                                      annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
}

@end

Swift 中的相同内容

import MRMailSDK

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, MRMailSDKDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        let mailSDK = MRMailSDK.sharedInstance()
        mailSDK.initialize(withClientID: "bddc421472584782aacd6d7549cbc31b", redirectURI: "sample-auth-callback://")
        mailSDK.returnScheme = "sample-auth-callback"
        return true
    }

    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        let sourceApplication = options[.sourceApplication] as? String
        let annotation = options[.annotation] as? String
        return MRMailSDK.sharedInstance().handle(url, sourceApplication: sourceApplication, annotation: annotation)
    }
}

通过 Mail.Ru 账户进行身份验证

设置一个代理,身份验证的结果将被传递给它。

MRMailSDK.sharedInstance.delegate = self;

调用 authorize 方法进行身份验证

[MRMailSDK.sharedInstance authorize];

或使用现成的 MRMailSignInButton 按钮。

Кнопка авторизации

如果用户安装了 Mail.Ru 邮件应用程序,并在初始化时设置了 returnScheme 参数,则身份验证将直接通过它进行,无需输入用户名和密码。否则,将打开网页界面。通过设置 internalAuthMode 参数,可以指定网页界面在 SFSafariViewController 或 SDK 内置的 Web 视图中打开。

身份验证完成后,将调用代理的一个方法。在身份验证成功的情况下,SDK 将调用 -[MRMailSDKDelegate mrMailSDK:authorizationDidFinishWithCode:] 方法,并将身份验证代码传递给它。该代码可以用来交换令牌,然后可以使用令牌按照指南中的说明获取用户信息,该指南描述了 OAuth 2.0 身份验证

身份验证错误

在发生错误的情况下,将调用方法 -[MRMailSDKDelegate mrMailSDK:authorizationDidFailWithError:]。可能出现以下错误代码

  • kMRSDKUninitializedErrorCode (0) — SDK 未初始化。
  • kMRSDKIncorrectClientIdErrorCode (1) — 应用程序 ID 错误。
  • kMRSDKAuthorizationAlreadyInProgressErrorCode (2) — 身份验证流程已启动但尚未完成。
  • kMRSDKOAuthErrorCode (3) — OAuth API 错误。
  • kMRSDKNetworkErrorCode (4) — 网络错误。
  • kMRSDKCanceledByUserErrorCode (5) — 身份验证流程被用户中断。
  • kMRSDKUnauthorizedApplicationErrorCode (6) — 您的应用程序没有身份验证权限。
  • kMRSDKExternalOAuthDisabledErrorCode (7) — OAuth 身份验证已禁用。
  • kMRSDKExternalOAuthRefuseErrorCode (8) — OAuth 身份验证被拒绝。