在 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
在Android平台上:
演示项目 here
创建一个 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>
在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
我需要实现一个小文本 UI 以在 Unity 中显示来自收件箱的 OTP MSM 消息。
有谁知道如何在不打开默认短信应用程序的情况下在Unity中查看或发送短信?
我发现下面的 link 可以在不启动默认 SMS 应用程序的情况下发送消息。我想阅读短信以便自动填写注册过程的 OTP。 Unity 有可能吗?
https://gist.github.com/rmdwirizki/87f9e68c7ef6ef809a777eb25f12c3b2
在Android平台上:
演示项目 here
创建一个 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>
在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