どのようにxamarinを使用してSMSの読み取りアクセス許可なしにAndroidのOTPを確認する方法.フォーム?


このブログでは、AndroidでOTPを検証する方法について説明します.フォーム.今ではほとんどのモバイルアプリケーションのユーザーのOTP登録を使用します.ユーザーがOTPを入力し、アプライアンスにアクセスできるように.しかし、SMSが自動的に入力せずにユーザーアプリケーションに設定される場合、それは狂っている場合には、OTPを同等のデバイス上で受信する必要があります.
AndroidのマニフェストファイルにReadRain SMSのアクセス許可を提供することで、LocalboardCastManagerを使用してOTPを取得します.しかし、問題は、Google Playは私たちがそれらを伝えることなく、なぜ私たちはユーザーに携帯電話からSMSを読むためにReadRange SMSのアクセス許可を提供していることを許可しませんでした.Google Playは、あなたのアプリケーションがスパイアプリケーションであるかもしれないと思います.だから、Googleはいくつかの質問を、なぜ我々はReadRange SMSのアクセス許可を提供します.現在、すべての認証はOTPベースです.誰でもあなたのOTPメッセージを盗むことができるように.ユーザーを保護するために、GoogleはSMSレトリーバーAPIを提供します.しかし、我々はユーザーのデバイスからOTPメッセージを読むためのSMS

どのようにプロジェクトを作成し、どのようにSMSの読み取り許可なしにAndroidのOTPを確認するには?


XAmarinを使用してSMS読み取り許可なしにAndroidでOTPを確認するこれらの手順に従ってください.フォーム
ステップ1:AndroidアプリケーションでXamarinプロジェクトを作成します.
Step 2 :プロジェクトを作成した後、ソリューションエクスプローラーのプロジェクト名をクリックし、パッケージをインストールするには、Manuple Nugetパッケージを右クリックして選択します.

Googleプレイサービスパッケージのインストール.

イメージ2 :インストール許可
ステップ3:パッケージのインストール後、入力し、OTP番号を提出するためのユーザーインターフェイスを作成します.
ファイル名:メインページ.XAML
<!--?xml encoding="utf-8" version="1.0"-->

<stacklayout>
  <stacklayout backgroundcolor="White" horizontaloptions="CenterAndExpand" padding="15" verticaloptions="CenterAndExpand">
  <entry placeholder="Enter OTP" placeholdercolor="Black" x:name="otpEntry"></entry><button clicked="Button_Clicked" text="Submit OTP"></button>
  </stacklayout>
  </stacklayout>

  <!--?xml-->
ステップ4 :依存関係サービス
DependencyServiceは、アプリケーションが共有コードからプラットフォーム固有の機能を呼び出すことができます.この機能はxamarinを許します.アプリケーションは、ネイティブアプリケーションが行うことができるすべてをテストするアプリケーションです.プラットフォームの特定の機能と対話する方法を定義するインタフェースを設計する必要があります.ここで、OTP読書はAndroidプラットホームを支持するだけです、そして、IOSは自動補完をサポートします、それで、SMSコレクタに集中するためにAdependencyServiceインターフェースをつくってください.CommonServiceの新しいクラスとインターフェイスを作成します.
続きを読む:Hybrid Mobile App Development - Xamarin Or Telerik AppBuilder
これでフォルダ依存関係を作成し、依存ファイルを保存します.
ファイルの種類
コード
using System;
using System.Collections.Generic;
using System.Text;
using Xamarin.Forms;

namespace DemoOFOTPVerification.Dependency
{
    public class CommonMessageServices
    {
        public static void ListenToSmsRetriever()
        {
            DependencyService.Get<ilistentomessageretriever><!--?xml version="1.0" encoding="utf-8"-->()?.ListenToMessageRetriever();
        }
    }
    public interface IListenToMessageRetriever
    {
        void ListenToMessageRetriever();
    }
}</ilistentomessageretriever>
ステップ5 :メッセージングセンター
ザマリンFormSessageGingCenterでは、異なるコンポーネントが単純なメッセージングコンベンションの外部で認識せずに通信できます.MessageingCenterは、静的なクラスであるかもしれません.
購読:特定の署名とメッセージを聞いて、特定のアクションを受け取るときにそれらを受け取る.複数の加入者は同じメッセージを聞くことができます.
送信:リスナーのためのメッセージを投稿する.購読されていないリスナーがなければ、メッセージは無視されます.
ファイル名: utils .cs
コード
iusing DemoOFOTPVerification.Enum;
using System;
using System.Collections.Generic;
using System.Text;
using Xamarin.Forms;

namespace DemoOFOTPVerification.Utils
{
    public static class Utils
    {
        private static readonly object c1 = new object();
        public static void Subscribe<targs>(this object subscriber, SmsDataeventSubscriber, Action<targs>callBack)
        {
MessagingCenter.Subscribe(subscriber, eventSubscriber.ToString(), new Action<object, targs="">((e, a) => { callBack(a); }));
        }
        public static void Notify<targs>(SmsDataeventNotified, TArgs argument)
        {
MessagingCenter.Send(c1, eventNotified.ToString(), argument);
        }
    }
}</targs></object,></targs></targs>
ステップ6 : ENUMフォルダを作成し、このフォルダにenumクラスを保存します.
ファイルの種類
using System;
using System.Collections.Generic;
using System.Text;
namespace DemoOFOTPVerification.Enum
{
    public enumSmsData
    {
SmsRecieved,  
    }
}
手順7 :コードをmainページに書き込みます.XAMLcsファイル.
後ろのコードは加入者メッセージリスナーを加えます、そして、メッセージがメールアプリケーションから特定の形式で受け取られるなら、メッセージは通知されて、エントリーコントロールにOTP値を読み込んで、割り当てます.
ファイル名:
メインページ.XAMLCSコード
using DemoOFOTPVerification.Dependency;
using DemoOFOTPVerification.Enum;
using DemoOFOTPVerification.Utils;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;

namespace DemoOFOTPVerification
{
    public partial class MainPage :ContentPage
    {
        public MainPage()
        {
        InitializeComponent();
        this.Subscribe<string>(SmsData.SmsRecieved, =>
            {
        otpEntry.Text = (string);
            });
        }

        private void Subscribe<t>(SmsDatasmsRecieved, Action<object> p)
        {
            throw new NotImplementedException();
        }

        private void Button_Clicked(object sender, EventArgs e)
        {
      CommonMessageServices.ListenToSmsRetriever();
        }
    }
}</object></t></string>
ステップ8 :依存関係を使用してメッセージを聞く方法.
Androidプロジェクトに依存関係を作成することから始めましょう.あなたがxamarinを加えなかったならば.グーグルプレイサービス.AuthUnuGetパッケージを作成し、インスタンスを作成する前に追加します.
対応するSMSメッセージのリスニングを開始するために使用されるサンプルsmsReseareClientを取得します.
smsReetEventClientクライアント= smsLetterクライアント.getclient (アプリケーションコンテキスト)
タイムアウト(5分)までのSMSの対応SSMSを待って起動します.対応するSMSメッセージは送信の意図で送信されます.
ファイル名: listentomessage.cs
コード
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using DemoOFOTPVerification.Droid;
using Application = Android.App.Application;

[assembly: Dependency(typeof(ListenToSms))]
namespace DemoOFOTPVerification.Droid.Dependency
{
    public class ListenToMessage: IListenToSmsRetriever
    {
        public void ListenToMessageRetriever()
        {
SmsRetrieverClientSMSclient = SmsRetriever.GetClient(Application.Context);
var task1 = SMSclient.StartSmsRetriever();
            task1.AddOnSuccessListener(new SuccessListener());
            task1.AddOnFailureListener(new FailureListener());
        }
        private class SuccessListener : Object, IOnSuccessListener
        {
            public void OnSuccess(Object result)
            {
            }
        }
        private class FailureListener : Object, IOnFailureListener
        {
            public void OnFailure(Exception e)
            {
            }
        }
    }
}

計画242479152を雇うか?あなたの検索はここで終わります.
ステップ9
BroadCastReceiveはsmsReadEverClientからAPI放送を聞きます.上記のSMSのレトリバーは、目的のフィルタスマットリーを提供しています.smsBroadcast受信機を呼び出し、それを使ってブロードキャスト受信機を記録します.
ファイルの種類
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;

namespace DemoOFOTPVerification.Droid
{

    [BroadcastReceiver(Enabled = true, Exported = true)]
    [IntentFilter(new[] { SmsRetriever.SmsRetrievedAction })]
    public class SmsReceiver :BroadcastReceiver
    {
        private static readonlystring[] OtpMessageBodyKeywordSet = { "DevEnvExe Generated OTP" }; 
        public override void OnReceive(Context context, Intent intent)
        {
            try
            {
                if (intent.Action != SmsRetriever.SmsRetrievedAction) return;
var bundle = intent.Extras;
                if (bundle == null) return;
                var status = (Statuses)bundle.Get(SmsRetriever.ExtraStatus);
                switch (status.StatusCode)
                {
                    case CommonStatusCodes.Success:
                        var message = (string)bundle.Get(SmsRetriever.ExtraSmsMessage);
varfoundKeyword = OtpMessageBodyKeywordSet.Any(k =>message.Contains(k));
                        if (!foundKeyword) return;
var code = ExtractNumber(message);
Utilities.Notify(Events.SmsRecieved, code);
                        break;
                    case CommonStatusCodes.Timeout:
                        break;
                }

            }
            catch (System.Exception)
            {
            }
        }
        private static string ExtractNumber(string text)
        {
            if (string.IsNullOrEmpty(text)) return "";
var number = Regex.Match(text, @"\d+").Value;
            return number;
        }
    }
}

ステップ10 :ハッシュキーヘルパーを使用してキーを生成する
ハッシュチェーンは、アプリケーションのパッケージ名とアプリケーションの公開鍵証明書で構成されます.ハッシュコードを生成するには、次のC≧メソッドを実行してSMSメッセージに含まれるハッシュを生成します.
ハッシュキーを作成し、OTPメッセージに追加する必要があります.正しいハッシュなしで、あなたのアプリケーションはメッセージ通知を受けません.ハッシュキーは作成され、アプリケーションごとに1回格納されます.次に、このヘルパークラスをコードから削除し、ネイティブのAndroidプロジェクトで新しいクラスを作成できます.
ファイルの種類
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;

namespace DemoOFOTPVerification.Droid.Helper
{
    public class AppHashKeyHelperForSMS
    {
        private static string HASH_TYPE = "SHA-256";
        private static int NUM_HASHED_BYTES = 9;
        private static int NUM_BASE64_CHAR = 11;
private static string GetPackageSignature(Context context)
        {
PackageManagerpackageManager = context.PackageManager;
var signatures = packageManager.GetPackageInfo(context.PackageName, PackageInfoFlags.Signatures).Signatures;
            return signatures.First().ToCharsString();
        }

        public static string GetAppHashKey(Context context)
        {
            string keystoreHexSignature = GetPackageSignature(context);

            String appInfo = context.PackageName + " " + keystoreHexSignature;
            try
            {
MessageDigestmessageDigest = MessageDigest.GetInstance(HASH_TYPE);
messageDigest.Update(Encoding.UTF8.GetBytes(appInfo));
byte[] hashSignature = messageDigest.Digest();

hashSignature = Arrays.CopyOfRange(hashSignature, 0, NUM_HASHED_BYTES);
                String base64Hash = Android.Util.Base64.EncodeToString(hashSignature, Base64Flags.NoPadding | Base64Flags.NoWrap);
                base64Hash = base64Hash.Substring(0, NUM_BASE64_CHAR);

                return base64Hash;
            }
            catch (NoSuchAlgorithmException e)
            {
                return null;
            }
        }
    }
}

Xamarinアプリ開発会社 結論


このブログでは、Xamarinを使ってAndroidでOTPを検証せずにコードを実装する方法を説明しました.フォーム.まず、依存関係サービス、ブロードキャスト、キーヘルパー、メッセージングセンターのクラスを作成するよりも、Google Playサービスの認証パッケージをインストールできます.OTPを自動的に読んで、ユーザーは簡単にSMS経由で検証フローを完了することができます.