在 Unity Android 和 iOS 部署中从收件箱读取短信

Reading SMS from inbox in Unity Android and iOS deployment

我需要实现一个小文本 UI 以在 Unity 中显示来自收件箱的 OTP MSM 消息。

有谁知道如何在不打开默认短信应用程序的情况下在Unity中查看或发送短信?

我发现下面的 link 可以在不启动默认 SMS 应用程序的情况下发送消息。我想阅读短信以便自动填写注册过程的 OTP。 Unity 有可能吗?

https://gist.github.com/rmdwirizki/87f9e68c7ef6ef809a777eb25f12c3b2

https://gist.github.com/taesiri/7431660

在Android平台上:

演示项目 here

  1. 创建一个 AAR plug-ins and Android Libraries。 (你可以选择jar或aar来实现插件,唯一的区别是aar插件包含Android资源。在这种情况下,我们需要在AndroidManifiest.xml中添加权限,可以放在aar和稍后由Unity自动合并)

    按照此说明进行操作 Create an Android library

    在 aar 插件中,实现一个 BroadcastReceiver 来处理 SMS 接收意图。

    SmsListener.java

    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.telephony.SmsMessage;
    
    import com.unity3d.player.UnityPlayer;
    
    public class SmsListener extends BroadcastReceiver {
        private final String UnityCallbackObject = "UnitySMSReceiver";
        private final String UnityCallbackMethod = "OnSMSReceive";
    
        @Override
        public void onReceive(Context context, Intent intent) {
            StringBuilder builder = new StringBuilder();
    
            Object[] objects = (Object[]) intent.getExtras().get("pdus");
            SmsMessage message = null;
            for (int i = 0; i < objects.length; i++) {
                message = SmsMessage.createFromPdu((byte[]) objects[i]);
                builder.append(message.getDisplayMessageBody());
            }
            UnityPlayer.UnitySendMessage(UnityCallbackObject, UnityCallbackMethod, builder.toString());
        }
    }
    

    AndroidManifiest.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="your.package.name.here">
    
        <uses-permission android:name="android.permission.RECEIVE_SMS" />
        <uses-permission android:name="android.permission.READ_SMS" />
    
        <application>
            <receiver android:name="your.package.name.here.SmsListener" android:enabled="true">
                <intent-filter>
                    <action android:name="android.provider.Telephony.SMS_RECEIVED" />
                </intent-filter>
            </receiver>
        </application>
    </manifest>
    
  2. 在Unity端,将生成的aar文件放入Assets/Plugins/Android。 创建一个名为 UnitySMSReceiver 的游戏对象,并在场景中附加一个脚本实现函数 OnSMSReceive

    public void OnSMSReceive (string message) {
        // do something with your SMS message here.
    }
    

    我的环境:

    Unity 2017.2.0f3
    
    Android Studio 3.2.1
    

参考文献:

Android testing sms from emulator

Android – Listen For Incoming SMS Messages

How can I read SMS messages programmatically in Android

Android: Programmatically receiving SMS messags

Android SMS Receiver not working

Unity3D and aar issue

https://blog.gradle.org/introducing-compile-only-dependencies