Функция, основанная на классе Xeoncross
function shortly($input){
$dictionary = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9'];
if($input===0)
return $dictionary[0];
$base = count($dictionary);
if(is_numeric($input)){
$result = [];
while($input > 0){
$result[] = $dictionary[($input % $base)];
$input = floor($input / $base);
}
return join("", array_reverse($result));
}
$i = 0;
$input = str_split($input);
foreach($input as $char){
$pos = array_search($char, $dictionary);
$i = $i * $base + $pos;
}
return $i;
}
Что это такое?
Ток FCM, или широко известный как registrationToken
, как в google-cloud-messaging . Как описано в документах GCM :
Идентификатор, выданный серверами соединения GCM, в клиентское приложение, которое позволяет ему получать сообщения. Обратите внимание, что регистрационные токены должны храниться в секрете.
blockquote>
Как я могу получить этот токен?
Обновление: токен может все еще однако, в соответствии с последней версией FCM,
FirebaseInstanceIdService.onTokenRefresh()
был заменен наFirebaseMessagingService.onNewToken()
- который по моему опыту работает так же, какonTokenRefresh()
] сделал .
Старый ответ:
Согласно документам FCM :
При первом запуске вашего приложения FCM SDK генерирует регистрационный токен для экземпляра клиентского приложения. Если вы хотите настроить таргетинг на отдельные устройства или создать группы устройств, вам необходимо получить доступ к этому токену.
Вы можете получить доступ к значению маркера, расширив FirebaseInstanceIdService. Убедитесь, что вы добавили службу в свой манифест, а затем вызовите getToken в контексте onTokenRefresh и запишите значение, как показано:
@Override public void onTokenRefresh() { // Get updated InstanceID token. String refreshedToken = FirebaseInstanceId.getInstance().getToken(); Log.d(TAG, "Refreshed token: " + refreshedToken); // TODO: Implement this method to send any registration to your app's servers. sendRegistrationToServer(refreshedToken); }
OnTokenRefreshcallback запускается всякий раз, когда генерируется новый токен, поэтому вызов getToken в своем контексте гарантирует, что вы получаете доступ к текущему доступному токену регистрации. FirebaseInstanceID.getToken () возвращает null, если токен еще не сгенерирован.
После того, как вы получили токен, вы можете отправить его на свой сервер приложений и сохранить его, используя ваш предпочтительный метод. Подробные сведения об API см. В справочной системе API экземпляра.
blockquote>
Вот простые шаги, чтобы добавить этот град:
dependencies {
compile "com.google.firebase:firebase-messaging:9.0.0"
}
Никаких дополнительных разрешений не требуется в манифесте, таком как GCM. Никакой приемник не нужен, чтобы проявить себя как GCM. С помощью FCM автоматически добавляется com.google.android.gms.gcm.GcmReceiver
.
Миграция службы прослушивателя
Теперь расширение службы InstanceIDListenerService
требуется, только если вы хотите получить доступ к токену FCM.
Это необходимо, если вы хотите
Добавить службу в манифесте
<service
android:name=".MyInstanceIDListenerService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
<service
android:name=".MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
Изменить MyInstanceIDListenerService
, чтобы расширить FirebaseInstanceIdService
и обновить код, чтобы прослушивать обновления токена и получать токен всякий раз, когда генерируется новый токен.
public class MyInstanceIDListenerService extends FirebaseInstanceIdService {
...
/**
* Called if InstanceID token is updated. This may occur if the security of
* the previous token had been compromised. Note that this is also called
* when the InstanceID token is initially generated, so this is where
* you retrieve the token.
*/
// [START refresh_token]
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
// TODO: Implement this method to send any registration to your app's servers.
sendRegistrationToServer(refreshedToken);
}
}
Для получения дополнительной информации посетите
Они отказались от метода getToken () в следующих примечаниях к выпуску. Вместо этого мы должны использовать getInstanceId.
https://firebase.google.com/docs/reference/android/com/google/firebase/iid/FirebaseInstanceId
Task<InstanceIdResult> task = FirebaseInstanceId.getInstance().getInstanceId();
task.addOnSuccessListener(new OnSuccessListener<InstanceIdResult>() {
@Override
public void onSuccess(InstanceIdResult authResult) {
// Task completed successfully
// ...
String fcmToken = authResult.getToken();
}
});
task.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// Task failed with an exception
// ...
}
});
Чтобы обрабатывать успех и сбой в том же прослушивателе, присоедините OnCompleteListener:
task.addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
@Override
public void onComplete(@NonNull Task<InstanceIdResult> task) {
if (task.isSuccessful()) {
// Task completed successfully
InstanceIdResult authResult = task.getResult();
String fcmToken = authResult.getToken();
} else {
// Task failed with an exception
Exception exception = task.getException();
}
}
});
Кроме того, класс FirebaseInstanceIdService устарел, и они придумали метод onNewToken в FireBaseMessagingService в качестве замены для onTokenRefresh,
вы можете ссылаться на примечания к выпуску здесь, https://firebase.google.com/support/release-notes/android
@Override
public void onNewToken(String s) {
super.onNewToken(s);
Use this code logic to send the info to your server.
//sendRegistrationToServer(s);
}
FirebaseInstanceIdService теперь устарела. вы должны получить токен в методе onNewToken в службе FirebaseMessagingService.
У меня есть обновление о токене Firebase Cloud Messaging, в котором я мог бы получить информацию.
Я действительно хотел узнать об этом изменении, поэтому просто отправил письмо в службу поддержки. Токен Firebase Cloud Messaging снова вернется к серверному ключу. Ничего не изменится. Мы снова увидим ключ сервера.